修改ActionBar上各个元素的间距问题
来源:互联网 发布:武汉矩阵互动怎么样 编辑:程序博客网 时间:2024/06/05 09:06
终于弄清楚了ActionBar上的各种间距值怎么调整,分享一下。
先简单介绍一下ActionBar的构成,如下图所示,(懒得自己画了,借用网上找的一张)
下边是一个简单的ActionBar的应用,借用这个图介绍一下各个值如何调整
ActionBar的大部分值都是定义在theme.xml和style.xml中的,也有部分是直接写在layout中。并且很多时候导航栏是通过ToolBar实现的,所以ToolBar的一些值也有可能会用到。在原生代码中,ActionBar和ToolBar的Style如下,基本上大部分的值都是在自己的应用的style.xml中重写这些原生定义的值,达到我们自己想要的效果。我以下的配置全部参考的Material的theme,其他theme的某些值可能会跟这个有些出入。
<style name="Widget.Material.ActionBar"> <item name="background">@null</item> <item name="backgroundStacked">@null</item> <item name="backgroundSplit">@null</item> <item name="displayOptions">showTitle</item> <item name="divider">?attr/dividerVertical</item> <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.Material.Widget.ActionBar.Title</item> <item name="subtitleTextStyle">@style/TextAppearance.Material.Widget.ActionBar.Subtitle</item> <item name="progressBarStyle">?attr/progressBarStyleHorizontal</item> <item name="indeterminateProgressStyle">?attr/progressBarStyle</item> <item name="progressBarPadding">32dp</item> <item name="itemPadding">8dp</item> <item name="homeLayout">@layout/action_bar_home_material</item> <item name="gravity">center_vertical</item> <item name="contentInsetStart">@dimen/action_bar_content_inset_material</item> <item name="contentInsetStartWithNavigation">@dimen/action_bar_content_inset_with_nav</item> <item name="contentInsetEnd">@dimen/action_bar_content_inset_material</item> <item name="elevation">@dimen/action_bar_elevation_material</item> <item name="popupTheme">?attr/actionBarPopupTheme</item> </style>
<style name="Widget.Toolbar"> <item name="titleTextAppearance">@style/TextAppearance.Widget.Toolbar.Title</item> <item name="subtitleTextAppearance">@style/TextAppearance.Widget.Toolbar.Subtitle</item> <item name="minHeight">?attr/actionBarSize</item> <item name="titleMargin">4dp</item> <item name="maxButtonHeight">@dimen/action_bar_default_height_material</item> <item name="buttonGravity">top</item> <item name="navigationButtonStyle">@style/Widget.Toolbar.Button.Navigation</item> <item name="collapseIcon">?attr/homeAsUpIndicator</item> <item name="collapseContentDescription">@string/toolbar_collapse_description</item> <item name="contentInsetStart">16dp</item> <item name="contentInsetStartWithNavigation">@dimen/action_bar_content_inset_with_nav</item> <item name="touchscreenBlocksFocus">true</item> <item name="keyboardNavigationCluster">true</item> </style>
1,左侧只有标题文字时
使用方法:在AndroidMenifest.xml中,直接设置lable即可
<activity android:name=".ActionBarTest" android:label="@string/title_actionbartest" > </activity>距左侧边距的调整方法:
重写ActionBar的<item name="contentInsetStart">@dimen/action_bar_content_inset_material</item>这个值,原生ActionBar的contentInsetStart和contentInsetEnd均为16dp
2,返回箭头
使用方法:
final ActionBar bar = getActionBar(); bar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
很多人遇到的的一个问题是返回箭头与标题文字之间的距离太大,这个间距有两个值会影响到
一个是ActionBar的<item name="contentInsetStartWithNavigation">@dimen/action_bar_content_inset_with_nav</item>,这个值的意思是当导航栏上有navigation button的时候的start padding,原生默认值是72dp,所以距离会很大。
另一个是Toolbar的<item name="titleMargin">4dp</item>,这个值表示你的标题的上下左右的margin,原生是4dp,如果你只想调整某一个方向的margin比如距左的,你也可以直接重写<item name="titleMarginStart">0dp</item>,其他同理。
3,Action Menu
使用方法:
menu下actions.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_edit" android:icon="@drawable/ic_adit_nor_black" android:showAsAction="ifRoom" android:title="@string/action_bar_edit" /> <item android:id="@+id/action_edit" android:icon="@drawable/ic_adit_nor_black" android:showAsAction="ifRoom" android:title="@string/action_bar_edit" /> <item android:id="@+id/action_search" android:icon="@drawable/ic_search_nor_black" android:title="@string/action_bar_search" android:showAsAction="ifRoom" android:actionViewClass="android.widget.SearchView" /></menu>Activity中
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.actions, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Toast.makeText(this, "Selected Item: " + item.getItemId(), Toast.LENGTH_SHORT).show(); return true; }
ActionMenu这部分,值的定义也比较分散,原生代码中关于这部分的设置除去在actionBar中定义的,还涉及到ActionButton的设置,如下:
<style name="Widget.Material.ActionButton"> <item name="background">?attr/actionBarItemBackground</item> <item name="paddingStart">12dp</item> <item name="paddingEnd">12dp</item> <item name="minWidth">@dimen/action_button_min_width_material</item> <item name="minHeight">@dimen/action_button_min_height_material</item> <item name="gravity">center</item> <item name="scaleType">center</item> <item name="maxLines">2</item> </style> <style name="Widget.Material.ActionButton.Overflow"> <item name="src">@drawable/ic_menu_moreoverflow_material</item> <item name="background">?attr/actionBarItemBackground</item> <item name="contentDescription">@string/action_menu_overflow_description</item> <item name="tooltipText">@string/action_menu_overflow_description</item> <item name="minWidth">@dimen/action_button_min_width_overflow_material</item> <item name="minHeight">@dimen/action_button_min_height_material</item> <item name="paddingStart">@dimen/action_bar_overflow_padding_start_material</item> <item name="paddingEnd">@dimen/action_bar_overflow_padding_end_material</item> </style>
在一开始的图片中展示的那样,右侧三个图标按钮,前边两个属于item的范畴,后边三个点的按钮则是ActionButton的一种,为overflow,对于前边的item,原生中有固定的layout,并且已经设置好了paddingStart的paddingEnd均为8dp,这样的话再在style中设置padding也不能生效(或者是我还没有找对地方?),但是可以设置overflow的padding,原生的PaddingStart是6dp,paddingEnd是10dp。
当然ActionBar上还有很多元素,如TabBar,Spinner等,这些就不再一一介绍啦
- 修改ActionBar上各个元素的间距问题
- 关于内联元素间距问题的解决办法
- HTML元素间距问题
- 行内元素间距问题
- 如何解决inline-block元素的间距问题?
- 解决inline和inline-block元素的默认间距问题
- ActionBar 背景修改问题
- 去除元素间距的解决方法
- wap页适配解决页面的左、上间距问题
- android 解决自定义actionbar左右两边有间距问题记录
- 修改Actionbar的样式
- 修改actionBar的样式
- 修改actionbar的高度
- UITableViewStyleGrouped的间距问题
- 最大间距问题(元素分段/分桶法)
- 行内块元素之间默认间距问题
- ActionBar 不能显示logo 的问题 ,背景颜色的修改, 以及ActionBar 的官方guide
- ActionBar上的overflow menu显示位置的问题
- 对p标签嵌套块级元素的思考
- leetcode 229. Majority Element II 摩尔投票法 Moore Voting
- Mybatis逆向工程(填坑)
- 回车触发事件
- 开山篇
- 修改ActionBar上各个元素的间距问题
- Debugging Analysis of Kernel panics and Kernel oopses using System Map
- netstat 命令
- 过程模型介绍和对比(敏捷开发、瀑布式模型等)
- webBrowser默认浏览器打开网址
- optimized sequence: fMRI block design
- springmvc 注解
- Spring 传参注解的使用
- 在linux系统挂载FreeNAS的NFS服务,出现wrong fs type错误