Android TextView 不同主题下两边对齐
来源:互联网 发布:天敏t2网络机顶盒 编辑:程序博客网 时间:2024/05/15 08:09
问题描述
这两天遇到了一个TextView字体对齐的问题,就是两个汉字,三个汉字和四个汉字对齐的问题,之前我采用的方法是用空格(使用\t是不可行的)或者两个字与四个字对齐时使用全角中文打空格,但是三个字就不好对齐,所以最后我选择了空格,但现在出现一个问题是Android主题修改的问题,有的主题自带的字体所占据宽度的是不一样的,导致本应该对齐的而无法对齐。
解决方法
这种情况要做各个屏幕和主题适配工作,解决方法是自定义TextView,比如:平均间距 =(四个字的宽度-两个字的宽度)/ (2-1)然后设置每个字的间距为平均间距:
public class JustifyTextView extends TextView { private int mLineY; private float mViewWidth = 0; public JustifyTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); } @Override protected void onDraw(Canvas canvas) { TextPaint paint = getPaint(); paint.setColor(getCurrentTextColor()); paint.drawableState = getDrawableState(); String text = (String) getText(); mLineY = 0; mLineY += getTextSize(); float width = StaticLayout.getDesiredWidth(text, 0, text.length(), getPaint()); drawScaledText(canvas, text, width); Paint.FontMetrics fm = paint.getFontMetrics(); int textHeight = (int) fm.top; mLineY += textHeight; } private void drawScaledText(Canvas canvas, String line, float lineWidth) { float x = 0; float d = (mViewWidth - lineWidth) / (line.length() - 1); for (int i = 0; i < line.length(); i++) { String c = String.valueOf(line.charAt(i)); float cw = StaticLayout.getDesiredWidth(c, getPaint()); canvas.drawText(c, x, mLineY, getPaint()); x += cw + d; } } public void setTitleWidth( TextView tv ){ String text = (String) tv.getText(); float width = StaticLayout.getDesiredWidth(text, 0, text.length(), tv.getPaint()); mViewWidth = width; setWidth((int) mViewWidth); invalidate(); }}在使用的地方这样使用:
<com.yitu8.client.application.views.JustifyTextView android:id="@+id/tv_hb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:text="航班" android:textColor="@color/home_text" android:textSize="@dimen/font_14_size" />在组件中调用setTitleWith()将宽度设置成较长的标题:
tv_hb.setTitleWidth(tv_ycsj);tv_mdd.setTitleWidth(tv_ycsj);
0 0
- Android TextView 不同主题下两边对齐
- android 开发:使得TextView文本左右两边都对齐--解决中英文对齐问题。
- 不同字数的文字能左右对齐占满两边
- Android TextView两端对齐
- Android TextView两端对齐
- android TextView 分散对齐(两端对齐)
- Android TextView两端对齐、文本两端对齐
- Android TextView 文本自动对齐
- Android TextView显示文字对齐
- Android两端对齐的TextView
- Android TextView显示文字对齐
- Android TextView显示文字对齐
- 文字两边对齐
- css实现两边对齐
- android 不同主题下不同状态的button 动态改变文字和图片
- android 一个textview不同样式
- iOS UILabel text两边对齐
- android textview文字底部对齐设置
- 网络中的广播地址
- [从头学数学] 第250节 Python实现数据结构:映射(HashMap, Dict)
- 位操作 自然数区间取与
- STOMP协议规范
- SQL中EXISTS的使用
- Android TextView 不同主题下两边对齐
- 显示器变蓝色和图像偏移的解决办法
- HDU 3722 Card Game
- [037]ajax实现select二级联动
- 并查集
- 码神第一天
- 国内外造车人
- Redis 集群常见错误
- SQL Server:触发器详解