Android线性布局重量和软键盘问题

时间:2017-01-28 05:39:07

标签: android android-layout android-linearlayout android-softkeyboard

我试图在聊天应用中实现以下视图。基本上有两种状态,一种是软触键盘显示,另一种是没有。

所以这是我没有键盘显示的初始状态。

enter image description here

当键盘出现时会发生这种情况。

enter image description here

这就是我想要实现的目标。

enter image description here

注意 我目前正在使用" adjust-resize"作为windowSoftInputMode。我知道使用" adjust-pan"将解决问题,但用" adjust-pan"有两个问题:

  1. 工具栏也向上移动,为编辑文本和键盘腾出空间。
  2. editText部分被键盘覆盖。
  3. 这里需要布局专家的帮助! 提前谢谢。

    修改

    这就是我的XML:

    <RelativeLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:id="@+id/view_group_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/colorPrimaryDark"
                android:elevation="4dip" >
    
                <!-- Toolbar stuff -->
    
            </android.support.v7.widget.Toolbar>
    
        </LinearLayout>
    
        <LinearLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/bottom_bar"
            android:layout_below="@+id/view_group_toolbar"
            android:orientation="vertical">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="0.6">
    
                <include
                    layout="@layout/layout_that_covers_60%_of_the_screen (This is not my actual layout name :/ using it for understandability)"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/view_group_recycler_view"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="0.4"
                android:gravity="center_vertical">
    
                <include
                    layout="@layout/layout_that_covers_40%_of_the_screen"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </LinearLayout>
    
        </LinearLayout>
    
        <RelativeLayout
            android:id="@+id/bottom_bar"
            android:layout_width="match_parent"
            android:layout_height="60dip"
            android:layout_alignParentBottom="true"
            android:gravity="bottom"
            android:padding="8dip" > 
                <!-- This is where my edit text resides -->
    
        </RelativeLayout> 
    
    </RelativeLayout>
    

1 个答案:

答案 0 :(得分:0)

所以这就是我认为你应该做的事情, 使用

windowSoftInputMode =&#34; adjustResize&#34; - 活动的主窗口始终调整大小,以便为屏幕上的软键盘腾出空间。 adjustResize还可以将ToolBar保持在最顶层。

尝试在NestedScrollView中添加两个LinearLayouts。我之所以这样说是因为您的NestedScrollView内容可以向上滚动。

我认为您的布局看起来像这样。

sessionFactory.getCurrentSession().saveOrUpdate(personalDetails);

请告诉我这是否适合您。

编辑1: 如果布局中有RecyclerView,则可能需要设置此属性以进行平滑滚动 -

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:id="@+id/view_group_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimaryDark"
        android:elevation="4dip" >

        <!-- Toolbar stuff -->

    </android.support.v7.widget.Toolbar>

</LinearLayout>


<NestedScrollView 
    android:layout_above="@+id/bottom_bar"
    android:layout_below="@+id/view_group_toolbar">
  <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.6">

        <include
            layout="@layout/layout_that_covers_60%_of_the_screen (This is not my actual layout name :/ using it for understandability)"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/view_group_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.4"
        android:gravity="center_vertical">

        <include
            layout="@layout/layout_that_covers_40%_of_the_screen"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

  </LinearLayout>
</NestedScrollView>
<RelativeLayout
    android:id="@+id/bottom_bar"
    android:layout_width="match_parent"
    android:layout_height="60dip"
    android:layout_alignParentBottom="true"
    android:gravity="bottom"
    android:padding="8dip" > 
        <!-- This is where my edit text resides -->

</RelativeLayout>