我在清单中配置了如下活动:
android:windowSoftInputMode="stateHidden|adjustPan"
此活动会创建一个片段。该片段将自身配置为onCreate()中的全屏,例如:
setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme);
片段的布局大致如下:
<LinearLayout>
<!-- a fixed height header -->
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.0">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- some EditTexts -->
</LinearLayout>
</ScrollView>
<!-- a fixed height footer -->
</LinearLayout>
不幸的是,当显示片段时,软键盘会自动显示,输入模式为“adjustResize”而不是“adjustPan”。这会导致页脚始终可见;当键盘显示时,ScrollView的高度会缩小。
如何配置片段以具有“stateHidden | adjustPan”行为?如果重要的话,我从支持库中获取片段功能。
答案 0 :(得分:19)
活动和屏幕上的软键盘都有自己的窗口。
android:windowSoftInputMode
表示活动的主窗口应如何与屏幕软键盘的窗口交互。
我相信你正在使用DialogFragment
。它有自己的窗口,漂浮在活动窗口的顶部。因此,为Activity
到android:windowSoftInputMode
设置的标记不适用于DialogFragment
。
一种可能的解决方案是以编程方式为DialogFragment
窗口设置这些标志。使用getDialog检索基础对话框实例,使用getWindow检索对话框窗口,并使用setSoftInputMode指定软输入模式的标记。
public static class MyDialog extends DialogFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Dialog layout inflater code
// getDialog() need to be called only after onCreateDialog(), which is invoked between onCreate() and onCreateView().
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
// return view code
}
}
答案 1 :(得分:-2)
您可以在片段中手动关闭和打开关键字。检测窗口大小运行时间并检查可见视图高度是否匹配。
因为清单不知道片段。片段就像是组件视图的集合。我们可以在任何地方使用内部活动