Сложная панель инструментов: укажите, насколько панель инструментов должна быть свернута в onCreate
Я создаю ListView
и соответствующее ему приложение DetailView
.
У моего ListView
есть элементы, которые, если щелкнуть, возьмут пользователя в DetailViewActivity
.
На DetailViewActivity
я применил Складную панель инструментов.
Теперь при каждом открытии DetailViewActivity
на ImageView
в Складной панели инструментов устанавливается другое изображение (с разными размерами).
Я хочу, чтобы Toolbar
должен был быть открыт до определенной высоты по умолчанию (скажем 256dp), но если высота изображения больше, чем у пользователя, пользователь должен иметь возможность опускать, чтобы просмотреть остальную часть изображения, (точно так же, как Whatsapp)
Мне удалось программно установить высоту Toolbar
каждый раз, когда я открываю действие, но проблема в том, что Toolbar
всегда полностью расширяется. Поэтому, если изображение больше, панель инструментов по умолчанию очень большая. Я хочу, чтобы он был свернут до 256dp независимо от высоты изображения.
Код для моего макета:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.CoordinatorLayout
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="@dimen/expanded_toolbar_title_margin_start"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:src="@drawable/background_navdrawer"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.7"/>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="130dp"
android:background="@drawable/gradient_header_background"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.1"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:id="@+id/detail_nested_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<FrameLayout
android:id="@+id/detail_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MergeRootFrame"/>
</android.support.v4.widget.NestedScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="12dp"
android:orientation="vertical"
app:layout_anchor="@+id/appbar"
app:layout_anchorGravity="bottom">
<View
android:id="@+id/toolbar_shadow_transparent"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_elevation"
android:background="@color/transparent"/>
<View
android:id="@+id/toolbar_shadow"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_elevation"
android:background="@drawable/dropshadow"/>
</LinearLayout>
<com.github.clans.fab.FloatingActionButton
android:id="@+id/action_edit"
style="@style/MenuButtonsStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:src="@drawable/ic_edit"
app:layout_anchor="@+id/appbar"
app:layout_anchorGravity="bottom|right|end"/>
</android.support.design.widget.CoordinatorLayout>
<ImageView
android:id="@+id/detail_back_arrow_land"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"/>
<TextView
android:id="@+id/course_name_textview"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"/>
</RelativeLayout>
И в моей работе я нашел высоту и установил ее в Toolbar
следующим образом:
appBar = (AppBarLayout) findViewById(R.id.appbar);
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) appBar.getLayoutParams();
lp.height = my_bitmap.getHeight();
DetailActivity.appBar.setLayoutParams(lp);
DetailActivity.mImageView.setImageBitmap(my_bitmap);
Я прикрепляю скриншоты, чтобы сделать мою точку более ясной.
Это точно, насколько высокий я хочу, чтобы моя панель инструментов была всякий раз, когда активность запускалась:
![введите описание изображения здесь]()
И вот что я получаю от своего кода:
![введите описание изображения здесь]()
Теперь я мог бы жестко задавать высоту до 256dp в коде, но тогда пользователь не сможет прокручивать вниз, чтобы увидеть остальную часть изображения. Пожалуйста, предложите.
Спасибо за ваш ответ.
Любой ответ мог бы начать меня.
Ответы
Ответ 1
Выясните решение окончательно. Как только я получил новое изображение, я передал свой битмап в качестве параметра в свой метод expandToolbar(). Параметр heightDp указывает начальный прокрученныйHightight View.
Я получил идею от fooobar.com/info/51702/..., благодаря Tuấn Trần Anh
public static void expandToolbar(Bitmap bmp, int heightDp) {
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBar.getLayoutParams();
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior();
behavior.setTopAndBottomOffset(0);
behavior.onNestedPreScroll(rootLayout, appBar, null, 0, bmp.getHeight() - heightDp, new int[2]);
params.setBehavior(behavior);
DetailActivity.appBar.setLayoutParams(params);
}
Надеюсь, это поможет кому-то.