Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何获取ActionBar图标上的文本?_Android_Android Actionbar_Actionbarsherlock - Fatal编程技术网

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应用程序崩溃。