键盘启动时如何防止提升列表视图

时间:2014-04-21 14:17:59

标签: android android-listview soft-keyboard

这是代码MainActivity java和main.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:gravity="center"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:background="#75F575">

<LinearLayout
    android:clickable="true"
    android:layout_gravity="center"
    android:orientation="vertical"
    android:layout_width="250dp"
    android:layout_height="100dp"
    android:background="#C69817"
    android:id="@+id/secondLayout">

    <ListView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:id="@+id/mainListView1"/>

</LinearLayout>

</LinearLayout>

爪哇:

      public void onCreate(Bundle       savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);              
            ListView lv = (ListView) findViewById(R.id.mainListView1);
            ArrayAdapter<String> a = new ArrayAdapter<String>(this, 
                    android.R.layout.simple_list_item_1 ,
                    new String [] {"item1","item2"});
            lv.setAdapter(a);
            getWindow().setSoftInputMode(
                    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}   

显示键盘时,列表视图抬起。如何防止这种情况发生。 没有listview - 一切正常(布局不上升)。 谢谢。

更新问题以回答FOliveira。 不幸的是,我无法在我的真实应用程序中删除java代码(setSoftInputMode)。必须是Java代码,并且listview的布局不得上升。尝试删除listview,你会看到布局没有绝对移动,为什么listview的布局正在移动?根据我的条件如何防止这种情况?

2 个答案:

答案 0 :(得分:0)

您需要在android:windowSoftInputMode="adjustPan"文件的标记中添加AndroidManifest.xml

  

活动的主窗口未调整大小以便为软键盘腾出空间。相反,窗口的内容会自动平移,以便键盘不会遮挡当前焦点,用户可以随时看到他们正在键入的内容。这通常不如调整大小,因为用户可能需要关闭软键盘才能进入并与窗口的模糊部分进行交互。

如果此选项不符合您的需求,您可以继续检查Android documention about soft input mode

答案 1 :(得分:0)

我正在使用android:windowSoftInputMode="stateVisible|adjustNothing",但这只适用于高于10的API(不幸的是)。

更新: 添加到listview后,此属性:

android:focusableInTouchMode="false"
android:isScrollContainer="false"

我完全解决了我的问题。