【问题标题】:Toolbar/ActionBar menu items not clickable unless showAsAction is NeverToolbar/ActionBar 菜单项不可点击,除非 showAsAction 是 Never
【发布时间】:2015-10-21 20:10:42
【问题描述】:

我对 android 有一种奇怪的体验。我有工具栏(在 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"
,则它是不可点击的。有什么想法可以解决这个问题吗?

【问题讨论】:

  • 所以我尝试添加/删除category,但到目前为止没有任何效果。

标签: android android-layout android-actionbar toolbar menuitem


【解决方案1】:

工具栏有一个单独的菜单项点击监听器,您可以使用它注册

public void setOnMenuItemClickListener (Toolbar.OnMenuItemClickListener listener)

回调为您提供了一个MenuItem 对象,您可以使用它来检查单击了哪个项目。 Here你可以找到文档。

例如你打电话给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;
}

}

【讨论】:

  • 我是否仍然按正常方式膨胀菜单,或者是否有工具栏方式也可以这样做?我问是因为它仍然无法正常工作。
  • 我会试试inflateMenu
  • 如果我使用toolbar.inflateMenu,那么菜单根本不可见:无论我是在setSupportActionBar(toolbar)之前还是之后都这样做
  • 没关系。你删除 onCreateOptionsMenu 了吗?
  • 如果我删除它,那么菜单根本不可见,如果我离开它,那么不管我是否使用toolbar.inflateMenu它仍然可见。 但是在任何一种情况下,该项目仍然不可点击。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2013-01-21
相关资源
最近更新 更多