在Android中,当软键盘弹出时如何将layoutFragment向上移动?

7
我有这个页面:
我打开软键盘时,无法看到其他EditText。我该怎么办?
注意:我使用了下面的代码,但没有起作用。而我的类是继承自Fragment的!
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

请查看编辑后的答案以解决您的问题。 - A-Droid Tech
5个回答

5

有两种方法可以实现这个,你可以在Manifest活动中使用以下代码:

这将起作用,adjust-pan将向上滚动您的界面并打开软键盘。

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

<activity android:name="XXXActivity" android:windowSoftInputMode="adjustPan">
</activity>


2

只需在包含Fragment的活动的onCreate方法中添加window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)即可(这将影响活动内所有片段)。

例如:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window?.setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
    )
}

1

可运行的代码

对于碎片:

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

针对活动:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1
您也可以使用NestedScrollView作为父视图。在清单文件中设置fitsSystemWindows="false"并设置android:windowSoftInputMode="adjustResize"

-2
我已经使用了类似这样的方法来编程地显示软键盘,这对我来说是有效的,可以防止在启动键盘时自动调整屏幕大小。
EditText et =  (EditText))findViewById(R.id.edit_text);  
  Timer timer = new Timer();
            TimerTask task = new TimerTask() {

                @Override
                public void run() {
                    InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.toggleSoftInputFromWindow(et.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0);

                }
            };
            timer.schedule(task, 200);

在清单文件中使用:

<activity android:name="XXXActivity" android:windowSoftInputMode="adjustPan">
</activity>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接