Координатор не работает, изменить размер не работает

МОЙ КОД (и более): у меня есть схема расположения координаторов, как указано ниже

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapse_toolbar"
            android:layout_width="match_parent"
            android:layout_height="280dp"
            android:fitsSystemWindows="true"
            app:contentScrim="@color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <include layout="@layout/top" /> <!-- A RelativeLayout -->

            <android.support.v7.widget.Toolbar
                android:id="@+id/MyToolbar"
                android:layout_width="match_parent"
                android:layout_height="64dp"
                app:layout_collapseMode="parallax">

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

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <!-- Main content here -->

    </FrameLayout>

</android.support.design.widget.CoordinatorLayout>

Внутри структуры кадра я раздуваю пользовательский вид с текстом редактирования, который размещен внизу. Текст для редактирования и пользовательский вид отображаются нормально.

Я определил android:windowSoftInputMode="AdjustResize | StateHidden" в манифесте.

МОЯ ПРОБЛЕМА: при нажатии на текст редактирования, чтобы вызвать экранную клавиатуру, он перекрывает содержимое, а не изменяет размер FrameLayout. Я просто не мог заставить FrameLayout изменить размер, когда появляется программная клавиатура. Любая помощь будет оценена

Вещи, которые я испытал:

  1. Обновлена ​​библиотека поддержки дизайна до 22.2.1
  2. Добавлен android:layout_gravity="fill_vertical" в качестве атрибута в FrameLayout.

7 ответов

Это еще одна ошибка в lib для поддержки проектирования, и, похоже, они не планируют ее исправлять в ближайшее время:

Подтверждено, но, вероятно, не будет исправлено в ближайшее время. У AdjustResize есть несколько хороших сценариев использования, но использование AppBarLayout с CollapsingToolbarLayout вместе с ним не является одним из них.

Тревожно, что никто не пытался добавить EditText к CoordinatorLayout с android:windowSoftInputMode="adjustResize" при разработке дизайна поддержка lib.

Попробуй это


your_layout.xml

<RelativeLayout
    android:fitsSystemWindows="true" > <!-- Crucial! -->

    <android.support.design.widget.CoordinatorLayout>
        ...
        <android.support.v7.widget.RecyclerView />
        ...
    </android.support.design.widget.CoordinatorLayout>

</RelativeLayout>

AndroidManifest.xml

<activity
    android:name=".YourActivity"
    android:windowSoftInputMode="adjustResize"> <!-- Crucial! -->
</activity>

Я использую это для решения ошибки CoordinatorLayout

в onCreateDialog в BottomSheetFragment

KeyboardUtil(getActivity(), view);

или же

Для использования активности

new KeyboardUtil(this, findViewById(R.id.fragment_container));

с помощью этого класса Util

Версия Java: https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java

Версия Kotlin: https://gist.github.com/agustinsivoplas/6f80233699aebebd512542503ea32682 Предоставлено:Mikepenz,Agustinsivoplas.

Мой макет

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout>

        <android.support.design.widget.CollapsingToolbarLayout>

            <ImageView>

            <android.support.v7.widget.Toolbar>

        <android.support.design.widget.CollapsingToolbarLayout>

    <android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton>

<android.support.design.widget.CoordinatorLayout>

У меня была точно такая же проблема. Я понял, что если я использую что-то в, например, NestedScrollView или в пределах FrameLayout я бы также предположил, что обрабатывает сам свиток, CoordinatorLayout не adjustResize / ведите себя так, как вы хотите. Настройки AdjustResize | AdjustPan в Манифесте игнорируются.

Для меня это было очень трудно понять, потому что я сам написал несколько (комбинированных) взглядов, которые содержали RelativeLayout или же ScrollViews и тому подобное.

Если я просто не буду использовать RelativeLayouts или что-то еще, чем NestedScrollView чтобы справиться с прокруткой вида, он ведет себя так, как я и хотел.

Но я думаю, что есть ошибка внутри CoordinatorLayout или поведение, которое мы все должны понимать лучше, чтобы избежать подобных проблем...

Может быть, это полезно знать для кого-то...

Мои настройки:

  • support / design / appcompat: 22.2.1
  • нет необходимости в layout_gravity

Не используйте CoordinatorLayout в качестве корневого макета, если вы используете представления EditText в NestedScrollView

<androidx.constraintlayout.widget.ConstraintLayout
  android:fitsSystemWindows="true">

  <androidx.coordinatorlayout.widget.CoordinatorLayout>
    <com.google.android.material.appbar.AppBarLayout>

      <com.google.android.material.appbar.CollapsingToolbarLayout/>

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView>
    <Editext/>
    <androidx.core.widget.NestedScrollView/>

  </androidx.coordinatorlayout.widget.CoordinatorLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

AdjustResize не работает с

app:layout_behavior="@string/appbar_scrolling_view_behavior"

Удалить эту строку:

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

Привет у меня была такая же проблема, и я только поставил

        android:windowSoftInputMode="adjustPan"

в yout манифест для соответствующей деятельности, и клавиатура теперь перемещается вверх соответственно

Укороченная версия от KeyboardUtil, добавьте это к своей деятельности:

getWindow().getDecorView().getViewTreeObserver()
        .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    public void onGlobalLayout() {
        Rect r = new Rect();
        getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
        rootView.setPadding(0, 0, 0,
                activity.getResources().getDisplayMetrics().heightPixels - r.bottom);
    }
});

На данный момент я решаю это, используя androidx.drawerlayout.widget.DrawerLayout для переноса:

CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout, Панель инструментов, NestedScrollView

Возможно, это не лучшая идея, но у меня она работает;)

В моем проекте есть образец: https://github.com/maiconpintoabreu/Kupping-Mobile/blob/master/app/src/main/res/layout/activity_event_new.xml

Другие вопросы по тегам