ActionBar非常奇怪地调整大小

时间:2015-03-14 11:39:32

标签: android android-layout android-actionbar

我试图调整我的ActionBar的大小,即使有很多关于这个的帖子似乎也没有人适合我。我想知道它是否与我刚刚升级到API 21的事实有关。这里是我的styles.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="colorPrimary">@color/Black</item>

    <!--   darker variant for the status bar and contextual app bars -->
    <item name="colorPrimaryDark">@color/Black</item>

    <!--   theme UI controls like checkboxes and text fields -->
    <!--   native widgets will now be "tinted" with accent color -->
    <item name="colorAccent">@color/Moccasin</item>

    <!--Action bar style-->
    <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item>
    <item name="actionBarStyle">@style/AppTheme.ActionBar</item>

</style>

<style name="AppTheme.ActionBar" parent="Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/AppTheme.ActionBar.TitleText</item>
    <item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleText</item>
    <item name="actionBarSize">40dp</item>
    <item name="android:actionBarSize">40dp</item>
    <item name="android:height">40dp</item>
</style>

<style name="AppTheme.ActionBar.TitleText" parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textSize">16sp</item>
    <item name="android:textColor">@color/DarkGreen</item>
</style>

我希望ActionBar更小,但其尺寸没有任何变化,例如文本大小和颜色按预期正确设置。有什么想法吗?

编辑:所以我通过添加

部分解决了这个问题
<item name="height">40dp</item>

正如一些帖子中所建议的那样,但现在我得到这样的结果:enter image description here 好像它被切割成所需的大小,同时仍然被格式化为原始的大小。我怎么解决这个问题?我尝试使用附加属性android:actionBarSize,但没有成功。如果我将大小更改为80dp,问题仍然存在,我得到这个: enter image description here

如何根据ActionBar尺寸调整抽屉图标和问号图标的大小和重新定位?

1 个答案:

答案 0 :(得分:0)

  

调整ActionBar的大小

actionBarSize 是android:Theme中的一个attr,但实际用于控制actionbar的 height 的是attr of height。您可以在framewoks的themes.xml和styles.xml中查看它。

     <!-- the following code is taken from  API 21 frameworks. -->

 <!-- themes.xml -->
 <style name="Theme">
    ...
    <item name="actionBarStyle">@style/Widget.ActionBar</item>
    ...
 </style>

 <!-- styles.xml -->
 <style name="Widget.ActionBar">
     <item name="background">@drawable/action_bar_background</item>
     <item name="displayOptions">useLogo|showHome|showTitle</item>
     <item name="divider">@drawable/action_bar_divider</item>

     <!-- actionBarSize is just an attr in frameworks for supportting the default height of 
 actionbar
     <item name="height">?attr/actionBarSize</item>

     <item name="paddingStart">0dip</item>
     <item name="paddingTop">0dip</item>
     <item name="paddingEnd">0dip</item>
     <item name="paddingBottom">0dip</item>
     <item name="titleTextStyle">@style/TextAppearance.Widget.ActionBar.Title</item>
     <item name="subtitleTextStyle">@style/TextAppearance.Widget.ActionBar.Subtitle</item>
     <item name="progressBarStyle">@style/Widget.ProgressBar.Horizontal</item>
     <item name="indeterminateProgressStyle">@style/Widget.ProgressBar.Small</item>
     <item name="homeLayout">@layout/action_bar_home</item>
 </style>

因此,有两种方法可以通过样式attr调整操作栏高度:

  • <item name="android:actionBarStyle">@style/xxx</item>
  • 之前使用actionBarSize attr
  • 使用由actionBarStyle attr引用的高度attr 样式,如果存在,将覆盖上述actionBarSize attr
  

如何根据ActionBar尺寸调整抽屉图标和问号图标的大小和重新定位?

据我所知,没有官方方法可以调整ActionBar上“items”的垂直布局参数,默认的垂直布局参数是action-title的“align center”和抽屉的“align top”其他动作按钮,就你提到的尺寸而言,它们是固定的并符合“设计规格”。如果由于某种原因想要更改这些布局参数,请将以下代码段作为参考:

    ViewGroup actionbarView = (ViewGroup) findViewById(R.id.action_bar);
    for (int i = 0; i < actionbarView.getChildCount(); i++) {
        // make toggle drawable center-vertical, you can change whatever layoutparameters as you wish
        if (actionbarView.getChildAt(i) instanceof ImageButton) {
            Toolbar.LayoutParams lp = (Toolbar.LayoutParams) actionbarView.getChildAt(i)
                    .getLayoutParams();
            lp.height = 300;
            lp.gravity = Gravity.CENTER_VERTICAL;
        }

        // make action button center-vertical
        if (actionbarView.getChildAt(i) instanceof LinearLayout) {
            Toolbar.LayoutParams lp = (Toolbar.LayoutParams) actionbarView.getChildAt(i)
                    .getLayoutParams();
            lp.height = 200;
            lp.gravity = Gravity.CENTER_VERTICAL;
        }
    }

因此,您可以看到它只是设置视图布局参数的常用方法,但您必须先检查ActionBar的视图结构,因为它可能会有所不同取决于您设置ActionBar的方法,例如扩展ActionBarActivityor或仅在目标android3.0及更高版本时扩展活动。