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

时间:2016-10-04 03:54:25

标签: android android-layout

我的操作栏中的项目出现问题: enter image description here

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

我知道有一种方法可以解决这个问题,即编辑图像以强制为其添加填充,或者将其包装在可绘制的XML中。

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

有什么想法吗?

4 个答案:

答案 0 :(得分:19)

我无法相信我花了这么长时间来解决这个问题!

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

我已经找到了ActionBarSherlock - How to set the padding of each actionbar's icon?,但这对我不起作用。然而,这给了我一个我需要的例子 - 改变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>

dimen.xml:

<dimen name="action_button_padding">4dp</dimen>

然后调整style.xml的主题部分:

<style name="Theme.MyTheme"
       parent="Theme.AppCompat.Light.NoActionBar">
    <!-- other styles -->
    <item name="android:actionButtonStyle">@style/ActionButton</item>
</style>

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

答案 1 :(得分:7)

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

var player1name = "John"

func userLongPressed(_ sender: Any) {
    print("user long pressed")
    p1s1PlayerName.becomeFirstResponder()
}

@IBOutlet var p1s1PlayerName: UIButton!

@IBAction func p1s1LongPressPlayerName(_ sender: AnyObject) {
        // This is where I don't know what to put to call to the function and have the keyboard pop up
}

创建布局文件并将此文件设置为<item android:id="@+id/common_submenu_sync_contact" android:title="Refresh" app:actionLayout="@layout/custom_menu_item" />

<强> custom_menu_item.xml

app:actionLayout

快乐的编码。

答案 2 :(得分:2)

修复@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>

答案 3 :(得分:2)

你也可以使用插入绘制的填充绘图。如果您在应用程序中的其他位置使用该菜单项图像,这也可以防止您必须将样式应用于应用程序中的所有菜单按钮或担心奇怪的填充。

<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" />