如何增加应用程序工具栏中菜单项图标和标题之间的填充或边距?

Cha*_*ltz 13 android android-layout

我的操作栏中的项目出现问题: 在此输入图像描述

刷新图标太靠近标题"REFRESH".看起来很尴尬.

我知道有一种方法可以修复它来编辑图像以强制添加填充,或者将其包装在XML drawable中.

看起来我不应该在图像本身中添加空间来解决这个问题.我觉得应该有一种简单的方法来更改填充或边距属性来解决问题.我很惊讶他们在这里如此接近.

有任何想法吗?

Cha*_*ltz 19

我简直不敢相信我花了这么长时间来解决这个问题!

最终我发现使用Android设备监视器.我去了工具> Android> Android设备监视器.当它启动时,我在"设备"选项卡中单击了我的应用程序的包名称,然后单击了"UI Automator的转储视图层次结构"按钮(看起来像多个电话堆叠在一起)在顶部"设备"选项卡.这向我展示了当前屏幕的UI.然后我可以点击"刷新"按钮,发现它不是彼此相邻的两个视图 - 它是一个带有DrawableLeft的TextView.我知道,我知道,这是显而易见的,应该是我想到的第一件事.

我已经找到了ActionBarSherlock - 如何设置每个操作栏图标的填充?,但这对我不起作用.然而,这给了我一个我需要的例子 - 改变ActionButton风格.

现在我知道它是带有DrawableLeft的TextView,我知道我需要更改DrawablePadding.这是我需要对样式做出的改变.

要更改ActionButton主题,我需要将其添加到styles.xml:

<style name="ActionButton" parent="@android:style/Widget.ActionButton">
    <item name="android:drawablePadding">@dimen/action_button_padding</item>
</style>
Run Code Online (Sandbox Code Playgroud)

dimen.xml:

<dimen name="action_button_padding">4dp</dimen>
Run Code Online (Sandbox Code Playgroud)

然后调整style.xml的Theme部分:

<style name="Theme.MyTheme"
       parent="Theme.AppCompat.Light.NoActionBar">
    <!-- other styles -->
    <item name="android:actionButtonStyle">@style/ActionButton</item>
</style>
Run Code Online (Sandbox Code Playgroud)

它只是有效!无需设置自定义ActionProvider,编辑图像以在图像文件中添加间距,或者为每个按钮使用额外的XML文件.

  • 你可以增加物品之间的距离.但不能减少它.负-10dp或-30dp无效.难道你不知道如何减少它?谢谢你完成的工作!:) (2认同)

dip*_*ali 8

使用菜单项中设置的自定义布局,如:

<item
    android:id="@+id/common_submenu_sync_contact"
    android:title="Refresh"
    app:actionLayout="@layout/custom_menu_item" />
Run Code Online (Sandbox Code Playgroud)

创建布局文件并将此文件设置为app:actionLayout.

custom_menu_item.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/refresh"
    android:padding="10dp" />
Run Code Online (Sandbox Code Playgroud)

快乐的编码.


小智 7

您也可以只使用带有填充的 inset drawable。这也将防止您必须将样式应用于应用程序中的所有菜单按钮,或者如果您在应用程序的其他地方使用该菜单项图像,则不必担心奇怪的填充。

<inset
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:drawable="@drawable/your_drawable"
   android:insetTop="3dp"
   android:insetRight="3dp"
   android:insetBottom="3dp"
   android:insetLeft="3dp" />
Run Code Online (Sandbox Code Playgroud)


wiz*_*hen 6

修复@Chad Schultz 的答案,他的解决方案对我不起作用。但我改变了 ActionButton 的样式:

<style name="ActionButton" parent="@android:style/Widget.ActionButton">
    <item name="android:paddingStart">0dp</item>
    <item name="android:paddingEnd">0dp</item>
    <item name="android:minWidth">0dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)