编辑 EditText 时工具栏调整大小直到软键盘

Toolbar resizes til softkeyboard when editing EditText

这是我的第一个问题,在搜索类似案例 2 小时后我找不到这样的案例 post。

问题是我有一个带有工具栏(v7 支持工具栏)和导航抽屉的 activity。这一切都很完美。主要 activity 有一个片段容器,我在其中放置不同的片段(通过导航抽屉)。在我将 EditText 添加到片段之前,一切都运行良好。当我 select EditText 输入一些文本时,显示软键盘并且工具栏调整大小直到底部与软键盘对齐(实际高度增加),我还不能 post 图片所以我希望这个够详细了没有输入 selected 的片段正常显示。 EditText 实际上在软键盘下方(至少可以看到 selection 指示器)。

这是主要的布局文件activity:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/main_color_500">


    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_height="match_parent"
        android:layout_width="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingLeft="0dp"
            android:paddingRight="0dp"
            android:paddingTop="0dp"
            android:paddingBottom="0dp"
            android:orientation="vertical"
            tools:context="com.joost.smartplanner.MainFragmentActivity">

            <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/main_color_500"
                android:fitsSystemWindows="true"
                android:elevation="4dp"
                android:id="@id/app_bar"
                app:theme="@style/CustomToolbarStyle">

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

            <FrameLayout
                android:id="@+id/mainFragmentContainer"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:background="@color/grey_100"
                android:padding="@dimen/zero_padding"
                android:gravity="top"
                android:orientation="horizontal"
                android:focusable="true">

            </FrameLayout>
        </LinearLayout>

        <fragment
            android:id="@+id/fragment_navigation_drawer"
            android:layout_width="@dimen/nav_drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:layout="@layout/fragment_navigation_drawer"
            android:name="com.joost.smartplanner.NavigationDrawerFragment" />

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

</LinearLayout>

包含编辑文本的片段:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/fragment_bg_white"
    android:focusable="true"
    tools:context="com.joost.smartplanner.CreateEventFragment">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/create_event_scrollview">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="@color/divider"
                android:layout_marginTop="8dp"
                android:layout_marginBottom="8dp"/>

            <!-- Event name part -->
            <EditText
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:imeOptions="flagNoExtractUi"
                android:hint="Event name"
                android:padding="8dp"
                android:ems="8"
                android:focusable="true"
                android:clickable="true"
                android:id="@+id/editText" />


        </LinearLayout>
    </ScrollView>
</LinearLayout>

最后在 MainActivity onCreate 中的工具栏启动代码:

//Toolbar initiation
        toolbar  = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_menu_white_24dp);
        getSupportActionBar().setTitle("");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        toolbar.setNavigationOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view) {

            }
        });
        toolbar.inflateMenu(R.menu.menu_main);

我试图消除此问题的一件事是为工具栏设置固定高度,而不是 wrap_content 值。这部分解决了工具栏保持相同高度但工具栏内的图标消失的问题,在我看来硬编码通常工作正常的高度不是正确的解决方案。

您在此处看到的问题与工具栏中的 android:fitSystemWindows="true" 属性有关。

看看。看来如果您使用 属性 父视图也应该设置 android:fitSystemWindows="true"