自定义Toolbar高度

来源:互联网 发布:文字扫描识别软件app 编辑:程序博客网 时间:2024/05/29 08:10

有时候实际使用场景Toolbar高度满足不了需求(比如平板),需要对Toolbar高度增加。 

效果如下图:

1,正常Toolbar高度(高度为actionbarSize)


2,自定义Toolbar高度



目前探索出来有两种方法:

1,使用主题样式

在styles文件添加如下:

<!-- Base application theme. --><style name="BaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">    <!-- Customize your theme here. -->    <item name="windowActionBar">false</item>    <item name="windowNoTitle">true</item>    <item name="colorPrimary">@color/colorPrimary</item>    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>    <item name="colorAccent">@color/colorAccent</item>    <item name="toolbarStyle">@style/CustomToolbarHeight</item></style><style name="AppTheme" parent="BaseTheme">    <item name="android:windowTranslucentStatus">true</item></style><style name="CustomToolbarHeight" parent="Widget.AppCompat.Toolbar">    <item name="android:padding">16dp</item></style><style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">    <item name="actionOverflowButtonStyle">@style/ActionButton.Overflow.More</item></style><!-- menu中三个点的样式 --><style name="ActionButton.Overflow.More" parent="Widget.AppCompat.ActionButton.Overflow">    <item name="android:src">@drawable/ic_more_vert</item></style>

比较简单,使用到toolbarStyle属性。

为了实现透明状态栏,除了在style文件里添加windowTranslucentStatus属性外,还需要在布局文件里的Toolbar添加fitsSystemWindows

但是此时fitsSystemWindows居然没作用了,和正常使用Toolbar时不添加fitsSystemWindows的效果一样!Toolbar部分位于状态栏下!

最后这样解决:

<?xml version="1.0" encoding="utf-8"?><LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.science.tablettoolbar.MainActivity">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@color/colorPrimary"        android:fitsSystemWindows="true"/>    <android.support.v7.widget.Toolbar        android:id="@+id/toolbar"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:background="@color/colorPrimary"        app:theme="@style/AppTheme.AppBarOverlay"/>    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Hello World!"/></LinearLayout>
注意在Toolbar前面添加一个LinearLayout,高度为wrap_Content,增加属性fitsSystemWindows,这时,就会空出高度为状态栏高度的区域。

OK,实际上就是自定义Toolbar的范畴了。


2,使用反射,得到Toolbar的”mNavButtonView“成员变量,重新设置其属性

public void reSetToolbarHeight(Toolbar toolbar) {    try {        Field f = Toolbar.class.getDeclaredField("mNavButtonView");        f.setAccessible(true);        ImageButton mNavButtonView = (ImageButton) f.get(toolbar);        if (mNavButtonView != null) {            Toolbar.LayoutParams l = (Toolbar.LayoutParams) mNavButtonView.getLayoutParams();            l.gravity = Gravity.CENTER_VERTICAL;            l.height += 100;            l.width += 100;            mNavButtonView.setLayoutParams(l);        }    } catch (NoSuchFieldException e) {        e.printStackTrace();    } catch (IllegalAccessException e) {        e.printStackTrace();    }}
当然,反射的缺点挺明显,建议使用主题样式自定义的方式实现,这样可以实现更多自定义。

参考文章https://github.com/lurbas/ResponsiveToolbar


0 0
原创粉丝点击