Android : 把一个layout转化成一个Drawable的实例

最近有个需求需要把menu的icon和title同时显示出来(显示在一行上),但是在资源文件中定义menu 时使用android:showAsAction="ifRoom|withText" ,没有效果,于是就有了以下的解决方案。

实现思路:Layout -> View -> Bitmap -> Drawable

下面的实现是,把含有一张图片(ImageView)和一个字符串(TextView)的layout转化成一个Drawable资源,其他menu可以调用setIcon(Drawable)来使用这个合成的Drawable:

Layout file: test.xml  

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >    <!-- 水平显示-->

    <ImageView
        android:id="@+id/display"
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:src="@android:drawable/ic_menu_help" />

    <TextView
        android:id="@+id/textTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dip"
        android:layout_marginTop="20dip"
        android:textSize="25dip"
        android:text="@string/default_title"   
        android:textColor="@color/white" />   <!-- default_title 和white 需要分别在values/String.xml ,values/Color.xml中定义-->

</LinearLayout>

[Code]

    public Drawable LayoutToDrawable( int  layout_id ){         

        LayoutInflater inflator = getLayoutInflater();
        View viewHelp = inflator.inflate(/*R.layout.test */ layout_id, null);

        TextView textView = (TextView)findViewById(R.id.textTitle);
        int size = (int)textView.getText().length();
        Bitmap snapshot = convertViewToBitmap(viewHelp, size);
        Drawable drawable = (Drawable)new BitmapDrawable(snapshot);

        return drawable;

     }

public static Bitmap convertViewToBitmap(View view, int size) {
      view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
      MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
      int width = size*40;
      view.layout(0, 0, width, view.getMeasuredHeight());  //根据字符串的长度显示view的宽度
      view.buildDrawingCache();
      Bitmap bitmap = view.getDrawingCache();
      return bitmap;
}

如何使用

  Drawable mDrawable = LayoutToDrawable(R.layout.test);

  MenuItem testItem = menu.findItem(R.id.testItem);;  //这个放在main.xml里面,自己测试一下

  testItem.setIcon(mDrawable);  

[End]


[效果截图]


这是其中的一种解决方案,如何你有更好的解决方案,希望能和大家分享一下。

-Hope can help you-



  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值