Подтвердить что ты не робот

Сложная панель инструментов: укажите, насколько панель инструментов должна быть свернута в 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 в коде, но тогда пользователь не сможет прокручивать вниз, чтобы увидеть остальную часть изображения. Пожалуйста, предложите.

Спасибо за ваш ответ. Любой ответ мог бы начать меня.

4b9b3361

Ответ 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);
}

Надеюсь, это поможет кому-то.