如何使用Appcompat v21显示ActionBar菜单项的通知计数

时间:2015-01-09 06:59:19

标签: android xml android-layout android-actionbar android-appcompat

实际上我正在开发一个Android应用程序,我想显示总数没有。使用最新的Appcompat V21,操作栏菜单项(如flipkart和所有其他应用程序已有)上的未读电子邮件。我尝试了一个我在这里找到的代码,但它不能与AppCompat V21一起使用。

如果可以,请帮助我!

在此处发布相同的代码:

=>布局/菜单/ menu_actionbar.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    ...
    <item android:id="@+id/menu_hotlist"
        android:actionLayout="@layout/action_bar_notifitcation_icon"
        android:showAsAction="always"enter code here
        android:icon="@drawable/ic_bell"
        android:title="@string/hotlist" />
    ...
</menu>

=&GT;布局/ action_bar_notifitcation_icon.xml

注意样式和android:可点击的属性。这些使布局成为按钮的大小,并在触摸时使背景变灰。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_gravity="center"
    android:clickable="true"
    style="@android:style/Widget.ActionButton">

    <ImageView
        android:id="@+id/hotlist_bell"
        android:src="@drawable/ic_bell"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_margin="0dp"
        android:contentDescription="bell"
        />

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/hotlist_hot"
        android:layout_width="wrap_content"
        android:minWidth="17sp"
        android:textSize="12sp"
        android:textColor="#ffffffff"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@null"
        android:layout_alignTop="@id/hotlist_bell"
        android:layout_alignRight="@id/hotlist_bell"
        android:layout_marginRight="0dp"
        android:layout_marginTop="3dp"
        android:paddingBottom="1dp"
        android:paddingRight="4dp"
        android:paddingLeft="4dp"
        android:background="@drawable/rounded_square"/>
</RelativeLayout>

=&GT;可绘制-xhdpi / ic_bell.png

64x64像素图像,四面有10像素宽的填充。您应该有8个像素宽的填充,但我发现大多数默认项目略小于此。当然,您希望针对不同的密度使用不同的尺寸。


=&GT;可拉伸/ rounded_square.xml

此处,#ff222222(颜色#222222,带alpha #ff(完全可见))是我的Action Bar的背景颜色。

**<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="2dp" />
    <solid android:color="#ffff0000" />
    <stroke android:color="#ff222222" android:width="2dp"/>
</shape>**

=&GT; COM / IPP / MyAppAndroid / MyActivity.java

 private int hot_number = 0;


    private TextView ui_hot = null;

    @Override public boolean onCreateOptionsMenu(final Menu menu) {
        MenuInflater menuInflater = getSupportMenuInflater();
        menuInflater.inflate(R.menu.menu_actionbar, menu);
        final View menu_hotlist = menu.findItem(R.id.menu_hotlist).getActionView();
        ui_hot = (TextView) menu_hotlist.findViewById(R.id.hotlist_hot);
        updateHotCount(hot_number);
        new MyMenuItemStuffListener(menu_hotlist, "Show hot message") {
            @Override
            public void onClick(View v) {
                onHotlistSelected();
            }
        };
        return super.onCreateOptionsMenu(menu);
    }

    // call the updating code on the main thread,
    // so we can call this asynchronously
    public void updateHotCount(final int new_hot_number) {
        hot_number = new_hot_number;
        if (ui_hot == null) return;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (new_hot_number == 0)
                    ui_hot.setVisibility(View.INVISIBLE);
                else {
                    ui_hot.setVisibility(View.VISIBLE);
                    ui_hot.setText(Integer.toString(new_hot_number));
                }
            }
        });
    }

    static abstract class MyMenuItemStuffListener implements View.OnClickListener, View.OnLongClickListener {
        private String hint;
        private View view;

        MyMenuItemStuffListener(View view, String hint) {
            this.view = view;
            this.hint = hint;
            view.setOnClickListener(this);
            view.setOnLongClickListener(this);
        }

        @Override abstract public void onClick(View v);

        @Override public boolean onLongClick(View v) {
            final int[] screenPos = new int[2];
            final Rect displayFrame = new Rect();
            view.getLocationOnScreen(screenPos);
            view.getWindowVisibleDisplayFrame(displayFrame);
            final Context context = view.getContext();
            final int width = view.getWidth();
            final int height = view.getHeight();
            final int midy = screenPos[1] + height / 2;
            final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
            Toast cheatSheet = Toast.makeText(context, hint, Toast.LENGTH_SHORT);
            if (midy < displayFrame.height()) {
                cheatSheet.setGravity(Gravity.TOP | Gravity.RIGHT,
                        screenWidth - screenPos[0] - width / 2, height);
            } else {
                cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height);
            }
            cheatSheet.show();
            return true;
        }
    }

注意:由于缺乏声誉,无法发布图片。

0 个答案:

没有答案