回答

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

我可以解决这个问题,我已经更新了您的解决方案。非常感谢。 –

相关问题