【问题标题】:How to get a label in the Android action bar如何在 Android 操作栏中获取标签
【发布时间】:2016-07-14 16:06:45
【问题描述】:

正如标题所示,我想在操作栏中添加一些文本。首先,这是我想象中的模型(在 Paint 中!):

我真的在为此苦苦挣扎。在我的活动中,我放了:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main_screen, menu);
  return true;
}

在菜单文件夹中我放了 main_screen.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

  <item android:id="@+id/user_level"
    android:title="Administrator"
    android:showAsAction="withText" />

</menu>

所以我有两个问题:

问题 1

为什么上面的解决方案至少没有显示文本Administrator

问题 2

一旦它显示文本,我如何让它看起来像一个标签(带有灰色背景和圆角等)?

感谢您的帮助。

【问题讨论】:

  • 在您的菜单项中尝试 android:showAsAction="always|withText"。并尝试添加 android:orderInCategory="50"。 50 只是一个随机数。
  • 你用的是Toolbar(新材料设计方式)还是ActionBar?
  • 对于 appcompat 活动 schemas.android.com/apk/res/android" xmlns:app="schemas.android.com/apk/res-auto" >
  • @comeback4你能提供代码作为答案,而不是 cmets 吗?
  • 对于一个工具栏的例子,你可以看到这篇关于居中文本的帖子。您可以轻松地将其更改为在右侧。 stackoverflow.com/questions/31640629/…

标签: android android-actionbar


【解决方案1】:

自定义菜单项是您第二个问题所需要的。

首先您需要为您的菜单项进行自定义布局。

cust_menu.xml

<TextView
    android:id="@+id/admin"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="5dp"
    android:text="Administrator"
    android:textColor="#fff"
    android:background="@drawable/my_shape";
    android:textStyle="bold" />

要制作圆形灰色方形背景,您需要制作自定义形状文件并将其设置为您的TextView 背景。

my_shape.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <corners android:radius="3dp" />

    <solid android:color="#e3e3e3" />

</shape>

现在你的菜单项会变成这样。

ma​​in.xml

<item
    android:id="@+id/admin"
    android:actionLayout="@layout/cust_menu"
    app:showAsAction="always">
</item>

在 java 类中只需这样做。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

如果有任何疑问,请告诉我。

欲了解更多信息,请访问this

编辑:

您可以通过这种方式访问​​您的TextView

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);

    View view = menu.findItem(R.id.admin).getActionView();
    TextView textView = (TextView) view.findViewById(R.id.textID);

    // do your stuff

    return super.onCreateOptionsMenu(menu);
}

编码愉快。

【讨论】:

  • 这很酷,谢谢。一个问题;如何将标签的右边距设置为几像素?目前它正好在屏幕的右边缘。
  • 这是您可以使用的自定义布局。将 marging 设置为 textview 或将该 textview 包裹在 linearlayout 或 relativelayout 中并为其提供填充。
  • 我尝试将 android:layout_marginRight="5dp" 添加到 textview 并没有任何区别?
  • 然后尝试第二种方法。将其包装在其中一个布局中,并将android:paddingRight 添加到其中。我相信它会起作用的。
  • 谢谢 - 成功了。最后一个问题,如何让标签的背景在用户点击时变为黑色?
【解决方案2】:

您可以尝试在菜单项中添加以下代码:

android:showAsAction="always|withText"
android:orderInCategory="50"

50 只是一个随机数。

您可以通过创建 ActionBar 主题样式来配置 ActionBar 样式和属性。
阅读更多: Custom ActionBar Styles

【讨论】:

    【解决方案3】:

    问题 1

    你必须使用应用命名空间。

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <item android:id="@+id/user_level"
      android:title="Administrator"
      app:showAsAction="withText" />
    </menu>
    

    问题 2

    您不能使用菜单来执行此操作。你可以做的是使用AppBarLayout

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    
            <android.support.v7.widget.Toolbar
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize">
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_vertical|end"
                    android:paddingEnd="15dp"
                    android:paddingLeft="15dp"
                    android:paddingRight="15dp"
                    android:paddingStart="15dp"/>
            </android.support.v7.widget.Toolbar>
        </android.support.design.widget.AppBarLayout>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <!--Your normal content-->
        </LinearLayout>
    </android.support.design.widget.CoordinatorLayout>
    

    【讨论】:

    • 你不能使用菜单...为什么不呢?这不是android:actionLayout 的用途吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多