最近有个需求需要把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-