Intereting Posts
Как я могу выровнять меню / значки панели инструментов Android слева, как в приложении «Карты Google»? Что случилось с этой строкой формата? Picasso java.lang.IllegalStateException: вызов метода не должен происходить из основного потока Выберите камеру в загрузке файла в приложении кордовы на андроид без использования камеры cordova Компиляция, предоставление, APK – область зависимостей Android Android Studio 2.0 мгновенный запуск не работает, но появляются эти советы? Ошибка при запуске Android studio IDE ListView вложенная прокрутка по API <21 Лучше ли использовать несколько SpanObjects или несколько TextViews в Android? OutofMemoryError: размер растрового изображения превышает бюджет VM (Android) Как извлечь значения цвета (#rgb) из темы Android? Анализ: отправьте push-уведомления из приложения. Мастер плейера Roman Nurik's Wizard – как получить доступ к собранным данным? Изометрический игровой движок для Android Библиотека выравнивания текста в Java

Панель инструментов расширяется при ударе

В моем приложении у меня есть сворачивающаяся панель инструментов. Если я запустил определенный фрагмент, я хочу свернуть панель инструментов, чтобы он вел себя как «нормальный», и пользователь не может расходовать его самостоятельно. Вот мой макет, который я использую для моей панели инструментов:

<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/appBarLayout" android:layout_width="match_parent" android:layout_height="wrap_content" > <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" app:contentScrim="?attr/colorPrimary" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:titleEnabled="false" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:src="@drawable/drawer_background" app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed" android:layout_width="match_parent" android:layout_height="172dp" android:scaleType="centerCrop" app:layout_collapseMode="parallax" android:minHeight="100dp" /> <android.support.v7.widget.Toolbar android:id="@+id/toolBar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:layout_scrollFlags="scroll|enterAlways" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> 

Я также могу свернуть макет из кода так:

 appBarLayout.setExpanded(false, false); final AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) collapsingToolbarLayout.getLayoutParams(); params.setScrollFlags(0); collapsingToolbarLayout.setLayoutParams(params); 

Но это не помогает. Если пользователь переместится с панели инструментов, он будет расширяться.

У вас есть идеи, почему?

Solutions Collecting From Web of "Панель инструментов расширяется при ударе"

Основная проблема заключается в том, что CollapsingToolbarLayout.lock(); Метод до сих пор (v23.2.1 дизайна поддержки). Надеемся, что эта функция будет включена в будущую версию. До тех пор я предлагаю следующее обходное решение:

Вы можете свернуть и заблокировать панель инструментов:

 appbar.setExpanded(false,false); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams(); lp.height = (int) getResources().getDimension(R.dimen.toolbar_height); 

И разблокировать его с помощью:

  CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams(); lp.height = (int) getResources().getDimension(R.dimen.nav_header_height); 

Однако с приведенным выше кодом возникает проблема:

Когда принудительно сворачивается Координатор. CollapsingToolbarLayout.setTitle(CharSequence title); нашей панели инструментов и CollapsingToolbarLayout.setTitle(CharSequence title); Больше не работает. Чтобы исправить это, мы добавляем TextView на панель инструментов и соответствующим образом управляем его видимостью. (Мы хотим, чтобы он «ушел» во фрагмент, в котором панель инструментов «разблокирована» и «видна» во фрагменте, который имеет свою панель инструментов «заблокирован».

Мы должны установить android:textAppearance TextView android:textAppearance – то же самое с app:collapsedTitleTextAppearance CollapsingToolbarLayout app:collapsedTitleTextAppearance – быть последовательным и не нарушать пользователя с разными размерами и цветами текста панели инструментов.

Таким образом, с таким интерфейсом:

 public interface ToolbarManipulation { void collapseToolbar(); void expandToolbar(); void setTitle(String s); } 

Таких как:

 @Override public void collapseToolbar(){ appbar.setExpanded(false,false); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams(); lp.height = (int) getResources().getDimension(R.dimen.toolbar_height); toolbarCollapsedTitle.setVisibility(View.VISIBLE); } @Override public void expandToolbar() { CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appbar.getLayoutParams(); lp.height = (int) getResources().getDimension(R.dimen.nav_header_height); toolbarCollapsedTitle.setVisibility(View.GONE); } @Override public void setTitle(String s) { collapsingToolbarLayout.setTitle(s); toolbarCollapsedTitle.setText(s); collapsingToolbarLayout.invalidate(); toolbarCollapsedTitle.invalidate(); } 

И основной xml:

 .... <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:collapsedTitleTextAppearance="@style/CollapsedAppBar" > <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:layout_collapseMode="pin" app:popupTheme="@style/AppTheme.PopupOverlay" > <TextView android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:visibility="gone" android:layout_gravity="center_vertical|start" android:gravity="center_vertical|start" android:id="@+id/toolbar_collapsed_title" android:textAppearance="@style/CollapsedAppBar" /> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> ...... 

Вы можете заблокировать и разблокировать панель инструментов по своему усмотрению. Ваши фрагменты должны вызывать эти функции в onResume ();

Я загрузил пример реализации здесь .

Примечание. Это всего лишь обходной путь и, очевидно, не самое чистое решение. Мы ждем новой версии com.android.support, чтобы решить эту проблему.

Я не совсем уверен, что это то, что вы ищете

 CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { return false; } }); 

Попробуйте изменить высоту AppBar. Меня устраивает.

 public void lockAppBar() { int appbarHeight = (int)getResources().getDimension(R.dimen.your_fixed_appbar_height); getView().findViewById(R.id.my_appbar).getLayoutParams().height = appbarHeight; } 

Сделайте findViewById(R.id.image_view).setVisibility(View.GONE); Где image_view – это идентификатор imageView в сворачивающейся панели инструментов. Но если вы хотите сделать это для определенного фрагмента, я предлагаю называть то же самое с использованием обмена фрагментацией.

Ни один из предоставленных решений не работал для меня, кроме этого. С помощью этого решения я могу легко управлять состоянием сворачиваемой панели инструментов. Это предотвратит развёртывание / включение свертывания сворачивающейся панели инструментов и установку заголовка для нее.

 public void lockAppBar(boolean locked,String title) { if(locked){ appBarLayout.setExpanded(false, true); int px = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams)appBarLayout.getLayoutParams(); lp.height = px; appBarLayout.setLayoutParams(lp); collapsingToolbarLayout.setTitleEnabled(false); toolbar.setTitle(title); }else{ appBarLayout.setExpanded(true, false); appBarLayout.setActivated(true); CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); lp.height = (int) getResources().getDimension(R.dimen.toolbarExpandHeight); collapsingToolbarLayout.setTitleEnabled(true); collapsingToolbarLayout.setTitle(title); } } 

Ну попробуйте установить некоторые параметры в toolBar, tabLayout программно, у меня есть ViewPager смены флагов onPageSelected (int)

  @Override public void onPageSelected(int position) { AppBarLayout.LayoutParams params = new AppBarLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); if (position == 3) {//listen for scrolls only for Fragment 3 params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); toolBar.setLayoutParams(params);//hide as per scroll params = new AppBarLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); tabLayout.setLayoutParams(params);//always visible } else { appBarLayout.setExpanded(false, true); params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED); toolBar.setLayoutParams(params);//don't listen to scrolls tabLayout.setLayoutParams(params);//dont listen to scrolls } } 

Используйте / Установите флаги выше, чем вам нужно. AppBarLayout.LayoutParams

Happy_Coding;