Antwort

2

Beginnen wir mit dem Kastenrahmen beginnen:

/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> 

Das count_frame Box um einen TextView gehen wird:

/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"/> 

Diese TextView wird eine Aktionsansicht für Ihren Menüeintrag sein. (Mit Hilfe der app: Namespace, da ich Sie gehe davon verwenden 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> 

Jetzt in Ihrem onCreateOptionsMenu überschreiben, erhalten Sie die Aktion Blick und richtete ihn auf. Nehmen wir an, Ihre Zählung in private int mCount; ist

@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; 
} 

Wenn die Zählung ändert, supportInvalidateOptionsMenu() nennen.

Im Fall wollte man das Überlaufmenü auf dem Hahn dieses umrandeten Textview zeigen, verwenden Sie den folgenden Code in 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

Die Veränderungen arbeiten. Aber ich stehe vor einem Problem. Der Menüpunkt ist nicht mehr anklickbar. Außerdem verwende ich AppCompatActivity nicht. –

+0

Ich möchte ein Überlaufmenü anzeigen, wenn ich auf diese umrandete Textansicht tippe. –

+0

Ich könnte das Problem beheben und ich habe Ihre Lösung aktualisiert. Danke vielmals. –