Android如何使用图文居中显示控件
发布时间:2020-11-04 17:35:47
来源:亿速云
阅读:127
作者:Leah
Android如何使用图文居中显示控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
最近项目中用到了文字图标的按钮,需要居中显示,如果用TextView实现的方式,必须同时设置padding和drawablePadding。如下:
android:layout_width="200dp"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_xxx"
android:drawablePadding="-60dp"
android:minHeight="48dp"
android:gravity="center"
android:padding="80dp" />
这种方式需要自己做精确计算。比较麻烦。另外还有一种方式就是用线性布局包裹ImageView和TextView,但这样会增加布局层级。于是自己封装了一个控件DrawableCenterTextView。
attrs.xml文件中定义属性:
对应的Java代码如下:
public class DrawableCenterTextView extends View {
static final int LEFT = 0;
static final int TOP = 1;
static final int RIGHT = 2;
static final int BOTTOM = 3;
private CharSequence mText;
private ColorStateList mTextColor;
private float mTextSize;
private int mTextStyle;
private int mDrawablePadding;
private Drawable[] mCompoundDrawables;
private Rect mTextBounds;
private Rect mDrawableLeftBounds;
private Rect mDrawableTopBounds;
private Rect mDrawableRightBounds;
private Rect mDrawableBottomBounds;
private TextPaint mTextPaint;
public DrawableCenterTextView(Context context) {
this(context, null);
}
public DrawableCenterTextView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DrawableCenterTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
Drawable drawableLeft = null, drawableTop = null, drawableRight = null, drawableBottom = null;
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.DrawableCenterTextView, defStyleAttr, 0);
mText = ta.getText(R.styleable.DrawableCenterTextView_android_text);
mTextColor = ta.getColorStateList(R.styleable.DrawableCenterTextView_android_textColor);
mTextSize = ta.getDimensionPixelSize(R.styleable.DrawableCenterTextView_android_textSize, 15);
mTextStyle = ta.getInt(R.styleable.DrawableCenterTextView_android_textStyle, 0);
drawableLeft = ta.getDrawable(R.styleable.DrawableCenterTextView_android_drawableLeft);
drawableTop = ta.getDrawable(R.styleable.DrawableCenterTextView_android_drawableTop);
drawableRight = ta.getDrawable(R.styleable.DrawableCenterTextView_android_drawableRight);
drawableBottom = ta.getDrawable(R.styleable.DrawableCenterTextView_android_drawableBo