android 4.0,动作栏上的文字永远不会显示

Bri*_*o84 59 android android-4.0-ice-cream-sandwich android-actionbar

我正在尝试使用谷歌的新api,特别是动作栏.

当构建设置为api 10时,如果我按下菜单按钮,我会看到漂亮的菜单选项,每个选项都带有图片和图标.当使用api 14时,无论我尝试什么,它总是将图标放在操作栏中,没有文字.我已经尝试了我能想到的一切.我给了它"with text"属性,将文本更改为单个字符(如果是房间问题),但没有.

我之前已经看过这个,甚至在android.developer的开发者指南中,但我似乎无法找到答案如何让它出现.

dgm*_*ltn 83

我怀疑Android开发人员有意识地决定永远不会在狭窄的操作栏上显示单个菜单项的文本和图标.但是如果你真的想这样做,你可以在menu.xml文件中使用 android:actionLayout.在Android的动作条的文件有一个稍微好一点的解释.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_foo"
          android:title="@string/menu_foo"
          android:icon="@drawable/ic_menu_foo"
          android:showAsAction="always"
          android:actionLayout="@layout/action_button_foo" />
</menu>
Run Code Online (Sandbox Code Playgroud)

然后创建你的action_button_foo.xml布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingTop="14dp"
    android:paddingBottom="14dp"
    android:gravity="center"
    android:text="@string/menu_foo"
    android:drawableLeft="@drawable/ic_menu_foo"
    android:background="@drawable/bg_btn_action_bar"
    android:clickable="true" />
Run Code Online (Sandbox Code Playgroud)

并使用选择器作为其背景bg_btn_action_bar.xml,因此当您点击它时它会改变颜色:

<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_pressed="true"
        android:drawable="@drawable/bg_action_bar_pressed" />
    <item
        android:drawable="@color/transparent" />
</selector>
Run Code Online (Sandbox Code Playgroud)

现在,您需要使自定义视图处理单击事件.在您的活动中,我喜欢这样做,以便我可以处理点击onOptionsItemSelected以及所有其他非自定义项目.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.my_menu, menu);

    final MenuItem item = menu.findItem(R.id.menu_foo);
    item.getActionView().setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            onOptionsItemSelected(item);
        }
    });

    return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)

  • 这种方法非常简单,但使样式恰到好处却很棘手.我找到了ABS中使用的样式属性,因此它与本机样式相同.我把它放在这个要点中以防其他任何人发现它有用:https://gist.github.com/marczych/6908324 (8认同)

Ste*_*dle 10

这与我在运行4.0.4的Nexus S上观察到的情况完全相同.我的应用程序使用一个操作栏,其中包含多个作为片段实现的选项卡 我的各种片段会调整操作栏上显示的菜单选项,同时显示其选项卡.

这似乎是ICS中的一个错误,因为它在我的Nexus S和仿真器(HVGA和WVGA800)中执行如下:

  1. 在纵向模式下,我的徽标/向上按钮显示在操作栏的顶行,选项卡显示在第二行,并且任何操作仅在顶行的右侧显示为图标(无文本).
  2. 但是,当我旋转到横向时,操作栏会折叠到一行,并且标签会作为我的向上按钮旁边的微调器(下拉列表)向上移动到顶部栏. 但值得注意的是,文本出现在我的动作图标旁边.

我注意到制表旋转器的其他一些故障让我相信ICS的这个小角落有点凌乱/错误.如果我告诉应用程序在窄显示屏上拆分操作栏(通过添加android:uiOptions="splitActionBarWhenNarrow"清单,ICS总是将这些项目推到底栏,即使顶部仍有足够的空间.即使有额外的栏,它仍然不显示文本,只显示图标.

在运行4.0.4的Xoom上,标签和操作项总是以您希望它们出现的方式显示,因为有足够的空间.

解决方法:如果您真的想要在纵向模式下操作栏上的文本,则需要放弃图标.从菜单项中删除图标,将出现文本.这不完全是我们所追求的.

我在此处发布了错误报告:https://code.google.com/p/android/issues/detail?id = 30180.


kna*_*aak 3

如果您希望选项菜单显示在 Honeycomb 的操作栏中,我这样做了:

在您的活动中,重写此函数:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.actionbar_universe, menu);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

其中 R.menu.actionbar_universe 定义菜单项,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/crossholdings" android:showAsAction="always|withText"
      android:title="Cross Holdings" android:icon="@drawable/actionbar_cross"/>
</menu>
Run Code Online (Sandbox Code Playgroud)

请注意 showAsAction="always|withText" 并指定 android:title。

如果您有该资源但无法正常工作,请在此处复制|粘贴您的菜单资源。

编辑:这回答了错误的问题,但它是原文。

我使用这段代码来设置操作栏的标题,并用我公司的徽标将其涂成红色。在3.0中运行良好。

public ActionBar setActionBarStyle(String title) {
    ActionBar actionBar = setActionBarStyle();
    actionBar.setTitle(title);
    return actionBar;
}

public ActionBar setActionBarStyle() {
    ActionBar actionBar = getActionBar();
    ShapeDrawable actionBackground = new ShapeDrawable();
    actionBackground.getPaint().setColor(Color.RED);
    actionBackground.setBounds(0, 0, 5, 5);
    actionBar.setBackgroundDrawable(actionBackground);
    actionBar.setDisplayUseLogoEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);

    return actionBar;
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但这不是设置了操作栏的主标题吗?我希望显示每个菜单项的文本。即...我有一个带有扳手图标的菜单项“首选项”,以及一个带有+号图标的菜单项“添加”。我希望每个项目都显示图标和文本。相反,我在操作栏的左下角(屏幕底部)看到了扳手的图片,在右下角看到了 + 号。无文字。如果我使用姜饼运行,然后按菜单按钮,我会看到两个带有文本和图标的选项弹出......就像它应该的那样。 (2认同)