如何使片段荣誉软输入模式的活动

时间:2014-08-09 04:37:50

标签: android android-layout android-fragments android-softkeyboard android-fragmentactivity

我在清单中配置了如下活动:

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”行为?如果重要的话,我从支持库中获取片段功能。

2 个答案:

答案 0 :(得分:19)

活动和屏幕上的软键盘都有自己的窗口。 android:windowSoftInputMode表示活动的主窗口应如何与屏幕软键盘的窗口交互。

我相信你正在使用DialogFragment。它有自己的窗口,漂浮在活动窗口的顶部。因此,为Activityandroid: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)

您可以在片段中手动关闭和打开关键字。检测窗口大小运行时间并检查可见视图高度是否匹配。

因为清单不知道片段。片段就像是组件视图的集合。我们可以在任何地方使用内部活动