Координатор не работает
МОЙ КОД (и многое другое):
У меня есть макет координатора следующим образом
<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