TextView 开发中长使用的几种属性 —— 开发记录

树欲静,而风不止

PS:这两天一直在更改公司项目代码,入职半个月以来,分配了第一个开发任务,重构 个人主页。开始浏览了下原型图,很简单,只是UI风格变换了,但是不能只是改改UI,毕竟项目以后还是要自己维护的。

所以 打算 在 个人信息界面 使用MVP架构,慢慢蚕食整个项目,达到项目重构的目的。

预定工期:2天 

上周五一天把界面搭建出来,尽量拆分,复用,然后构建逻辑层,整个框子搭建完成,

今天打算把原有接口数据,逻辑,堆到P 层,发现自己想象太简单了。一个我的界面,点击事件30+,接口五六个,各个都是根据返回数据判断,进入界面。最终只能做到 接口放在P 层,返回数据处理,实在是看不懂。全部使用JSONObject 一层一层解析。最重要是 没有接口文档,没有需求文档,导致我在逻辑这块一行代码都不敢更改。幸好(管理层已经拍板,后台整体重构)


TextView 使我们使用最多的控件。但是一些属性再用到的时候还是需要百度,导致开发效率极低。所以这里记录下,方便下次使用。

  1. TextView 控件中使用图片详解

  2. 限制文字显示长度

  3. TextView排版问题


a、TextView 中添加图标  属性:

  • android:drawableBottom
  • android:drawableRight
  • android:drawableTop
  • android:drawableLeft
  • android:drawablePadding  设置文字与图片的间隔

b、使用drawableBottom设置过图片之后,发现UI提供的图片偏大,如何控制图片大小

创建一个文件left_img.xml,文件内容如下:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
        android:drawable="@drawable/qa" 
        android:width="18dp"
        android:height="18dp" />
</layer-list >

然后在布局中引用:

 <TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"  
    android:paddingTop="18dp" 
    android:paddingBottom="18dp" 
    android:paddingLeft="12dp" 
    android:drawablePadding="12dp" 
    android:gravity="center|left" 
    android:drawableLeft="@drawable/left_img" />

2、控制TextView显示;

 (注意:layout_width="wrap_content",宽度必须是wrap_content,为match_parent无效)

    android:maxEms="10"   //限制字节长度为10

    android:ellipsize="end"  //省略号在最后面

    android:singleLine="true" //超过长度10为省略号

    android:lines=“2”//显示行数 android

    android:textStyle=“bold”文字加

//设置不为加粗
textView .setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));

//设置为正常
textView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));


//设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用“|”隔开  

 


3、字体两端对齐的问题

工具类:

public class AlignedTextUtils {
    private static int n = 0;// 原Str拥有的字符个数
    private static SpannableString spannableString;
    private static double multiple = 0;// 放大倍数

    /**
     * 对显示的字符串进行格式化 比如输入:出生年月 输出结果:出正生正年正月
     */
    public static String formatStr(String str) {
        if (TextUtils.isEmpty(str)) {
            return "";
        }
        n = str.length();
        if (n >= 6) {
            return str;
        }
        StringBuilder sb = new StringBuilder(str);
        for (int i = n - 1; i > 0; i--) {
            sb.insert(i, "正");
        }
        return sb.toString();
    }

    /**
     * 对显示字符串进行格式化 比如输入:安正卓正机正器正人 输出结果:安 卓 机 器 人 * * @param str * @return
     */
    public static SpannableString formatText(String str) {
        if (TextUtils.isEmpty(str)) {
            return null;
        }
        str = formatStr(str);
        if (str.length() <= 6) {
            return null;
        }
        spannableString = new SpannableString(str);
        switch (n) {
            case 2:
                multiple = 4;
                break;
            case 3:
                multiple = 1.5;
                break;
            case 4:
                multiple = 0.66666666666666666666666666666666667;
                break;
            case 5:
                multiple = 0.25;
                break;
            default:
                break;
        }
        for (int i = 1; i < str.length(); i = i + 2) {
            spannableString.setSpan(new RelativeSizeSpan((float) multiple), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
            spannableString.setSpan(new ForegroundColorSpan(Color.TRANSPARENT), i, i + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        }
        return spannableString;
    }


}

使用

       tv_code.setText(AlignedTextUtils.formatStr("验 证 码:"));
       textView_sex.setText(AlignedTextUtils.formatStr("性   别:"));
       textView_selectcity.setText(AlignedTextUtils.formatStr("所在城市 :"));
       textView_individualresume.setText(AlignedTextUtils.formatStr("个人简介 :"));

引用 自导自演的机器人 博文

 


长城不是一天建成的,罗马不是一天到达。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值