今天说一个menu菜单项item转其他view的问题, 之前只转过SearchView,今天试了下别的view也是可以的.
话不多说,见如下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">
<item
android:id="@+id/item1"
android:title="@string/x"
app:actionViewClass="android.widget.ImageView"
app:showAsAction="always" />
</menu>
我们的目的就是要将这个item1转换为ImageView使用.所以添加了actionViewClass属性.在activity中,通过创建menu菜单获取到itme,然后转为ImageView.
由于类型发生了变化, 该image和其他的item不一样,需要单独处理:
- 需要自定义params.
- 在onOptionsItemSelected中也是检测不到它的点击的,需要自己添加点击事件.
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_month_fragment, menu);
MenuItem menuItem = menu.findItem(R.id.itme1);
ImageView image = (ImageView) menuItem.getActionView();
// 需要自定义image属性
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
dpToPx(24), dpToPx(24));
params.bottomMargin = dpToPx(10);
image.setLayoutParams(params);
// 添加点击事件
image.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
...
}
});
// 加载图片
Glide.with(getContext()).load(url).into(image);
}
public static int dpToPx(float dpVal) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, getDisplayMetrics());
}
public static DisplayMetrics getDisplayMetrics() {
return mContext.getResources().getDisplayMetrics();
}
网友评论