【发布时间】:2023-03-07 07:33:01
【问题描述】:
我想减少添加到 ActionBar 的 Action Item 图标之间的间距。我们有办法做到这一点吗?
【问题讨论】:
-
最佳答案对我来说似乎相当不错 - 没有被接受有什么原因吗?
标签: android
我想减少添加到 ActionBar 的 Action Item 图标之间的间距。我们有办法做到这一点吗?
【问题讨论】:
标签: android
使用自定义的 android:actionButtonStyle。
<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
魔法就在这里:
<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
<item name="android:minWidth">0dip</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
通常 minWidth 设置为 56 dip。
【讨论】:
<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>放在哪里?
对于 SDK 版本 17+,您应该使用 paddingStart 和 paddingEnd 属性,如果您的 minSdkVersion
res/values/styles.xml:
<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
<item name="android:minWidth">0dip</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
res/values-v17/styles.xml:
<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
<item name="android:minWidth">0dip</item>
<item name="android:paddingStart">0dip</item>
<item name="android:paddingEnd">0dip</item>
</style>
【讨论】:
res/values/styles.xml 的<style name="AppTheme" parent="Theme.AppCompat.Light"> 元素中添加了一次<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>。然后在两个styles.xml 文件中添加<style name="ActionButtonStyle" ... 版本。 Android 将根据平台版本选择正确的 @style/ActionButtonStyle 定义。
<item name="actionButtonStyle">@style/ActionButtonStyle</item>(在默认styles.xml和<style name="ActionButtonStyle" parent="Widget.AppCompat.ActionButton">中styles.xml(默认和v17)。见this answer。
感谢 Shai 的提示,这对我来说效果很好(在 Android 4.0.x 设备上): (我的整个 style.xml)
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
</style>
<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
<item name="android:minWidth">0dip</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
【讨论】:
要使用 appCompat 支持旧版本,您只需要这个:
在您的应用程序的 appTheme 中:
<item name="actionButtonStyle">@style/ActionButtonStyle</item>
并创建一个样式 在 style.xml
<!--this will reduce space between actionBar Icons-->
<style name="ActionButtonStyle" parent="Widget.AppCompat.ActionButton">
<item name="android:minWidth">0dip</item>
<item name="android:maxWidth">50dip</item>
<item name="android:paddingLeft">0dip</item>
<item name="android:paddingRight">0dip</item>
</style>
就是这样。你已经完成了。
【讨论】:
paddingStart 和 paddingEnd 的 res/values-v17/styles.xml 版本,正如 pedroca's answer 建议的那样。
在appTheme添加
<item name="actionButtonStyle">@style/CustomActionButtonStyle</item>
然后在 style.xml 中创建这个样式
<style name="CustomActionButtonStyle" parent="Widget.AppCompat.ActionButton">
<item name="android:paddingStart">0dip</item>
<item name="android:paddingEnd">0dip</item>
</style>
【讨论】:
我认为您可能会发现,如果不变得非常 hackish 或者只是创建自己的自定义 ActionBar,这很难实现。 See here 似乎是一个非常相似的问题。我做了一些测试自己覆盖了 android:actionButtonStyle,虽然我能够覆盖某些东西(比如背景),但它拒绝遵守我指定的任何类型的填充属性。
【讨论】:
没有一个答案对我有用。所以我使用 layer-list 将图标包装在一个可绘制的 xml 中,并给它一个负的左边距,它对我有用。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="-20dp">
<bitmap
android:src="@drawable/actionbar_logo"
android:gravity="left" />
</item>
</layer-list>
【讨论】:
如果您正在创建自定义 ActionBar,您可以在元素之间添加自定义间距,如果您想将项目彼此靠近,您可以为属性使用负值。就像这个伪代码(在你的布局 xml 文件中):
<ImageView
android:layout_marginLeft="-2dp"
【讨论】: