0

Я хочу иметь возможность изменять размер 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); 
      } 
     } 
    } 

ответ

0

Я нашел решение. По-видимому, не имеет значения, если вы установите 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> 

style.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 использовать? Атр/actionBarSize, так что если вы хотите использовать фиксированную панель инструментов набор также actionBarSize в вашей теме.