android 4.0,操作栏上的文本永远不会显示
我正在尝试使用 google 的新 api,特别是操作栏。
当构建设置为 api 10 时,如果我按下菜单按钮,我会看到漂亮的菜单选项,每个选项都有图片和图标。使用 api 14 时,无论我尝试什么,它总是将图标放在操作栏中,没有任何文本。我已经尝试了我能想到的一切。我给了它“with text”属性,将文本更改为单个字符(以防房间问题),但什么也没有。
我以前见过这样做,甚至在 android.developer 的开发人员指南中,但我似乎找不到如何让它显示的答案。
I am trying to use the new api's from google, specifically the action bar.
When the build was set at api 10, if I pressed the menu button, I got nice looking menu options, each with a picture and icon. When using api 14, No matter what I try, it always puts the icon in the action bar with NO text. I have tried everything I can think of. I gave it the "with text" property, changed the text to a single character (in case it was a room issue), but nothing.
I have seen this done before, even in the developer guide at android.developer, but I can't seem to find an answer as to HOW to get it to show up.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
我怀疑 Android 开发人员有意识地决定永远不会在狭窄的操作栏上显示单个菜单项的文本和图标。但如果你真的想这样做,你可以使用 android:actionLayout 在你的 menu.xml 文件中。 Android ActionBar 文档 有更好的解释。
然后创建您的
action_button_foo.xml
布局:并为其背景使用选择器
bg_btn_action_bar.xml
,这样当您点击它时它就会改变颜色:现在您需要制作您的自定义视图处理点击事件。在您的 Activity 中,我喜欢这样做,这样我就可以处理
onOptionsItemSelected
中的点击以及所有其他非自定义项目。I suspect that it was a conscious decision by the Android developers to never display a single menu item's text and icon on a narrow action bar. But if you really want to do so, you can use android:actionLayout in your menu.xml file. The Android ActionBar documentation has a slightly better explanation.
Then create your
action_button_foo.xml
layout:and use a selector for its background
bg_btn_action_bar.xml
, so it changes color when you tap it:Now you'll need to make your custom view handle click events. In your Activity, I like to do this, so that I can handle the click in
onOptionsItemSelected
along with all my other, non-custom items.这绝对与我在运行 4.0.4 的 Nexus S 上观察到的情况相同。我的应用程序使用一个带有多个选项卡的操作栏,这些选项卡作为片段实现。我的各种片段对操作栏上显示的菜单选项进行调整,同时其选项卡可见。
这似乎是 ICS 中的一个错误,因为它在我的 Nexus S 和模拟器(HVGA 和 WVGA800)上的执行情况一致如下:
我注意到选项卡微调器的一些其他故障使我相信 ICS 的这个小角落有点混乱/有缺陷。如果我告诉应用程序在窄显示屏上拆分操作栏(通过在清单中添加
android:uiOptions="splitActionBarWhenNarrow"
),ICS 总是将这些项目推到底部栏,即使仍然有很多即使有额外的栏,它仍然不显示文本,只显示图标,在我运行 4.0.4 的 Xoom 上,选项卡和操作项始终按照您期望的方式显示,因为。 解决方法:如果您确实希望在纵向模式下在操作栏上显示文本,则
需要从菜单项中删除该图标,然后才会显示文本。不过,这并不是我们想要的。
我在这里发布了错误报告:https://code.google.com/p/android/issues/detail?id=30180。
This is definitely the same thing I've observed on my Nexus S running 4.0.4. My app uses an action bar with several tabs that are implemented as fragments. My various fragments make adjustments to the menu options displayed on the action bar while the their tab is visible.
This appears to be a bug in ICS, because it performs consistently as follows, both on my Nexus S and in the emulator (both HVGA and WVGA800):
I noticed some other glitches with the tab spinner that lead me to believe that this little corner of ICS is a bit messy/buggy. If I tell the application to split the action bar on narrow displays (by adding
android:uiOptions="splitActionBarWhenNarrow"
in the manifest, ICS always pushes those items to the bottom bar, even though there's still plenty of room at the top. And even with the extra bar, it still doesn't display the text, just the icon.On my Xoom running 4.0.4, tabs and action items always appear the way you'd expect them to appear because there's plenty of room.
Workaround: if you really want text on the action bar in portrait mode, you need to give up the icon. Remove the icon from your menu item and the text will appear. This isn't exactly what we're after though.
I've posted a bug report here: https://code.google.com/p/android/issues/detail?id=30180.
如果您希望选项菜单显示在带有 Honeycomb 的操作栏中,我这样做了:
在您的活动中,覆盖此函数:
其中 R.menu.actionbar_universe 定义您的菜单项,如下所示:
注意 showAsAction="always|withText"并指定 android:title。
如果您有该资源但无法正常工作,请在此处复制|粘贴您的菜单资源。
编辑:这回答了错误的问题,但它是原文。
我使用这段代码来设置操作栏的标题,并用我公司的徽标将其涂成红色。在3.0中运行良好。
If you want your Options Menu to show up in your action bar with Honeycomb, I did this:
In your activity, override this function:
where R.menu.actionbar_universe define your menu item like this:
Note the showAsAction="always|withText" and specify android:title.
If you have that and its not working please copy|paste your menu resource here.
EDIT: This answers the wrong question, but it is the original text.
I use this bit of code to set the title of the action bar, and paint it red with my companies logo. It works well in 3.0.
“withText”属性适用于大多数平板电脑,但在小型设备上获取图标和文本的一种简单方法是将图标旁边的文本添加为一个图像(PNG 文件)。
这样,文本和图标都将被视为一个图标,并且整个内容都会显示。
您可以通过使用 withText 属性来使用平板电脑的原始图标。
您必须在 res 目录中创建一个名为“menu-w600dp”的额外菜单文件夹。
此文件夹中的 optionmenu.xml 仅适用于大于 600dp 的屏幕宽度
(将毫无问题地显示图标和文本)。
The "withText" property works with most tablets, but an easy way to get icons and text on smaller devices is to add the text next to the icon as one image (PNG file).
That way, both the text and icon will be seen as one icon and the whole thing will display.
You can use the original icon for tablets by using the withText property.
You have to create an extra menu folder in the res directory titled "menu-w600dp".
The optionmenu.xml in this folder will only apply to screen widths bigger than 600dp
(the ones that will show the icons and text with no problems).
通过阅读 在 XML 中指定操作。
如果这些其他内容都不适合您,这个可能。
Fixed this issue by reading "If your app is using the Support Library" section under Specify the Actions in XML.
If none of these other things work for you, this may.
我尝试了很多选项,并想出了一个简单的“技巧”,没有任何奇怪的代码行,没有图像。第一个使用自定义 actionLayout 的解决方案根本不适合我,具有 API 级别 10 兼容性。
如果您想在小操作栏上显示文本和图标,则意味着您知道有空间,对吗?因此,您可以使用 2 个菜单项:
如果需要,请选择“ifRoom”文本操作,以便您确实需要空间,文字就会消失。虽然它会占用操作栏上更多的空间,但对我来说是一个很好的妥协。
我最终得到以下代码:(
编辑其中“pelmel”是您的应用程序名称END EDIT)
然后您的选择处理程序只需捕获两个ID:
I tried many options and I came up with a simple "trick" without any weird line of code, without images. And first solution with custom actionLayout simply did not work for me with API level 10 compatibility.
If you want to display text AND icon on a small action bar it means you know you have the space, right? So you can use 2 menu items:
And choose the text action to 'ifRoom' if needed so that if you do need space, the text will go away. It WILL take some more space on the action bar though but was a good compromise for me.
I end up with the following code:
(EDIT Where "pelmel" is your app name END EDIT)
And then your selection handler just has to catch both IDs :
这是另一个选项,大致基于 dgmltn。优点:
我假设您在此示例中使用 ActionBarSherlock。首先,创建您想要的视图布局。这个是基于 ActionBarSherlock 的。我所做的所有更改就是交换图像/视图,将共享边距/填充减少到 0,以便它们更接近,并解决所有 ABS 样式。
然后创建相应的
View
类。如果您担心使用内部的东西,您可能需要复制CapitalizingButton
。哦,我也从未修复过最小宽度的问题。但不认为这真的很重要。好的,现在您可以使用它了。在您想要有文本的菜单项中,您可以执行与 dgmltn 所说相同的操作:
最后,只需将此代码添加到您的活动/片段中:
就是这样!
Here's another option, based roughly on dgmltn's. The advantages:
I've assumed you're using ActionBarSherlock in this example. First, create the view layout you want. This one is based on ActionBarSherlock's. All I changed was swapping the image/view over, reducing the shared margin/padding to 0 so they are closer, and resolving all the ABS styles.
Then create the corresponding
View
class. You may want to copyCapitalizingButton
if you are worried about using internal things. Oh, also I never fixed the minimum width stuff. Don't think it really matters though.Ok now you're ready to use it. In your menu items that you want to have text, you do the same as what dgmltn said:
And finally, just add this code to your activity/fragment:
And that's it!