菜单项操作视图向右对齐。

4

如标题所述,我正在一个MenuItem上设置setActionView,以下是布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:layout_width="32dp"
        android:layout_height="32dp"
        android:layout_margin="4dp"
        android:layout_centerInParent="true"/>

</RelativeLayout>

问题在于ProgressBar显示为右对齐。(应该与MenuItem图标一样居中对齐。图标大小为32dp
我该如何解决这个问题?
3个回答

3

今天我遇到了类似的问题,在SO上找不到好的解决方法。因此,我进行了一些研究。以下是我的发现:

Android菜单是这样实现的:

如果你已经填充了一个 actionView 有:

  • 图标(可选)
  • 标题(可选,或者说可以通过将其设置为""来使其变成可选项)
  • 自定义视图

并且您没有设置图标,将标题设置为""并将 actionView 设置为仅包含使用 setActionView 填充的自定义视图的 menuItem,则:

enter image description here

Android强制自定义视图的 宽度wrap_content,剩余区域被菜单项的图标和标题占据。

我们可以将这种实现视为:

enter image description here

enter image description here

将 margin 后的整个视图视为 ParentLinearLayout,该视图被分成 LinearLayout1LinearLayout2(在上面的图像中分别表示为 Layout 1 和 Layout 2)

现在,LinearLayout1width=0dpweight=1,而LinearLayout2width=wrap_content

因此,无论我们设置什么,目前,我们都不能将填充的自定义视图(action view)右对齐到菜单中。

严格来说,如果您确实需要这样做,可以通过查看 Android 中导航菜单的内部实现代码来右对齐。但不值得花费这种努力。任何功能都是时间和效果之间的权衡。


2
感谢您详细的解释,让我免去了为什么未正确对齐而感到沮丧的烦恼。 - Parker

0

你应该在 RelativeLayout 中尝试使用 android:gravity="center"


RelativeLayout是否添加到其他视图中。如果是为了测试目的,请给RelativeLayout添加一些颜色,并查看它在运行时在父视图中的间距如何。 - sabdroids
“ProgressBar”似乎在“RelativeLayout”的中心,但是“RelativeLayout”的宽度看起来不像其他操作图标。 - Christopher Francisco

0
尝试一下这个 android:layout_gravity="center"

应该将它应用到哪个标签? - ivan_pozdeev
只需将其放置在进度条中即可。 - Akash Goswami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接