我对android有一种奇怪的体验。我有ToolBar(在CollapsingToolbarLayout内)
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
这是菜单文件
<?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_share"
android:title="@string/share_action"
android:orderInCategory="100"
app:showAsAction="never"
android:icon="@android:drawable/ic_menu_share"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
<item android:id="@+id/action_browser"
android:title="View in browser"
app:showAsAction="never"/>
</menu>
这是Java代码
@Override
public boolean onOptionsItemSelected(MenuItem item){
Log.d(TAG,"menu clicked");
switch (item.getItemId()){
case R.id.action_share:
Log.d(TAG,"share action selected");
if(null != shareActionProvider){
Log.d(TAG,"shareActionProvider not null");
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, url));
shareActionProvider.setShareIntent(shareIntent);
}
break;
case R.id.action_browser:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}
return super.onOptionsItemSelected(item);
}
因此,R.id.action_share
未见或可点击。
当设置app:showAsAction="never"
时,共享项目可点击,但如果我app:showAsAction="always"
,则该项目无法点击。我有什么想法可以解决这个问题吗?
答案 0 :(得分:1)
工具栏有一个单独的菜单项单击侦听器,您可以使用
注册public void setOnMenuItemClickListener (Toolbar.OnMenuItemClickListener listener)
回调为您提供了一个MenuItem
对象,您可以使用该对象来检查单击了哪个项目。 Here您可以找到文档。
E.g。你打电话setSupportActionBar(tb);
,你不会需要tb.inflateMenu(R.menu.menu);
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar tb = (Toolbar) findViewById(R.id.my_awesome_toolbar);
//setSupportActionBar(tb);
tb.inflateMenu(R.menu.menu);
tb.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Log.i(getClass().getSimpleName(), " " + item.getItemId());
return false;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
}