Android 如何获取ActionBar图标上的文本?
我想要这样的东西:Android 如何获取ActionBar图标上的文本?,android,android-actionbar,actionbarsherlock,Android,Android Actionbar,Actionbarsherlock,我想要这样的东西: <!-- Menu Item Image --> <ImageView android:layout_width="30dp" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> <!-- Badge Count --> <TextView a
<!-- 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 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>
第三个图标用于通知,现在它只是一个png图像。是否可以做些什么,以便我可以通过编程更改文本/编号,即…,03,以显示实际通知数量
<!-- 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>
谢谢一个选项是为此创建自己的操作视图。在XML中使用
android:actionLayout
,在Java中充气后使用getActionView()
对其进行操作。您的操作视图将是一个图像视图
(用于图标)和。。。给徽章的东西。我怀疑您会发现,试图通过文本制作徽章会很困难,而且您可以更好地使用一组徽章图像,其中一个图像位于图标的顶部(例如,通过RelativeLayout
或FrameLayout
,或者通过将图标包装在LayerListDrawable
)
<!-- 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>
另一种选择是简单地将N个版本的图标+徽章包装在运行时选择的
LevelListDrawable
中。在这里,您可以将自定义操作栏与默认操作栏一起使用。。。
<!-- 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>
首先使用xml或java编写布局,然后使用显示矩阵和窗口管理器,然后对布局进行充气。像这样
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
ActionBar ab = getSupportActionBar();
View mactionbar = getLayoutInflater().inflate(R.layout.main2, null);
<!-- 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 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>
1:为您的徽章菜单项创建布局
<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>
<!-- 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>
注意:如果以后要更改徽章计数,可以存储对传递给OnCreateOptions菜单的菜单对象的引用,并使用相同的代码获取所需的视图并设置值
<!-- 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>
==ApCompat警告==================================================
<!-- 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>
如果使用AppCompatActivity,则必须在onCreateOptions菜单中设置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);
<!-- 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>
不得不对domji84的答案做一些修改。出于某种原因,单击imageview并没有调用click事件,它在从图像视图中删除clicklabe=“true”后工作
<!-- 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>
菜单项购物车.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>
看起来像是一张图片,但会等待确认答案,但actionLayout会显示我单击菜单项后看到的内容。如何将其作为初始图标?现在的默认值是它给出一个文本NOTIFICATIONS@Archie.bpgc:“但actionLayout i单击菜单项后看到的内容”--不,立即使用
actionLayout
,而不是“初始图标”。但它最初显示菜单项的标题,单击后仅显示我设置的actionLayout:(@Archie.bpgc:如果您做得对,则不会。请参见您提供的代码。为什么将图标和actionLayout都设置为“添加”菜单项。actionLayout不应该是图标吗?谢谢您的操作正常,但问题是通知菜单变得不可点击……我可能错在哪里?您可以在通过的活动中覆盖onCreateOptions您可以创建一个菜单对象,然后调用Menu.getItem(i).getActionView().setOnClickListener,其中i是可见菜单项的索引,然后在OnClickListener中检查v.getId()==R.id.badge(这是菜单项的id,而不是任何视图)…我通过使用id为imagebuttonid的ImageButton更改actionbar_badge_布局中的ImageView,然后将onclick侦听器添加到该按钮:MenuItemCompat.getActionView(menu.findItem(R.id.actionbar_badge_布局)).findViewById(R.id.imagebuttonid).setOnClickListener(新OnClickListener(){@Override public void onclick(视图v){System.out.println(“clicked”);}});嘿,我使用了你的技术,它工作了,但我也想要多个动作图标,但其中一个是带徽章的1。.这里的问题是其他图标没有显示。.你必须重定向点击事件://手动处理点击项目。getActionView().setOnClickListener(new View.OnClickListener(){@Override public void onClick(视图视图){onoptionItemSelected(item);}}});menu.findItem(R.id.action_cart)在此处返回null应用程序崩溃。