无论如何设置" 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
>
答案 0 :(得分:0)
无法在xml中执行算术运算。
如果要通过xml提供值,则必须执行以下操作:
values/dimes.xml
中定义变量halfActionBar
并使其为28dp(原始为56dp)。values-land/dimes.xml
中定义变量halfActionBar
并使其为24dp(原始为48dp)。values-sw600dp-v13/dimes.xml
中定义变量halfActionBar
并使其为32dp(原始为64dp)。在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:不要忘记旋转设备时此属性值会发生变化,因此每次设备从纵向更改为横向时都应设置此自定义值,反之亦然。