回答

2

讓我們開始與箱形框架:

/res/drawable/count_frame.xml

<?xml version="1.0" encoding="utf-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
     android:inset="2dp"> 
    <shape 
     android:shape="rectangle"> 

     <corners android:radius="2dp"/> 
     <solid android:color="@android:color/transparent"/> 
     <stroke 
      android:width="2dp" 
      android:color="#FF404040"/> 
    </shape> 

</inset> 

count_frame盒是要去一個TextView各地:

/res/layout/menu_action_count_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView android:id="@+id/text" 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="24dp" 
      android:layout_height="24dp" 
      android:layout_margin="12dp" 
      android:background="@drawable/count_frame" 
      android:gravity="center" 
      android:textColor="#FF000000" 
      android:textSize="13sp" 
      android:textStyle="bold" 
      tools:text="4"/> 

TextView將成爲您的菜單項的動作視圖。 (使用app:命名空間,因爲我假設你正在使用AppCompatActivity):

/res/menu/menu_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item 
     android:id="@+id/action_result_view" 
     android:title="@string/count" 
     app:actionLayout="@layout/menu_action_count_view" 
     app:showAsAction="always"/> 

</menu> 

現在,在您onCreateOptionsMenu覆蓋,你的動作視圖和設置。讓我們假設你的計數是private int mCount;

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    TextView count = (TextView) menu.findItem(R.id.action_result_view).getActionView(); 
    count.setText(Integer.toString(mCount)); // so the int isn't mistaken for a resource id! 
    count.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // do your action here 
     } 
    }); 
    return true; 
} 

當計數的變化,叫supportInvalidateOptionsMenu()

如果你想顯示在這個鑲上的TextView的自來水溢出菜單,在onCreateOptionsMenu

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     final Menu m = menu; 
     final MenuItem item = menu.findItem((R.id.action_result_view)); 
     TextView count = (TextView) menu.findItem(R.id.action_result_view).getActionView(); 
     count.setText(Integer.toString(mCount)); // so the int isn't mistaken for a resource id! 
     count.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       m.performIdentifierAction(item.getItemId(), 0); 
      } 
     }); 
     return true; 
    } 
+0

變化工作使用下面的代碼。但我面臨着一個問題。該菜單項不再可點擊。另外我沒有使用AppCompatActivity。 –

+0

我打算在點擊這個有邊框的文本視圖時顯示一個溢出菜單。 –

+0

我可以解決這個問題,我已經更新了您的解決方案。非常感謝。 –

相關問題