android 当软键盘打开时,DialogFragment不显示

q8l4jmvw  于 2022-11-20  发布在  Android
关注(0)|答案(3)|浏览(340)

我在应用程序的其他地方有对话框,工作得很好(键盘不会隐藏视图),但在这个我写的新对话框中,当键盘打开时,它不会向上移动视图。
我的对话框布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res-auto"
    android:id="@+id/MyLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_margin="15dp"
    android:background="@drawable/dialog_background"
    android:clickable="true"
    android:orientation="vertical"
    custom:maxHeight="@dimen/dialog_max_height"
    custom:maxWidth="@dimen/dialog_max_width" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="10dp"
        android:gravity="center"
        android:text="something" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/SomeEditText"
            android:layout_width="match_parent"
            android:layout_height="fill_parent"
            android:minHeight="100dp"
            android:layout_margin="15dp"
            android:background="#ffffff"
            android:gravity="right|top"
            android:inputType="textMultiLine"
            android:singleLine="false"
            android:textColor="@color/edit_text_text_color"
            android:textSize="16dp" />

    </LinearLayout>

    <Button
        android:id="@+id/SomeButton"
        android:layout_width="match_parent"
        android:layout_height="@dimen/dialog_button_height"
        android:layout_margin="15dp"
        android:text="text" />

</LinearLayout>

我已经

android:windowSoftInputMode="adjustPan" >

在我的清单上。

oalqel3c

oalqel3c1#

找到了解决办法:
我输入:getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
在onCreateDialog回呼中

2nc8po8w

2nc8po8w2#

我也遇到了同样的问题,通过将getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)保存在oncreateview中,解决了这个问题

9w11ddsr

9w11ddsr3#

由于SOFT_INPUT_ADJUST_RESIZE从android 30开始已弃用,因此应使用Window.setDecorFitsSystemWindows(boolean decorFitsSystemWindows)
下面是DialogFragment示例

class MyDialog extends DialogFragment {

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        getDialog().getWindow().setDecorFitsSystemWindows(true);
    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.my_dialog, container, false);

        v.setOnApplyWindowInsetsListener((v1, insets) -> {
            Insets imeInsets = insets.getInsets(WindowInsets.Type.ime());
            v1.setPadding(0, 0, 0, imeInsets.bottom);
            return insets;
        });
  
        getDialog().getWindow().setDecorFitsSystemWindows(false);    
        return v;
    }
}

相关问题