ActionMode меньше, чем панель инструментов в альбомной ориентации

Я хочу иметь возможность изменять размер actionMode или, по крайней мере, иметь actionMode с таким же размером панели инструментов.

У меня есть панель инструментов с фиксированным размером в портретной и альбомной ориентации. Я использую 56dp (значение панели инструментов мобильного портрета) в качестве значения для обоих.

Моя панель инструментов в порядке. Проблема в том, что во время изменения ориентации мой actionMode получает значение по умолчанию от android ?attr/actionBarSize, поэтому в альбомной ориентации я получаю actionMode меньше, чем панель инструментов.

Нормальный код ActionMode

if (actionMode == null) {
    actionMode = ((AppCompatActivity)getActivity()).startSupportActionMode(actionModeCallback);
}

Я попытался в onConfigurationChanged изменить размер actionMode, но безуспешно. Это пример изменения размера панели инструментов. По-видимому, нет способа сделать то же самое для actionMode. Какие-либо предложения? Спасибо

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE || newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            Toolbar toolbar = ((MainActivity)getActivity()).getToolbar(); //my custom method to get the toolbar
            if (toolbar != null) {
                int toolbarHeight = (int)getResources().getDimension(R.dimen.toolbar_height);
                toolbar.setMinimumHeight(toolbarHeight);
                ViewGroup.LayoutParams lp = toolbar.getLayoutParams();
                lp.height = toolbarHeight;
                toolbar.setLayoutParams(lp);
            }
        }
    }

person br00    schedule 17.08.2016    source источник


Ответы (1)


Я нашел решение. По-видимому, не имеет значения, если вы установили layout_height панели инструментов в своем макете и размер actionMode в стиле, см. ниже.

макет с панелью инструментов с фиксированной высотой

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/toolbar_height"
            android:minHeight="@dimen/toolbar_height"
            app:popupTheme="@style/AppTheme.PopupOverlay"/>

    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

стиль.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/accent</item>
</style>
<style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="windowActionModeOverlay">true</item>
        <item name="actionModeBackground">@color/actionMode</item>
        <item name="actionModeStyle">@style/WindowActionMode</item>
        <item name="actionBarSize">@dimen/toolbar_height</item> // This fix the issue
    </style>
<style name="WindowActionMode">
    <item name="android:height">@dimen/toolbar_height</item>
    <item name="android:minHeight">@dimen/toolbar_height</item>
</style>

Вы также должны установить actionBarSize в стиле.

<item name="actionBarSize">@dimen/toolbar_height</item>

Я предполагаю, что actionMode использует ?attr/actionBarSize, поэтому, если вы хотите использовать фиксированную панель инструментов, установите также actionBarSize в своей теме.

person br00    schedule 18.08.2016