Панель инструментов изменяет размеры до программной клавиатуры при редактировании EditText

Это мой первый вопрос здесь, после 2 часов поиска подобного случая я не смог найти ни одного для этого поста.

Проблема в том, что у меня есть действие с панелью инструментов (панель инструментов поддержки v7) и навигационным ящиком. Это все работает отлично. Основное действие имеет контейнер фрагментов, куда я помещаю разные фрагменты (через панель навигации). Все работало отлично, пока я не добавил EditText к фрагменту. Когда я выбираю EditText для ввода текста, отображается программная клавиатура, а размер панели инструментов изменяется до тех пор, пока нижняя часть не будет выровнена с программной клавиатурой (фактическая высота увеличивается), я пока не могу публиковать изображения, поэтому я надеюсь, что это достаточно подробно. Фрагмент без выбранного входа отображается нормально. EditText на самом деле находится под программной клавиатурой (по крайней мере, там можно увидеть индикатор выбора).

это файл макета из mainactivity:

<?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>

Фрагмент, содержащий editText:

<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. Это частично устраняет проблему, при которой панель инструментов остается на той же высоте, но значки внутри панели инструментов исчезают, и, на мой взгляд, жесткое кодирование высоты, которая обычно работает нормально, не является правильным решением.




Ответы (1)


Проблема, которую вы здесь видите, связана с атрибутом android:fitSystemWindows="true" на панели инструментов.

Взгляните на панель инструментов Android appcompat растягивается, когда поиск получает фокус . Кажется, что если вы используете это свойство, родительское представление также должно иметь набор android:fitSystemWindows="true".

person Ertyguy    schedule 25.01.2015
comment
После часа дополнительных поисков я нашел ту же тему, только что. Спасибо! - person Joost; 25.01.2015
comment
@Ertyguy Это мой XML-файл макета pastebin.com/ZL4t5iuV. Не могли бы вы сообщить мне, где мне нужно используйте атрибут android:fitSystemWindows=true. Я был сбит с толку, и где я его использую, все же панель инструментов скрывается, когда мой autocompleteTextview получает фокус, то есть он выталкивает панель инструментов с экрана - person KK_07k11A0585; 26.08.2015
comment
@KK_07k11A0585В андроиде: id=@+id/container_toolbar LinearLayout - person Smeet; 25.04.2016
comment
android:fitSystemWindows=true не существует. Вы правильно написали? - person Mitch; 17.08.2019