解决的问题:drawableleft,drawableright,drawabletop,drawablebottom与text一起gravity="center"居中的问题。
自定义一个TextView控件,叫做:DrawableCenterTextView.java
package com.dzq.smswclient.widget;
/**
* Data:2016-05-26 16:30
* Created by YJG
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.TextView;
/**
* drawableTop与文本一起居中显示
* com.yjg.myapplication2.widget.DrawableCenterTextView
*/
public class DrawableCenterTextView extends TextView {
public DrawableCenterTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public DrawableCenterTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public DrawableCenterTextView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable[] drawables = getCompoundDrawables();
if (drawables != null) {
Drawable drawableTop = drawables[1];
for (int i = 0; i < drawables.length; i++) {
Drawable drawable = drawables[i];
if (drawable != null) {
if (i == 0 || i==3) {
//drawableLeft or drawableRight with singline text four word ()
// float textWidth = getPaint().measureText(getText().toString());
float textWidth = getPaint().measureText("正正正正");
int drawablePadding = getCompoundDrawablePadding();
int drawableWidth = 0;
drawableWidth = drawable.getIntrinsicWidth();
float bodyWidth = textWidth + drawableWidth + drawablePadding;
canvas.translate((getWidth() - bodyWidth) / 2, 0);
} else if (i == 1 || i==4) {
//drawableTop or drawableBottom
float textHeight = getPaint().measureText("正");
int drawablePadding = getCompoundDrawablePadding();
int drawableHeight = drawableTop.getIntrinsicHeight();
float bodyWidth = textHeight + drawableHeight + drawablePadding;
canvas.translate(0, (getHeight() - bodyWidth) / 2);
}
}
}
}
super.onDraw(canvas);
}
}
注:上面代码可以看到,用“正”来给文本宽度,这里可以根据需要调整“正”的个数
drawableLeft或者drawableRight与text
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:divider="@drawable/shape_divider_8_8"
android:orientation="horizontal"
android:showDividers="middle">
<com.dzq.smswclient.widget.DrawableCenterTextView
android:id="@+id/tv_office"
style="@style/DrawablecenterTextView_InsideSys"
android:background="@color/inside_11"
android:drawableLeft="@drawable/btn_platform_office"
android:text="移动\n办公"
/>
<com.dzq.smswclient.widget.DrawableCenterTextView
android:id="@+id/tv_investment"
style="@style/DrawablecenterTextView_InsideSys"
android:background="@color/inside_12"
android:drawableLeft="@drawable/btn_platform_investment"
android:text="招商\n引资"
/>
</LinearLayout>style.xml样式
<!-- 内部系统首页textview的样式 -->
<style name="DrawablecenterTextView_InsideSys">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:drawablePadding">16dp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/text_size_18</item>
</style>再如:
drawabletop,drawablebottom与text
图示:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<com.dzq.smswclient.widget.DrawableCenterTextView
android:id="@+id/tv_economy"
style="@style/DrawablecenterTextView_Home"
android:background="@color/orange_economy_nor"
android:drawableTop="@drawable/btn_home_tradeinquires"
android:text="经贸资讯"
/>
<com.dzq.smswclient.widget.DrawableCenterTextView
android:id="@+id/tv_investment"
style="@style/DrawablecenterTextView_Home"
android:background="@drawable/btn_home_investment"
android:drawableTop="@drawable/bg_transparent"
android:text="投资服务"
/>
</LinearLayout>style.xml
<style name="DrawablecenterTextView_Home">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">match_parent</item>
<item name="android:layout_weight">1</item>
<item name="android:drawablePadding">12dp</item>
<item name="android:gravity">center_horizontal</item>
<item name="android:singleLine">true</item>
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/text_size_14</item>
</style>
本文解决了Android中TextView的drawableleft, drawableright, drawabletop, drawablebottom与文字一起设置gravity='center'居中的问题。通过自定义DrawableCenterTextView控件,实现了图标的对齐效果。代码示例中利用‘正’字符调整文本宽度,可根据实际需求调整。"
71597601,6650138,Linux进程监控与管理详解,"['Linux', '操作系统', '进程管理', '系统监控', '命令行工具']
5033

被折叠的 条评论
为什么被折叠?



