键盘向上时如何调整列表视图的大小?

Posted

技术标签:

【中文标题】键盘向上时如何调整列表视图的大小?【英文标题】:How to resize a listview when the keyboard goes up? 【发布时间】:2015-12-31 00:01:05 【问题描述】:

这是没有键盘的屏幕:

http://i.stack.imgur.com/YOnMf.png

但是当我点击 EditText 并且键盘上升时,标题混乱并消失了,因为它也上升了:

http://i.stack.imgur.com/zyJ3j.png

这是代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".SecondActivity"
android:background="@color/white">

<RelativeLayout
    android:layout_
    android:layout_
    android:id="@+id/abs"
    android:orientation="horizontal"
    android:layout_alignParentTop="true"
    android:gravity="center">

        <ImageView
            android:layout_
            android:layout_
            android:id="@+id/btnVoltar"
            android:src="@drawable/inochat"
            android:layout_marginLeft="3dp"/>

        <ImageView
            android:layout_
            android:layout_
            android:id="@+id/usu"
            android:src="@drawable/usuario"
            android:layout_alignParentRight="true"
            android:background="@drawable/foto"
            android:layout_marginRight="2dp"
            android:layout_marginTop="3dp"/>

        <TextView
            android:layout_
            android:layout_toLeftOf="@+id/addfavorito"
            android:layout_
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="Nome"
            android:id="@+id/nomeoutro"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/btnVoltar"
            android:layout_toEndOf="@+id/btnVoltar"
            android:textColor="#000000"
            android:textSize="15dp"
            android:layout_marginLeft="5dp"/>

        <ImageView
            android:layout_
            android:layout_
            android:src="@drawable/traco"
            android:layout_alignParentBottom="true"/>

        <ImageButton
            android:layout_
            android:layout_
            android:id="@+id/addfavorito"
            android:layout_centerVertical="true"
            android:layout_toStartOf="@+id/usu"
            android:src="@drawable/fav"/>
</RelativeLayout>

<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_refresh_layout"
    android:layout_
    android:layout_
    android:layout_above="@+id/llMsgCompose"
    android:layout_below="@+id/abs">

    <ListView
        android:isScrollContainer="false"
        android:layout_above="@+id/llMsgCompose"
        android:id="@+id/txtMensagens"
        android:layout_
        android:layout_
        android:background="@null"
        android:divider="@null"
        android:transcriptMode="alwaysScroll">
    </ListView>

</android.support.v4.widget.SwipeRefreshLayout>

<RelativeLayout
    android:id="@+id/llMsgCompose"
    android:layout_
    android:layout_
    android:background="@color/white"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="1dp"
    android:gravity="center">

    <EditText
        android:id="@+id/txtMensagem"
        android:layout_
        android:layout_
        android:background="@color/bg_msg_input"
        android:textColor="@color/text_msg_input"
        android:paddingLeft="6dp"
        android:paddingRight="6dp"
        android:inputType="text"

        android:layout_alignParentRight="true"
        android:layout_toRightOf="@+id/icone"/>

    <ImageView
        android:layout_
        android:layout_
        android:id="@+id/icone"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@color/bg_msg_input"
        android:src="@drawable/msg"/>
</RelativeLayout>

</RelativeLayout>

【问题讨论】:

尝试在清单中的活动标签中添加 android:windowSoftInputMode="adjustResize" 或 android:windowSoftInputMode="adjustPan" 【参考方案1】:

尝试在 Manifest 中为此活动添加以下内容:

android:windowSoftInputMode="adjustPan"

android:windowSoftInputMode="adjustPan"android:windowSoftInputMode="adjustResize" 的区别:

“调整大小”

调整活动窗口的大小,为屏幕上的软键盘腾出空间。

“调整盘”

活动窗口的内容会自动平移,因此当前焦点永远不会被键盘挡住。这样用户就可以看到他们正在输入的内容。这通常不如调整大小可取,因为用户可能需要关闭软键盘才能到达窗口的模糊部分并与之交互。

另外,请参阅此博客,

http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html

类似的,

 <activity
   android:label="@string/app_name"
   android:name=".MainActivity" android:windowSoftInputMode="adjustNothing">
   <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
 </activity>

【讨论】:

我们试过了,但没用。当您单击 EditText 时,它仍然会上升。不过还是谢谢! 哦,可以试试这个吗? android:windowSoftInputMode="adjustNothing" 我们已经尝试过了。由于某种原因,Manifest 中的所有标签都不能像我们想要的那样工作。 这是我们遇到问题的活动的代码 【参考方案2】:

在你的 onCreate() 中添加这一行:

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

这是之前的样子: https://imgur.com/a/DPd8eoD

之后: https://imgur.com/a/LxgW6fn

【讨论】:

以上是关于键盘向上时如何调整列表视图的大小?的主要内容,如果未能解决你的问题,请参考以下文章

避免 android 软键盘调整布局大小。或回调隐藏视图

Android:回收站视图没有滚动到最后一个位置

使用垂直自动调整大小时视图向上移动

调整列表视图大小时如何设置标题宽度等于其列表视图控件宽度?

显示键盘时在 iPad 上的表单中调整表格视图的大小

显示键盘时推送另一个视图时的tableView调整大小问题