如何获取ActionBar图标上的文本?

我想要这样的东西:

在这里输入图像说明

第三个图标是通知,现在只是一个PNG图像。 是否有可能做一些事情,以便我可以改变文本/数字,即..,03以编程方式显示实际的通知数量。

谢谢

以下是一些适用于我的示例代码。

1:为您的徽章菜单项目创build一个布局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="48dp" android:layout_height="fill_parent" android:layout_gravity="right" > <!-- Menu Item Image --> <ImageView android:layout_width="48dp" android:layout_height="fill_parent" android:clickable="true" android:src="@drawable/bkg_actionbar_notify_off" /> <!-- Badge Count --> <TextView android:id="@+id/actionbar_notifcation_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:padding="@dimen/padding_small" android:text="99" android:textColor="@color/holo_orange_dark" /> </RelativeLayout> 

2:在res / menu中创build一个菜单项并将actionLayout设置为你的布局

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/badge" android:actionLayout="@layout/actionbar_badge_layout" android:icon="@drawable/icn_menu_posts" android:showAsAction="always"> </item> </menu> 

3:然后在onCreateOptionsMenu你的活动或片段,你可以做这样的事情…

 public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.badge, menu); RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView(); TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview); tv.setText("12"); } 

注意:如果您稍后要更改徽章数,则可以存储对传递给onCreateOptionsMenu的Menu对象的引用,并使用相同的代码获取所需的视图并设置一个值。

=== ApCompat警告============================================= =====

如果使用AppCompatActivity,则必须在onCreateOptionsMenu设置actionView

  @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_menu, menu); MenuItem item = menu.findItem(R.id.badge); MenuItemCompat.setActionView(item, R.layout.actionbar_badge_layout); RelativeLayout notifCount = (RelativeLayout) MenuItemCompat.getActionView(item); TextView tv = (TextView) notifCount.findViewById(R.id.actionbar_notifcation_textview); tv.setText("12"); return super.onCreateOptionsMenu(menu); 

一种select是为此创build您自己的操作视图。 在通货膨胀之后使用XML中的android:actionLayout和Java中的getActionView()来操纵它。 你的行动视图将是一个ImageView (图标)和…徽章的东西。 我怀疑你会发现试图通过文本制作徽章将是困难的,你最好用一堆徽章图像服务,其中之一,你在图标的顶部(例如,通过RelativeLayoutFrameLayout ,或通过将图标包装在LayerListDrawable )。

另一个select是简单地在运行时selectN个版本的图标+徽章(可能包含在LevelListDrawable

必须对domji84的答案做一些修改。 出于某种原因,点击imageview没有调用click事件,它在从图像视图中删除clicklabe =“true”之后起作用。

menu_item_cart.xml

  <!-- Menu Item Image --> <ImageView android:layout_width="30dp" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> <!-- Badge Count --> <TextView android:id="@+id/cartCountTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:padding="5dp" android:layout_marginTop="5dp" android:text="99" android:textColor="@android:color/white" android:textStyle="bold"/> </RelativeLayout> 

menu_main.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:orderInCategory="100" app:showAsAction="never" /> <item android:id="@+id/action_cart" android:title="test" app:actionLayout="@layout/menu_item_cart_count" app:showAsAction="always"> </item> </menu> 

活动代码

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); menu.findItem(R.id.action_cart).getActionView().setOnClickListener(this); return true; } 

在这里,你可以使用自定义操作栏与默认的操作栏…首先准备布局通过xml或java.然后使用显示matrics和获得窗口pipe理器。此后膨胀的布局。 喜欢这个

  DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); ActionBar ab = getSupportActionBar(); View mactionbar = getLayoutInflater().inflate(R.layout.main2, null);