菜单项item转ImageView

2018-07-26  本文已影响0人  lisx_

今天说一个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不一样,需要单独处理:

  1. 需要自定义params.
  2. 在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();
    }
上一篇下一篇

猜你喜欢

热点阅读