2015-11-16 38 views

回答

6

在我的解決方案,每當有新通知到來時,計數器將增加(如在購物應用觀察)

試試這個,它適用於我的MOTO e2。

確保您API等級> 14

創建這樣一個佈局:

</RelativeLayout> 
    <ImageView 
     android:id="@+id/counterBackground" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/unread_background" /> 

    <TextView 
     android:id="@+id/count" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="1" 
     android:textSize="8sp" 
     android:layout_centerInParent="true" 
     android:textColor="#FFFFFF" /> 
</RelativeLayout> 

onCreateOptionMenu

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 

    MenuItem menuItem = menu.findItem(R.id.testAction); 
    menuItem.setIcon(buildCounterDrawable(count, R.drawable.ic_menu_gallery)); 

    return true; 
} 

現在,構建方法圖標:

private Drawable buildCounterDrawable(int count, int backgroundImageId) { 
    LayoutInflater inflater = LayoutInflater.from(this); 
    View view = inflater.inflate(R.layout.counter_menuitem_layout, null); 
    view.setBackgroundResource(backgroundImageId); 

    if (count == 0) { 
     View counterTextPanel = view.findViewById(R.id.counterValuePanel); 
     counterTextPanel.setVisibility(View.GONE); 
    } else { 
     TextView textView = (TextView) view.findViewById(R.id.count); 
     textView.setText("" + count); 
    } 

    view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
      View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
    view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); 

    view.setDrawingCacheEnabled(true); 
    view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); 
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache()); 
    view.setDrawingCacheEnabled(false); 

    return new BitmapDrawable(getResources(), bitmap); 
} 

你可以參照從here

2

你可以做我的菜單如下

定製項目 - main.xml中

<item 
    android:id="@+id/badge" 
    android:actionLayout="@layout/feed_update_count" 
    android:icon="@drawable/shape_notification" 
    android:showAsAction="always"> 
</item> 

自定義形狀繪製(背景方) - shape_notification.xml

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

我的視圖的佈局 - feed_update_count.xml

<?xml version="1.0" encoding="utf-8"?> 
<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/notif_count" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:minWidth="32dp" 
    android:minHeight="32dp" 
    android:background="@drawable/shape_notification" 
    android:text="0" 
    android:textSize="16sp" 
    android:textColor="@android:color/white" 
    android:gravity="center" 
    android:padding="2dp" 
    android:singleLine="true">  
</Button> 

MainActivity - 設置和更新我的觀點

static Button notifCount; 
static int mNotifCount = 0;  

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getSupportMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 

    View count = menu.findItem(R.id.badge).getActionView(); 
    notifCount = (Button) count.findViewById(R.id.notif_count); 
    notifCount.setText(String.valueOf(mNotifCount)); 
    return super.onCreateOptionsMenu(menu); 
} 

private void setNotifCount(int count){ 
    mNotifCount = count; 
    invalidateOptionsMenu(); 
} 
+1

它給錯誤在這條線: - notifCount =(按鈕)count.findViewById(R.id.notif_count); –

+1

什麼是錯誤 – shreyas

+0

空指針異常 –

1

只要改變 android:actionLayout="@layout/feed_update_count"app:actionLayout="@layout/feed_update_count"。 它會工作

0

而不是創建形狀和drawable,您可以使用徽章樣式TextView本身。按照您的主題使用自定義浮動按鈕樣式。

例 -

 <TextView 
       android:id="@+id/fabCounter" 
       style="@style/Widget.Design.FloatingActionButton" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignParentEnd="true" 
       android:layout_centerVertical="true" 
       android:layout_marginEnd="10dp" 
       android:padding="5dp" 
       android:text="-9" 
       android:textColor="@android:color/black" 
       android:textSize="14sp" /> 

Result

相關問題