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文件.
使用菜单项中设置的自定义布局,如:
<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)
修复@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)