android自带的ImageView控件是不能添加文字的,如果出现大量ImageView和TextView同时出现的布局,可以组合定义一个控件,将ImageView和TextView组合成一个控件
如下图所示:
public class ImageButtonWithText extends LinearLayout {布局文件中这么使用:
public ImageView imageView;
public TextView textView;
public ImageButtonWithText(Context context,AttributeSet attrs) {
super(context,attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ImageButtonWithText);
/*
* 在attrs.xml添加属性:
* <declare-styleable name="ImageButtonWithText">
<attr name="picture" format="reference"/>
</declare-styleable>
* */
int picture_id = a.getResourceId(R.styleable.ImageButtonWithText_picture,-1);
/**
* Recycle the TypedArray, to be re-used by a later caller. After calling
* this function you must not ever touch the typed array again.
*/
a.recycle();
imageView = new ImageView(context, attrs);
imageView.setPadding(10, 10, 10, 10);
/**
* Sets a drawable as the content of this ImageView.
* This does Bitmap reading and decoding on the UI
* thread, which can cause a latency hiccup. If that's a concern,
* consider using setImageDrawable(android.graphics.drawable.Drawable) or
* setImageBitmap(android.graphics.Bitmap) instead.
* 直接在UI线程读取和解码Bitmap,可能会存在潜在的性能问题
* 可以考虑使用 setImageDrawable(android.graphics.drawable.Drawable)
* 或者setImageBitmap(android.graphics.Bitmap) 代替
*/
imageView.setImageResource(picture_id);
textView =new TextView(context, attrs);
/**
* Sets the horizontal alignment of the text and the
* vertical gravity that will be used when there is extra space
* in the TextView beyond what is required for the text itself.
*/
//水平居中
textView.setGravity(android.view.Gravity.CENTER_HORIZONTAL);
textView.setPadding(0, 0, 0, 0);
setClickable(true);
setFocusable(true);
setOrientation(LinearLayout.VERTICAL);
addView(imageView);
addView(textView);
}
public void setText(int resId) {
textView.setText(resId);
}
public void setText(CharSequence buttonText) {
textView.setText(buttonText);
}
public void setTextColor(int color) {
textView.setTextColor(color);
}
<com.uestcneon.chuji.changjianglife.share.ImageButtonWithText图片将通过自定义的custom:picture传递给ImageView控件,文字将通过android:text传递给TextView
xmlns:custom="http://schemas.android.com/apk/res-auto"
style="@style/hisCardTable"
custom:picture="@mipmap/his_card_company"
android:id="@+id/imgbtn_company"
android:text="公司(1)" >
</com.uestcneon.chuji.changjianglife.share.ImageButtonWithText>