您的位置:首页 > 移动开发 > Android开发

binbinyang---Android的Menu同时显示Title的文字和图片,并且动态变化Title的坑(有二个解决办法,亲测)

2017-10-16 21:53 911 查看
让Menu同时显示图标和文字,并动态改变menu的title

今天在开发中,遇到了一个蛋疼的问题,

开始以为是自己代码有错,debug看了后发现不是地图获取当前定位的问题

接下来,老规矩直接上图




右上角是一个menu的title+icon ,但是写完只有 icon是出来了 可是title死活出不来

解决办法:

方法一:

在menu.xml文件中配置了图标和文字,但是在有图标的情况下文字是不会显示的,即使设置 app:showAsAction="always|withText" 但是我在运行的时候发现并没有显示文字,处理方法是通过另外一个属性实现app:actionLayout.

首先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/city"
android:title=""
android:orderInCategory="100"
app:showAsAction="always|withText"
app:actionLayout="@layout/layout_icon_city"
/>
</menu>


app:actionLayout指向了一个布局,可以在这个布局中定义你想要的控件。我的定义是这样的。

layout_icon_city

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_city_add_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:gravity="center"
android:text=" "
android:drawableRight="@mipmap/ic_select_city"
android:textColor="#000000"
android:clickable="true" />


android:drawableLeft中指定你的图标。

然后还要在onCreateOptionsMenu中重写一下Menu的点


@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_select_city, menu);
final MenuItem item = menu.findItem(R.id.city);
TextView mCityName = (TextView) item.getActionView().findViewById(R.id.tv_city_add_icon);
mCityName.setText(mCity);
item.getActionView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onOptionsItemSelected(item);
}
});

return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case R.id.city:
Actions.startSelectCityActivity(getActivity());
break;

}
return super.onOptionsItemSelected(item);
}


其中如果你先变化title的内容 

inflater.inflate(R.menu.menu_select_city, menu);
final MenuItem item = me:nu.findItem(R.id.city);
TextView mCityName = (TextView) item.getActionView().findViewById(R.id.tv_city_add_icon);
mCityName.setText(mCity);


方法二:
Activity中的menu条目,在设置其showAsAction="never"时,默认只显示文字title,而不会显示图标icon,可以在Activity中重写onMenuOpened(),通过反射使其图标可见。


// 让菜单同时显示图标和文字
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
try {
Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐