在xml中将工具栏的高度设置为attr / actionBarSize的一半

时间:2017-08-04 07:09:11

标签: android android-layout android-view android-resources android-styles

无论如何设置" android.support.v7.widget.Toolbar"的高度?预定义attr的一半像"?android:attr / actionBarSize"在布局xml文件? 事实上,我希望工具栏的高度类似于:

<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height=("?android:attr/actionBarSize")/2
    >

2 个答案:

答案 0 :(得分:0)

无法在xml中执行算术运算。

如果要通过xml提供值,则必须执行以下操作:

  1. values/dimes.xml中定义变量halfActionBar并使其为28dp(原始为56dp)。
  2. values-land/dimes.xml中定义变量halfActionBar并使其为24dp(原始为48dp)。
  3. values-sw600dp-v13/dimes.xml中定义变量halfActionBar并使其为32dp(原始为64dp)。
  4. styles.xml主题中。

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:actionBarSize">@dimen/halfActionBar</item>
        ...
    </style>
    

    然后在你的布局中:

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"/>
    

    请注意,这是一个糟糕的解决方案,因为它取决于平台实现。我从java / kotlin代码(而不是xml)建议get actionBarSize

答案 1 :(得分:0)

你不能用XML来做,但是如果你想以编程方式去做,你可以试试这样的事情,我从here

那里得到了这个想法。
//themedContext is an Activity or a Context which has a Theme attached,
//you can't use Application context for this
final TypedArray array = themedContext.getTheme().obtainStyledAttributes(
                new int[] { android.R.attr.actionBarSize });
int actionBarSize = (int) array.getDimensionPixelSize(0, -1);
array.recycle();

然后将其应用于工具栏,您可以执行以下操作:

Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);

RelativeLayout.LayoutParams layoutParams = 
                 (RelativeLayout.LayoutParams) myToolbar.getLayoutParams();
//half the height of toolbar prior to set its value
layoutParams.height = (int)(actionBarSize / 2);
myToolbar.setLayoutParams(layoutParams);

setSupportActionBar(myToolbar);

PS:不要忘记旋转设备时此属性值会发生变化,因此每次设备从纵向更改为横向时都应设置此自定义值,反之亦然。