您的位置:首页 > 其它

解决 Toolbar 的 Menu 图标无法显示的问题

2016-04-19 14:50 369 查看

是什么

给 Toolbar 设置 Menu 的按钮:

main_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>

<item
android:id="@+id/action_edit"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="80"
android:title="action_edit"
app:showAsAction="ifRoom"
/>

<item
android:id="@+id/action_share"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="90"
android:title="action_edit"
app:showAsAction="ifRoom"
/>

<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:title="action_settings"
app:showAsAction="never"
/>
</menu>


MainActivity.java

public class SecondActivity extends Activity {

Toolbar mToolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//        requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_second);
mToolbar = (Toolbar) findViewById(R.id.toolbar_second);

/* 设置 Toolbar 各种属性 */

// 设置 logo
mToolbar.setLogo(R.mipmap.ic_launcher);
// 设置 title(在 xml 中设置 title 属性后再调用此方法才生效)
mToolbar.setTitle("我是Title");
// 设置子标题
mToolbar.setSubtitle("SubTitle");

/* 设置完各种属性后,再替换 ActionBar,否则不生效 */

// 把 Toolbar 当做 ActionBar
// 可以像 ActionBar 一样,操作 Toolbar(自动将标题、Menu等放到 Toolbar 上)
setActionBar(mToolbar);

// 设置 NavigationIcon(设置 NavigationIcon 在 setActionBar 后)
mToolbar.setNavigationIcon(R.mipmap.abc_ic_ab_back_holo_dark);

// 设置 Toolbar 上的按钮点击事件
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
Toast.makeText(SecondActivity.this, "Settings", Toast.LENGTH_SHORT).show();

break;
}

return true;
}
});
}

/** 创建菜单 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main,menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}


结果一运行,发现右侧的 Menu 图标根本不显示:



为什么

<item
android:id="@+id/action_edit"
android:icon="@mipmap/ic_launcher"
android:orderInCategory="80"
android:title="action_edit"
app:showAsAction="ifRoom"
/>


这是我之前的 main_menu.xml 属性 showAsAction 用的是 Android Studio 默认的命名空间 app。然而,我的 Activity 用的是非兼容的。所以导致 showAsAction 无法被识别。

怎么做



给每个 item 加上 android:showAsAction 属性(别管 AS 的红色警告),同时保留 app:showAsAction。这样就能适用不同场景。



非常完美

附录

参考:http://www.2cto.com/kf/201506/409054.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: