OptionMenu简单使用
1.actviity里重写方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_item, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_1:
Log.d(TAG, "onOptionsItemSelected: " + item.getTitle());
break;
case R.id.menu_2:
Log.d(TAG, "onOptionsItemSelected: " + item.getTitle());
break;
case R.id.menu_3:
Log.d(TAG, "onOptionsItemSelected: " + item.getTitle());
break;
}
return super.onOptionsItemSelected(item);
}
2.添加menu.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">
<!--android:icon:这个属性是指定每个菜单项左边的图标的-->
<!--android:id:菜单项的唯一标识-->
<!--android:orderInCategory:菜单项的优先级,值越大优先级越低,只能设置大于正整数-->
<!--android:title:菜单描述,也就是菜单文字-->
<!--app:showAsAction:这个是控制菜单项的显示的
always:让所有菜单项都会显示在toolbar上
ifRoom:如果toolbar上还有空间的话就会显示优先级高的菜单项在toolbar上,剩下的才显示在弹出的列表中
never:永远不会显示在Toolbar上,只会在溢出列表中出现
withText:示意actionBar显示文本标题,但是如果图标有效,且受到actionBar空间限制,文本标题可能显示不全。
collapseActinView:折叠视图
-->
<item
android:id="@+id/menu_1"
android:icon="@drawable/home_highlight"
android:title="设置"
app:showAsAction="always" />
<item
android:id="@+id/menu_2"
android:title="搜索" />
<item
android:id="@+id/menu_3"
android:title="我的" />
</menu>
Toolbar
环境:android 模拟器5.0
1.布局
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
2.代码
mToolbar = (Toolbar) findViewById(R.id.toolbar);
// Logo
mToolbar.setLogo(R.drawable.home_highlight);
// 主标题
mToolbar.setTitle("Title");
// 副标题
mToolbar.setSubtitle("Sub Title");
//设置toolbar
setSupportActionBar(mToolbar);
//左边的小箭头(注意某些版本api需要在setSupportActionBar(toolbar)之后才有效果)
mToolbar.setNavigationIcon(R.drawable.home_unselected);
//菜单点击事件(注意需要在setSupportActionBar(toolbar)之后才有效果)
mToolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
Log.d(TAG, "onMenuItemClick: "+menuItem.getTitle());
return false;
}
});
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "setNavigationOnClickListener: ");
}
});
3.问题: 正常的设置完之后菜单item图标是不会显示的。解决如下:
@SuppressLint("RestrictedApi")
@Override
protected boolean onPrepareOptionsPanel(View view, Menu menu) {
try {
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch ( Exception e) {
e.printStackTrace();
}
return super.onPrepareOptionsPanel(view, menu);
}
4.菜单栏的主题样式
<!--自定义toolbar菜单样式-->
<style name="toolbarMenuStyle" parent="@style/Widget.AppCompat.PopupMenu.Overflow">
<!-- 是否覆盖锚点,默认为true,即盖住Toolbar -->
<item name="overlapAnchor">false</item>
<!-- 弹出层背景颜色 -->
<item name="android:popupBackground">@color/material_deep_teal_500</item>
<!-- 弹出层垂直方向上的偏移,负值会覆盖toolbar -->
<item name="android:dropDownVerticalOffset">5dp</item>
<!-- 弹出层水平方向上的偏移,即距离屏幕左边的距离,负值会导致右边出现空隙 -->
<item name="android:dropDownHorizontalOffset">-2dp</item>
<!--文字颜色-->
<item name="android:textColor">@color/toolbar_meun</item>
</style>
// 布局引入样式
<android.support.v7.widget.Toolbar
android:background="@color/material_deep_teal_500"
android:id= "@+id/toolbar"
android:layout_width="match_parent"
app:popupTheme="@style/toolbarMenuStyle"
android:layout_height="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>
5.兼容性
要注意的是要兼容5.0以下就使用V7包下的Toobar!
android:minHeight="?attr/actionBarSize":设置标题栏最小高度为ActionBar的高度。
android:background="?attr/colorPrimary":该主题下的主色。
网友评论