自定义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
- 自定义Toolbar高度
- Android官方Toolbar自定义高度最靠谱的解决办法
- 自定义toolbar
- 自定义toolbar
- 自定义ToolBar
- 自定义ToolBar
- 自定义ToolBar
- 自定义ToolBar
- 自定义Toolbar
- 自定义Toolbar
- 自定义toolbar
- 自定义toolbar
- 自定义toolbar
- 自定义ToolBar
- 自定义toolbar
- Android 修改 Toolbar 高度
- Adnroid Toolbar 自定义Toolbar布局
- jsf自定义toolbar组件
- python MySQLdb简单封装
- 利用管道进行进程的通信示例
- #ifdef 与或 条件
- Java对URL和URI的区分
- c++中强制类型转换操作符小结
- 自定义Toolbar高度
- URI和URL的区别
- 欢迎使用CSDN-markdown编辑器
- IPC和管道简介
- C++中虚函数工作原理和(虚)继承类的内存占用大小计算
- Java之开发基础笔记
- 浅谈JavaSE工厂模式重要性
- qwt中常用的接口函数
- 无法通过方法调用转换将实际参数android.app.FragmentManager转换为FragmentTransaction