Координатор не работает

МОЙ КОД (и многое другое): У меня есть макет координатора следующим образом

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

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

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

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

ВЕЩИ, КОТОРЫЕ Я ПОЛУЧИЛ:

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

Ответы

Ответ 1

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

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

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

Ответ 2

Попробуйте это


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>

Ответ 3

Я использую это для решения ошибки 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

Ответ 4

Мой макет

<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 или внутри a FrameLayout я будет также предполагать, что обрабатывает сам Scroll, CoordinatorLayout не adjustResize/ведет себя так, как вы хотите. Настройки adjustResize | adjustPan в манифесте игнорируются.

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

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

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

Может быть, это полезно знать кому-то...

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

  • поддержка/дизайн/appcompat: 22.2.1
  • нет необходимости в layout_gravity

Ответ 5

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

        android:windowSoftInputMode="adjustPan"

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

Ответ 6

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

app:layout_behavior="@string/appbar_scrolling_view_behavior"

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

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

Ответ 7

Укороченную версию из 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);
    }
});

Ответ 8

Не используйте 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>

Ответ 9

Сейчас я решаю это с помощью 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