textview_textview属性 - CSDN
精华内容
参与话题
  • TextView 的介绍和使用

    千次阅读 2017-01-13 09:06:02
    TextView类的结构 textView是用来显示字符串的组件,在手机上就是显示一块文本的区域。 它继承自 View, 直接子类有:Button.CHeckedTextView,Chronometer, DigitalClock, EditText 简接子类:AutoCompleteTextView...

    TextView类的结构

    textView是用来显示字符串的组件,在手机上就是显示一块文本的区域。
    它继承自 View,
    直接子类有:Button.CHeckedTextView,Chronometer, DigitalClock, EditText
    简接子类:AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText,MultiAutoCompleteTextView, RadioButton, ToggleButton

    TextView类的主要方法(更多的方法需要大家去看源码)

    主要方法                                         功能描述                                                         

    getText()                                 获得TextView 对象的文本                                  

    length()                                   获得TextView 中的文本长度                                      

    setPadding(int..)根据位置设置填充物

     setTextColor(...)                                      设置文本显示的颜色                                                           

    setHighlightColor(....)                               设置文本选中时显示的颜色                                                 
    setShadowLayer(.....)                               设置文本显示的阴影颜色                           
            
    setHintTextColor
     (......)                                 设置提示文字的颜色                                           

    setLinkTextColor(....)                               设置链接文字的颜色                                           
    setGravity(.......)                                   设置当TextView 超出了文本本身时横向以及垂直对齐   

    TextView标签的属性





    TextView 的使用

    在xml中的使用:

    <h3><pre name="code" class="html">//显示超链接:android:autoLink="phone"其中的phone换成你想要的
     <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:autoLink="phone"
            android:gravity="center_vertical|center_horizontal"
            android:padding="10dp"
            android:text="拨打手机:13888888888"
            android:textColor="#FF0000"
            android:textSize="18sp" />
    //设置文字的滚屏跑马灯效果,字符阴影 ,字符的外形粗黑
    
     <TextView
            android:layout_width="fill_parent"
            android:layout_height="20dp"
            android:ellipsize="marquee"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:marqueeRepeatLimit="marquee_forever"
            android:scrollHorizontally="true"
            android:shadowColor="#006600"
            android:shadowRadius="8.0"
            android:text="文字滚屏文字跑马灯效果加长加长加长加长加长加长加长加长加长加长加长加长"
            android:textColor="#000000"
            android:textSize="18sp"
            android:textStyle="bold"

    android:singleLine="true"/>

    
    

    在java代码中使用

    LinearLayout linear  = (LinearLayout) findViewById(R.id.linear);
    	LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    	TextView tv= new TextView(getApplication());
    	tv.setText("动态创建TextView");
    	tv.setBackgroundColor(Color.GREEN);
    	tv.setTextColor(Color.RED);
    	tv.setGravity(Gravity.CENTER);
    	tv.setTextSize(20);
    	linear.addView(tv, lp);





    增加的:

    TextView 下划线

    textview.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);//下划线 

    设置当TextView中的文字超过TextView的容量时,用省略号代替

    只需要下边的设置:
     
    textview.setSingleLine();
    textview.setEllipsiz(TextUtils.TruncateAt.valueOf("END"));
     
    在xml中设置如下:
     长和宽都设置成wrap_content
    android:singleLine="true"
    android:ellipsize="end"
    //如果让它只显示10个字
    android:maxEms="10" 

    TextView  settext()有双引号的String

    可以使用\ 进行转译,比如 setText("\"服务创造价值\"");
    展开全文
  • 安卓开发之---TextView

    千次阅读 2017-10-18 21:59:01
    一基本单位介绍: dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 px: pixels(像素)....

    一基本单位介绍:

    dp(dip): device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。 pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用; sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。

    官方API

    二.基础属性详解:

    • id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置,又或者使用RelativeLayout时,参考组件用的也是id!
    • layout_width:组件的宽度,一般写:**wrap_content**或者**match_parent(fill_parent)**,前者是控件显示的内容多大,控件就多大,而后者会填满该控件所在的父容器;当然也可以设置成特定的大小,比如我这里为了显示效果,设置成了200dp。
    • layout_height:组件的宽度,内容同上。
    • gravity:设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等。
    • text:设置显示的文本内容,一般我们是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容的,这里为了方便我直接就写到""里,不建议这样写!!!
    • textColor:设置字体颜色,同上,通过colors.xml资源来引用,别直接这样写!
    • textStyle:设置字体风格,三个可选值:**normal**(无效果),**bold**(加粗),**italic**(斜体)
    • textSize:字体大小,单位一般是用sp!
    • background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片哦!

    2.1 带阴影的TextView

    涉及到的几个属性:

    • android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用哦!
    • android:shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色了,建议使用3.0
    • android:shadowDx:设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置
    • android:shadowDy:设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置

    2.2 带边框的TextView:

    如果你想为TextView设置一个边框背景,普通矩形边框或者圆角边框!下面可能帮到你! 另外TextView是很多其他控件的父类,比如Button,也可以设置这样的边框! 实现原理很简单,自行编写一个ShapeDrawable的资源文件!然后TextView将blackgroung 设置为这个drawable资源即可!

    简单说下shapeDrawable资源文件的几个节点以及属性:

    • <solid android:color = "xxx"> 这个是设置背景颜色的
    • <stroke android:width = "xdp" android:color="xxx"> 这个是设置边框的粗细,以及边框颜色的
    • <padding androidLbottom = "xdp"...> 这个是设置边距的
    • <corners android:topLeftRadius="10px"...> 这个是设置圆角的
    • <gradient> 这个是设置渐变色的,可选属性有: startColor:起始颜色  endColor:结束颜色  centerColor:中间颜色 angle:方向角度,等于0时,从左到右,然后逆时针方向转,当angle = 90度时从下往上 type:设置渐变的类型

    2.3 带图片(drawableXxx)的TextView:

    drawableTop(上),drawableButtom(下),drawableLeft(左),drawableRight(右) 另外,你也可以使用drawablePadding来设置图片与文字间的间距!

    2.4 SpannableString&SpannableStringBuilder定制文本

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView t1 = (TextView) findViewById(R.id.txtOne);
            TextView t2 = (TextView) findViewById(R.id.txtTwo);
    
            SpannableString span = new SpannableString("红色打电话斜体删除线绿色下划线图片:.");
            //1.设置背景色,setSpan时需要指定的flag,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前后都不包括)
            span.setSpan(new ForegroundColorSpan(Color.RED), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //2.用超链接标记文本
            span.setSpan(new URLSpan("tel:4155551212"), 2, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //3.用样式标记文本(斜体)
            span.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 5, 7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //4.用删除线标记文本
            span.setSpan(new StrikethroughSpan(), 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //5.用下划线标记文本
            span.setSpan(new UnderlineSpan(), 10, 16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //6.用颜色标记
            span.setSpan(new ForegroundColorSpan(Color.GREEN), 10, 13,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            //7.//获取Drawable资源
            Drawable d = getResources().getDrawable(R.drawable.icon);
            d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
            //8.创建ImageSpan,然后用ImageSpan来替换文本
            ImageSpan imgspan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
            span.setSpan(imgspan, 18, 19, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            t1.setText(span);
        }
    }

    2.5 实现跑马灯效果的TextView

    <TextView
            android:id="@+id/txtOne"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:singleLine="true"
            android:ellipsize="marquee"
            android:marqueeRepeatLimit="marquee_forever"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:text="你整天说着日了狗日了狗,但是你却没有来,呵呵呵呵呵呵呵呵呵呵~"/>

    字间距:

    android:textScaleX:控制字体水平方向的缩放,默认值1.0f,值是float
    JavasetScaleX(2.0f); 

    行间距: Android系统中TextView默认显示中文时会比较紧凑,为了让每行保持的行间距

    android:lineSpacingExtra:设置行间距,如"3dp" android:lineSpacingMultiplier:设置行间距的倍数,如"1.2"

    Java代码中可以通过: setLineSpacing方法来设置

    2.6 自动换行

    自动换行通过 android:singleLine 设置,默认为 false。

    如需要自动换行,可以用:

    android:singleLine = "false"

    如果要在一行显示完,不换行,可以用:

    android:singleLine = "true"













    展开全文
  • 主要有以下几种样式:1、带有阴影的TextView。2、带有边框的TextView。(捎带做一个带有边框的EditText)3、带有图标的TextView。4、带有autoLink的TextView。(比如,链接百度等)5、解析HTML标签的TextView。6、...

    主要有以下几种样式:

    1、带有阴影的TextView。

    2、带有边框的TextView。(捎带做一个带有边框的EditText)

    3、带有图标的TextView。

    4、带有autoLink的TextView。(比如,链接百度等)

    5、解析HTML标签的TextView。

    6、解析SpannableString的TextView。(部分字体颜色、大小等变化)

    7、带有跑马灯效果的TextView。

    效果图如下:



    activity_main.xml的代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        android:id="@+id/main_lLayoutMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        xmlns:android="http://schemas.android.com/apk/res/android">
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scrollbars="vertical">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/main_tvWithShadow"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="带有阴影的TextView"
                    android:textColor="@color/colorPrimaryDark"
                    android:textSize="16dp"
                    android:textStyle="bold"
                    android:shadowColor="@color/colorAccent"
                    android:shadowDx="5"
                    android:shadowDy="5"
                    android:shadowRadius="3"
                    android:layout_margin="10dp"/>
    
                <TextView
                    android:id="@+id/main_tvWithBorder"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="normal"
                    android:textSize="16dp"
                    android:text="带有边框的TextView"
                    android:background="@drawable/style_textview_border"
                    android:layout_margin="10dp"/>
    
                <EditText
                    android:id="@+id/main_etWithBorder"
                    android:layout_width="match_parent"
                    android:layout_height="30dp"
                    android:textStyle="normal"
                    android:textSize="14dp"
                    android:singleLine="true"
                    android:hint="带有边框的EditText"
                    android:background="@drawable/style_textview_border"
                    android:layout_margin="10dp"/>
    
                <TextView
                    android:id="@+id/main_tvWithIcon"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="normal"
                    android:gravity="center_horizontal"
                    android:textSize="12dp"
                    android:text="收藏"
                    android:padding="5dp"
                    android:drawableTop="@mipmap/collect"
                    android:layout_margin="10dp"/>
    
                <TextView
                    android:id="@+id/main_tvWithLink"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="normal"
                    android:gravity="center_horizontal"
                    android:textSize="16dp"
                    android:text="http://www.baidu.com"
                    android:autoLink="web"
                    android:layout_margin="10dp"/>
    
                <TextView
                    android:id="@+id/main_tvWithHTML"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="normal"
                    android:textSize="16dp"
                    android:gravity="center_horizontal"
                    android:text="html"
                    android:layout_margin="10dp"/>
    
                <!--android:lineSpacingExtra:设置行间距-->
                <TextView
                    android:id="@+id/main_tvWithSpannableString"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textStyle="normal"
                    android:textSize="16dp"
                    android:text=""
                    android:lineSpacingExtra="10dp"
                    android:layout_margin="10dp"/>
    
                <!-- android:ellipsize=”marquee”–以横向滚动方式显示(需获得当前焦点时) "start":省略号显示在开头 -->
                <TextView
                    android:id="@+id/main_tvWithRuning"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textStyle="normal"
                    android:textSize="16dp"
                    android:text="这是一个跑马灯效果的TextView这是一个跑马灯效果的TextView这是一个跑马灯效果的TextView这是一个跑马灯效果的TextView这是一个跑马灯效果的TextView"
                    android:ellipsize="marquee"
                    android:focusable="true"
                    android:focusableInTouchMode="true"
                    android:singleLine="true"
                    android:layout_margin="10dp"/>
    
            </LinearLayout>
    
        </ScrollView>
    
    </LinearLayout>

    style_textview_border.xml 边框样式如下(改变组件外观固定样式的话,用shape):

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" >
        <!--设置背景颜色-->
        <solid android:color="@color/color_white" />
        <!--这个是设置边框的粗细,以及边框颜色的-->
        <stroke android:width="1dp" android:color="@color/color_black" />
        <!--这个是设置边距的-->
        <padding
            android:bottom="5dp"
            android:left="5dp"
            android:right="5dp"
            android:top="5dp" />
        <!-- 设置四个圆角的半径 -->
        <corners
            android:bottomLeftRadius="10px"
            android:bottomRightRadius="10px"
            android:topLeftRadius="10px"
            android:topRightRadius="10px" />
        <!-- 渐变 -->
        <!--这个是设置渐变色的,可选属性有: startColor:起始颜色 endColor:结束颜色 centerColor:中间颜色
        angle:方向角度,等于0时,从左到右,然后逆时针方向转,当angle = 90度时从下往上 type:设置渐变的类型-->
        <gradient
            android:angle="270"
            android:endColor="#C0C0C0"
            android:startColor="#FCD209"
            android:type="linear"/>
    </shape>

    MainActivity.java的代码如下:

    package com.deepreality.textviewdemo;
    
    import android.graphics.drawable.Drawable;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.text.Html;
    import android.text.Spannable;
    import android.text.SpannableString;
    import android.text.SpannableStringBuilder;
    import android.text.TextPaint;
    import android.text.method.LinkMovementMethod;
    import android.text.style.ClickableSpan;
    import android.text.style.ImageSpan;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import java.lang.reflect.Field;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            EditText editText = findViewById(R.id.main_etWithBorder);
            editText.setFocusable(false);
    
            /*//手动设置带有图标的图标大小
            TextView tvWithIcon = (TextView) findViewById(R.id.main_tvWithIcon);
            Drawable[] drawable = tvWithIcon.getCompoundDrawables();
            // 数组下表0~3,依次是:左上右下
            drawable[1].setBounds(100, 0, 200, 200);
            tvWithIcon.setCompoundDrawables(null, drawable[1], null,
                    null);*/
    
    
            //以下代码实现带有HTML标签的解析
            //<font>:设置颜色和字体。
            //<big>:设置字体大号
            //<small>:设置字体小号
            //<i><b>:斜体粗体
            //<a>:连接网址
            //<img>:图片
            TextView tvWithHTML = findViewById(R.id.main_tvWithHTML);
            String htmlWithImg = "<font color='blue'><b>百度一下,你就知道~:</b></font><br />图片:<img src = 'collect'/><br>";
            //String html = "<font color='blue'><b>百度一下,你就知道~:</b></font><br /><a href = 'http://www.baidu.com'>百度</a>";
            //调用Html.fromHtml()方法将字符串转换为CharSequence接口
            //tvWithHTML.setText(Html.fromHtml(html));
            //tvWithHTML.setMovementMethod(LinkMovementMethod.getInstance());
            tvWithHTML.setText(Html.fromHtml(htmlWithImg, imageGetter, null));
    
    
            TextView tvWithSpannableString = findViewById(R.id.main_tvWithSpannableString);
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 20; i++) {
                sb.append("好友" + (i + 1) + ",");
            }
            String likeUsers = sb.substring(0, sb.lastIndexOf(",")).toString();
            tvWithSpannableString.setMovementMethod(LinkMovementMethod.getInstance());
            tvWithSpannableString.setText(addClickPart(likeUsers), TextView.BufferType.SPANNABLE);
        }
    
        Html.ImageGetter imageGetter = new Html.ImageGetter() {
            @Override
            public Drawable getDrawable(String source) {
                Drawable draw = null;
                Field field = null;
                try {
                    field = R.drawable.class.getField(source);
                    int resourceId = Integer.parseInt(field.get(null).toString());
                    draw = getResources().getDrawable(resourceId);
                    draw.setBounds(0, 0, draw.getIntrinsicWidth(), draw.getIntrinsicHeight());
                } catch (NoSuchFieldException e) {
                    e.printStackTrace();
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
                return draw;
            }
        };
    
        //定义一个点击每个部分文字的处理方法
        private SpannableStringBuilder addClickPart(String str) {
            //赞的图标,这里没有素材,就找个笑脸代替下~
            ImageSpan imgspan = new ImageSpan(MainActivity.this, R.mipmap.collect);
            SpannableString spanStr = new SpannableString("p.");
            spanStr.setSpan(imgspan, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
    
            //创建一个SpannableStringBuilder对象,连接多个字符串
            SpannableStringBuilder ssb = new SpannableStringBuilder(spanStr);
            ssb.append(str);
            String[] likeUsers = str.split(",");
            if (likeUsers.length > 0) {
                for (int i = 0; i < likeUsers.length; i++) {
                    final String name = likeUsers[i];
                    final int start = str.indexOf(name) + spanStr.length();
                    ssb.setSpan(new ClickableSpan() {
                        @Override
                        public void onClick(View widget) {
                            Toast.makeText(MainActivity.this, name,
                                    Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void updateDrawState(TextPaint ds) {
                            super.updateDrawState(ds);
                            //设置字体颜色,删除下划线
                            ds.setColor(getResources().getColor(R.color.colorPrimaryDark));
                            //ds.setUnderlineText(false);
                        }
                    }, start, start + name.length(), 0);
                }
            }
            return ssb.append("等" + likeUsers.length + "个人觉得很赞");
        }
    }
    

    展开全文
  • TextView 高级教程

    千次阅读 多人点赞 2019-05-19 20:41:22
    光看题目,估计有人已经忍不住吐槽了:尼玛,装X,TextView 这么简单的控件,还有什么高级用法吗?放在以前,我也会这么想,但是随着开发经验的积累,我愈发觉得 TextView 简直就是一座宝藏,里面有很多宝贝值得研究...

    前言

    光看题目,估计有人已经忍不住吐槽了:尼玛,TextView 这么简单的控件,还有什么高级用法吗?放在以前,我也会这么想,但是随着开发经验的积累,我愈发觉得 TextView 简直就是一座宝藏,里面有很多宝贝值得研究。

    本文基于 @Chiuki 的讲座,并结合我自己的经验整理而成。

    文章中的大部分图片和代码均摘自讲稿,感谢原作者的分享。

    Compound Drawable

    如下图1中的效果,我们可以用 LinearLayout 里面嵌套 ImageView 和 TextView 实现,也可以只用一个带 Drawable 的 TextView 做到。

    20161005180535715
    图1
    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="@string/animation"
      android:drawablePadding="1dp"
      android:drawableLeft="@drawable/rotating_loading"
      android:drawableRight="@drawable/animated_wifi"
      android:drawableBottom="@drawable/animated_clock"/>
    

    相比而言,后者 View 个数更少,层级更少,是优化层级的常用方法。

    我们可以通过 drawablePadding 属性来调整图片资源和文字间的间距。但是,在 xml 中,没有对应的属性去调整图片的大小,也就是说,图片会按照原始尺寸进行展示,而没有 ImageView 的各种 ScaleType 可选,除非在 Java 代码中使用 setCompoundDrawables() 方法,或者使用自定义 View。使用 setCompoundDrawables() 控制图片尺寸的用法如下:

            Drawable drBottom = getResources().getDrawable(R.mipmap.hi);
            // drBottom.setBounds(0, 0, 200, 200);
            drBottom.setBounds(0, 0, drBottom.getIntrinsicWidth(), drBottom.getIntrinsicHeight());
            textView.setCompoundDrawablePadding(3);
            textView.setCompoundDrawables(null, null, null, drBottom);
    
    

    而且,这里的 Drawable 不仅仅是图片,还可以是动画等资源文件,以此达到动画效果,如图2:

    20161005180339370
    图2

    关键代码:

    AnimatedRotateDrawable

    <!-- res/drawable/rotating_loading.xml -->
    <animated-rotate
      android:pivotX="50%"
      android:pivotY="50%"
      android:drawable="@drawable/ic_loading"
      android:duration="500" />
    

    AnimationDrawable

    <!-- res/drawable/animated_wifi.xml -->
    <animation-list>
      <item android:drawable="@drawable/ic_wifi_0"
          android:duration="250" />
      <item android:drawable="@drawable/ic_wifi_1"
          android:duration="250" />
      <item android:drawable="@drawable/ic_wifi_2"
          android:duration="250" />
      <item android:drawable="@drawable/ic_wifi_3"
          android:duration="250" />
    </animation-list>
    

    AnimatedVectorDrawable

    <!-- res/drawable/animated_clock.xml -->
    <animated-vector android:drawable="@drawable/clock">
      <target android:name="hours"
        android:animation="@anim/hours_rotation" />
      <target android:name="minutes"
        android:animation="@anim/minutes_rotation" />
    </animated-vector>
    
    private void startAnimation(
        TextView textView) {
      Drawable[] drawables
          = textView.getCompoundDrawables();
      for (Drawable drawable : drawables) {
        if (drawable != null &&
            drawable instanceof Animatable) {
          ((Animatable) drawable).start();
        }
      }
    }
    

    阴影效果

    效果:

    20161005180649515
    图3

    代码:

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="12dp"
      android:text="@string/shadow"
      android:textSize="80sp"
      android:textStyle="bold"
      android:shadowColor="#7000"
      android:shadowDx="12"
      android:shadowDy="12"
      android:shadowRadius="8"/>
    shadowColor, shadowDx, shadowDy, shado
    

    注意,shadowDx,shadowDy,shadowRadius 的值的单位是 px,而非 dp。为了让阴影完全显示,记得设置合适的 padding。

    通过综合使用这些属性,我们可以做到更多效果,如图4:

    20161005225923034
    图4

    Blocky 和 Glow 效果对应的代码:

    Blocky

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="12dp"
      android:text="@string/blocky"
      android:textColor="@color/purple"
      android:textSize="80sp"
      android:textStyle="bold"
      android:shadowColor="@color/green"
      android:shadowDx="4"
      android:shadowDy="-4"
      android:shadowRadius="1"/>
    
    

    Glow

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:padding="12dp"
      android:text="@string/glow"
      android:textSize="80sp"
      android:textStyle="bold"
      android:textColor="@android:color/white"
      android:background="@android:color/black"
      android:shadowColor="@color/yellow"
      android:shadowDx="0"
      android:shadowDy="0"
      android:shadowRadius="24"/>
      
    

    自定义字体

    效果:

    20161005230039694
    图5

    代码:

    Typeface typeface = Typeface.createFromAsset(getAssets(), "Ruthie.ttf");
    
    textView.setTypeface(typeface);
    

    渐变色

    效果:

    20161005230255473
    图6

    代码:

    Shader shader = new LinearGradient(
        0, 0, 0, textView.getTextSize(),
        Color.RED, Color.BLUE,
        Shader.TileMode.CLAMP);
        
    textView.getPaint().setShader(shader);
    

    图片填充

    效果:

    20161005230354448
    图7

    代码:

    Bitmap bitmap = BitmapFactory.decodeResource(
        getResources(),
        R.drawable.cheetah_tile);
        
    Shader shader = new BitmapShader(
        bitmap,
        Shader.TileMode.REPEAT,
        Shader.TileMode.REPEAT);
    textView.getPaint().setShader(shader);
    

    多样式

    效果:

    20161005230918329
    图7

    如果上述效果用 HTML 实现,其代码为:

    HTML

    <h1>Hello World</h1>
    Here is an
    <img src="octopus"><i>octopus</i>.<br>
    And here is a
    <a href="http://d.android.com">
    link</a>.
    

    其实,使用一个 TextView 也可以实现这种效果:

    <string name="from_html_text">
    <![CDATA[
    <h1>Hello World</h1>
    Here is an
    <img src="octopus"><i>octopus</i>.<br>
    And here is a
    <a href="http://d.android.com">
    link</a>.
    ]]>
    </string>
    
    

    setMovementMethod

    String html = getString(R.string.from_html_text);
    textView.setMovementMethod(
        LinkMovementMethod.getInstance());
    textView.setText(Html.fromHtml(
        html, new ResourceImageGetter(this), null));
    

    ResourceImageGetter

    private static class ResourceImageGetter
        implements Html.ImageGetter {
      // Constructor takes a Context
      public Drawable getDrawable(String source) {
        int path = context.getResources().getIdentifier(
            source, "drawable", context.getPackageName());
        Drawable drawable = ContextCompat.getDrawable(context, path);
        drawable.setBounds(0, 0,
           drawable.getIntrinsicWidth(),
           drawable.getIntrinsicHeight());
        return drawable;
      }
    }
    

    各种 Sapn

    span 是指连续的一段范围,对该范围范围内的内容做修饰。

    比如该效果:One <u>two</u> three。
    该字符串,从第 4 个到第 6 个字符,用下划线修饰。对应的的代码便是:

    spannableString.setSpan(new UnderlineSpan(), 4, 6, flags);
    

    从上面这个例子,我们可以总结出 Span 的一般用法,需要三个参数:

    • XXXSpan,修饰类型;
    • 范围,即被修饰子串的起始位置;
    • 标志位;

    不同类型的 Span,只需要变化第一个参数。

    根据范围的大小,可以将 Span 的类型分为两种:字符和段落。

    字符

    链接(ClickableSpan)

    效果:

    20161005231327852
    图8

    代码:

    ClickableSpan

    String text = textView.getText().toString();
    
    String goToSettings = getString(R.string.go_to_settings);
    int start = text.indexOf(goToSettings);
    int end = start + goToSettings.length();
    
    SpannableString spannableString = new SpannableString(text);
    spannableString.setSpan(new GoToSettingsSpan(), start, end, 0);
    textView.setText(spannableString);
    
    textView.setMovementMethod(new LinkMovementMethod());
    
    private static class GoToSettingsSpan extends ClickableSpan {
      public void onClick(View view) {
        view.getContext().startActivity(
          new Intent(android.provider.Settings.ACTION_SETTINGS));
      }
    }
    
    <TextView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:text="@string/clickable_span_text"
      android:textColorLink="@color/go_to_settings"
      android:textColorHighlight="@color/light_green"/>
    

    利用这一原理,我们可以实现朋友圈评论的链接效果:

    20151104113402108

    关于该效果的使用,以及其中点击事件分发的问题,请移步我的这篇博客 《TextView ClickableSpan 事件分发的两个坑》

    在这里记录下 Span 中各种标志的含义:

    • SPAN_INCLUSIVE_INCLUSIVE
    • SPAN_INCLUSIVE_EXCLUSIVE
    • SPAN_EXCLUSIVE_INCLUSIVE
    • SPAN_EXCLUSIVE_EXCLUSIVE

    这里的 inclusive 和 exclusive 并非指的是 start 和 end 对应的字符,而是指,在 start 之前或 end 之后字符增加时,新增的字符是否应用 span 样式。以下代码摘自 stackoverflow :

    String myString = "01234";
    int start = 1;
    int end = 3;
    int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
    
    SpannableString spannableString = new SpannableString(myString);
    ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
    spannableString.setSpan(foregroundSpan, start, end, spanFlag);
    textView.setText(spannableString);
    

    各种标志及使用后的结果:
    SPAN_INCLUSIVE_INCLUSIVE
    这里写图片描述

    SPAN_INCLUSIVE_EXCLUSIVE
    这里写图片描述

    SPAN_EXCLUSIVE_INCLUSIVE
    这里写图片描述

    SPAN_EXCLUSIVE_EXCLUSIVE
    这里写图片描述

    但是,如果我们对 span 做了更改:

    String myString = "01234";
    int start = 1;
    int end = 3;
    int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing
    
    // set the span
    SpannableStringBuilder spannableString = new SpannableStringBuilder(myString);
    ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED);
    spannableString.setSpan(foregroundSpan, start, end, spanFlag);
    
    // insert the text after the span has already been set
    // (inserting at start index second so that end index doesn't get messed up)
    spannableString.insert(end, "x");
    spannableString.insert(start, "x");
    
    textView.setText(spannableString);
    

    结果如下:
    SPAN_INCLUSIVE_INCLUSIVE
    这里写图片描述

    SPAN_INCLUSIVE_EXCLUSIVE
    这里写图片描述

    SPAN_EXCLUSIVE_INCLUSIVE
    这里写图片描述

    SPAN_EXCLUSIVE_EXCLUSIVE
    这里写图片描述

    如果通过 SpannableStringBuilder 来 append 操作子串,也会达到 insert 的效果,即在 inclusive 时扩大 span 样式范围。

    至于 SPAN_COMPOSING 等标志,详见 https://stackoverflow.com/questions/16392417/explain-the-definitions-of-these-flags-span-composing-span-user-etc-from-th

    自定义 TagHandler

    《TextView ClickableSpan 事件分发的两个坑》 告诉我们,安卓系统支持的 Html 标签类型有限,如果要支持其他标签,我们需要使用 TagHandler 来自己实现。综合使用 TagHandler 和 MetricAffectingSpan 可以实现分数效果:

    20161005231511571
    代码见 [FractionSpan](https://github.com/chiuki/advanced-textview/blob/master/app/src/main/java/com/sqisland/android/advanced_textview/FractionActivity.java)。

    下划线(UnderlineSpan)

    效果:
    20161005231708838
    代码:

    //underline a character
    span = new UnderlineSpan();
    

    删除线(StrikethroughSpan)

    效果:
    20161005232217314
    代码:

    // strikethrough a character
    span = new StrikethroughSpan();
    

    字符下沉(SubscriptSpan)

    可用于实现类似化学式右下角标的效果。
    效果:
    20161006095313013
    代码:

    //subscript a character
    span = new SubscriptSpan();
    

    字符上浮(SuperscriptSpan)

    实现右上角标效果。
    效果:
    20161006095400451
    代码:

    //superscript a character
    span = new SuperscriptSpan();
    

    字符背景色(BackgroundColorSpan)

    效果:
    20161006095445014
    代码:

    /*
    public BackgroundColorSpan (int color)
    -color: background color
    */
    
    //set a green background
    span = new BackgroundColorSpan(Color.GREEN);
    

    文本颜色(ForegroundColorSpan)

    效果:
    20161006095559030
    代码:

    /*
    public ForegroundColorSpan (int color)
    -color: foreground color
    */
    
    //set a red foreground
    span = new ForegroundColorSpan(Color.RED);
    

    插入图片(ImageSpan)

    将范围内的子串替换成图片。
    效果:
    20161006095658330
    代码:

    //replace a character by pic1_small image
    span = new ImageSpan(this, R.drawable.pic1_small);
    

    注意,我们可以综合使用 ImageSpan(Context context, Bitmap b) 和 createScaledBitmap(Bitmap src, int dstWidth, int dstHeight, boolean filter) 来控制图片的大小,使其与文本大小一致。我们可以将其 dstHeight 设置为文本的高度,文本高度计算方法:

    int ascent = (int) (-textView.getPaint().ascent());
    
    
    20161006100146142

    简单样式(StyleSpan)

    改变子串的加粗、斜体、正常(bold,italic,normal)等样式。
    效果:
    20161006100216088
    代码:

    /*
    public StyleSpan (int style)
    -style: int describing the style (android.graphics.Typeface)
    */
    
    //set a bold+italic style
    span = new StyleSpan(Typeface.BOLD | Typeface.ITALIC);
    

    自定义字体(TypefaceSpan)

    效果:
    20161006100253933
    代码:

    /*
    public TypefaceSpan (String family)
    -family: a font family
    */
    
    //set the serif family
    span = new TypefaceSpan("serif");
    

    字体样式(TextAppearanceSpan)

    效果:
    20161006100750255
    代码:

    /*
    public  TextAppearanceSpan(Context context, int appearance, int colorList)
    -context: a valid context
    -appearance: text appearance resource (ex: android.R.style.TextAppearance_Small)
    -colorList: a text color resource (ex: android.R.styleable.Theme_textColorPrimary)
    
    public TextAppearanceSpan(String family, int style, int size, ColorStateList color, ColorStateList linkColor)
    -family: a font family
    -style: int describing the style (android.graphics.Typeface)
    -size: text size
    -color: a text color
    -linkColor: a link text color
    */
    
    //set the serif family
    span = new TextAppearanceSpan(this/*a context*/, R.style.SpecialTextAppearance);
    

    以及自定义 Style:

    &lt;style name="SpecialTextAppearance" parent="@android:style/TextAppearance">
        <item name="android:textColor">@color/color1</item>
        <item name="android:textColorHighlight">@color/color2</item>
        <item name="android:textColorHint">@color/color3</item>
        <item name="android:textColorLink">@color/color4</item>
        <item name="android:textSize">28sp</item>
        <item name="android:textStyle">italic</item>
    </style>
    

    绝对尺寸(AbsoluteSizeSpan)

    这里的尺寸,可以是像素或者 dip,具体通过构造方法里面的布尔值设置。
    效果:
    20161006101722274
    代码:

    /*
    public AbsoluteSizeSpan(int size, boolean dip)
    -size: a size
    -dip: false, size is in px; true, size is in dip (optionnal, default false)
    */
    
    //set text size to 24dp
    span = new AbsoluteSizeSpan(24, true);
    
    

    相对尺寸(RelativeSizeSpan)

    效果:
    20161006101920009
    代码:

    /*
    public RelativeSizeSpan(float proportion)
    -proportion: a proportion of the actual text size
    */
    
    //set text size 2 times bigger 
    span = new RelativeSizeSpan(2.0f);
    

    字体横向缩放(ScaleXSpan)

    横向缩放样式,将字体按比例进行横向缩放。
    效果:
    20161006102909531
    代码:

    /*
    public ScaleXSpan(float proportion)
    -proportion: a proportion of actual text scale x
    */
    
    //scale x 3 times bigger 
    span = new ScaleXSpan(3.0f);
    

    字体蒙板(MaskFilterSpan)

    注意:模糊效果(BlurMaskFilter)不支持硬件加速。
    模糊效果:
    20161006103037437

    EmbossMaskFilter 效果(蓝色前景色+加粗样式):
    20161006105700026
    代码:

    /*
    public MaskFilterSpan(MaskFilter filter)
    -filter: a filter to apply
    */
    
    //Blur a character
    span = new MaskFilterSpan(new BlurMaskFilter(density*2, BlurMaskFilter.Blur.NORMAL));
    //Emboss a character
    span = new MaskFilterSpan(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f));
    

    彩虹样式(RainbowSpan)

    静态效果:
    20161006103418642
    动态效果:
    20161006103551158
    代码见 RainbowSpan

    带横线的 EditText

    EditText 是继承 TextView 的。我们继承 EditText,重写 onDraw() 方法,自己去画每行文字下面的横线。
    效果:
    20161006103817925
    代码见 LinedEditText

    自定义 Span

    上面这些 Span 功能已经被固定了,有没有一种 Span 可以让我们自由发挥、自由绘制文本呢?有的,这就是 ReplacementSpan。
    比如我们可以继承 ReplacementSpan 去画一个矩形框,效果如下:

    20161006104108771

    代码如下:

    @Override
    public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
        // return text with relative to the Paint
        mWidth = (int) paint.measureText(text, start, end);
        return mWidth;
    }
    
    @Override
    public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
        // draw the frame with custom Paint
        canvas.drawRect(x, top, x + mWidth, bottom, mPaint);
    }
    
    

    自定义 Emoji

    效果图:
    20161006104207286
    注意,在上图中,共有4种 emoji 表情,分别是:

    • 系统自带,如第2行末尾的心和天晴图案,具体效果因系统版本而已;
    • 字库所带,如第3行的滑雪图案,需要通过继承 MetricAffectingSpan 的方式引入第三方字库;
    • 静态图片,如第5行的乌贼图案,是通过 ImageSpan 导入的图片资源;
    • 动态绘制,末尾2行的限速牌图案,是通过继承 Drawable、重写 draw() 方法的方式实现的,圆圈、底色、数字都是绘制出来的。

    段落

    简单项目符号(BulletSapn)

    效果:
    20161006104434276
    代码:

    /*
    public BulletSpan (int gapWidth, int color)
    -gapWidth: gap in px between bullet and text
    -color: bullet color (optionnal, default is transparent)
    */
    
    //create a black BulletSpan with a gap of 15px
    span = new android.text.style.BulletSpan(15, Color.BLACK);
    

    项目符号(LeadingMarginSpan)

    上面一节中的 BulletSpan 的项目符号是系统默认的小圆点。
    我们可以使用 LeadingMarginSpan 实现个性化的项目符号,而不仅仅限于小圆点。
    效果:

    20161006104958159

    关键代码:

    String[] bullets = new String[]{"1.", "2.", "3.", "4."};
            String[] itemContents = new String[]{"那一天,闭目在经殿香雾中,蓦然听见,你诵经中的真言;",
                    "那一月,我摇动所有的经筒,不为超度,只为触摸你的指尖;",
                    "那一年,磕长头匍匐在山路,不为觐见,只为贴着你的温暖;",
                    "那一世,转山转水转佛塔呀,不为修来生,只为途中与你相见。"};
    
            CharSequence allText = "";
            for (int i = 0; i < bullets.length; i++) {
    
                final String aBullet = bullets[i];
                String t = itemContents[i].trim();
    
                // 注意此处的换行, 如果没有换行符, 则系统当做只有一个项目处理
                SpannableString spannableString = new SpannableString(t + "\n");
    
                spannableString.setSpan(new LeadingMarginSpan() {
                    @Override
                    public int getLeadingMargin(boolean first) {
    
                        // 项目符号和正文的缩进距离, 单位 px
                        // 我们可以根据 first 来改变第1行和其余行的缩进距离
                        return 100;
                    }
    
                    @Override
                    public void drawLeadingMargin(Canvas c, Paint p, int x, int dir, int top, int baseline, int bottom, CharSequence text, int start, int end, boolean first, Layout layout) {
    
                        // 只对第1行文本添加项添加符号
                        if (first) {
                            Paint.Style orgStyle = p.getStyle();
                            p.setStyle(Paint.Style.FILL);
    
                            c.drawText(aBullet, 0, bottom - p.descent(), p);
                            p.setStyle(orgStyle);
                        }
    
                    }
                }, 0, t.length(), 0);
    
                allText = TextUtils.concat(allText, spannableString);
            }
    
            title.setTextSize(20);
            title.setText(allText);
    
    

    引用(QuoteSapn)

    效果:
    20161006105057161
    代码:

    /*
    public QuoteSpan (int color)
    -color: quote vertical line color (optionnal, default is Color.BLUE)
    */
    
    //create a red quote
    span = new android.text.style.QuoteSpan(Color.RED);
    

    对齐方式(AlignmentSpan.Standard)

    共有三种对齐方式:

    • 正常,Layout.Alignment.ALIGN_NORMAL;
    • 居中对齐,Layout.Alignment.ALIGN_CENTER;
    • 反向对齐,Layout.Alignment.ALIGN_OPPOSITE;

    居中效果:
    20161006105156662
    代码:

    /*
    public Standard(Layout.Alignment align)
    -align: alignment to set
    */
    
    //align center a paragraph
    span = new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER);
    

    反向对齐效果:
    20161006105259868

    上图中对话,4个字符串是在一个 TextView 中,左边2个字符串的对齐方式是 Layout.Alignment.ALIGN_NORMAL,右边的2个是Layout.Alignment.ALIGN_OPPOSITE。

    注意,Layout.Alignment.ALIGN_OPPOSITE 的对齐方式只有在换行的情况下才会起作用,如果 “Knock knock” 和 “Who’s there?” 在同一行,即使 “Who’s is there?” 是 Layout.Alignment.ALIGN_OPPOSITE,也不会产生反向对齐的效果,实际效果如下:
    20161006105429915

    反向对齐关键代码如下:

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_alignment_span);
    
            // some code
    
            appendText("Knock knock", Layout.Alignment.ALIGN_NORMAL);
            appendText("Who's there?", Layout.Alignment.ALIGN_OPPOSITE);
        }
    
        private void appendText(CharSequence text, Layout.Alignment align) {
            if (text == null || text.toString().trim().length() == 0) {
                return;
            }
    
            AlignmentSpan span = new AlignmentSpan.Standard(align);
            SpannableString spannableString = new SpannableString(text);
            spannableString.setSpan(span, 0, text.length(), 0);
    
            if (textView.length() > 0) {
            
                // 该行很重要,如果没有换行,那么反对齐效果失效
                textView.append("\n\n");
            }
            textView.append(spannableString);
        }
    
    
    

    参考文章

    在这里插入图片描述

    展开全文
  • TextView的在安卓中可以理解为一个文本视图控件,Android的视图控件的基类是View类,可以理解的TextView是View的子类。我们通常在.XML布局文件中会为文本视图控件指定各种属性来设置它的样式。 1.属性名andorid:id...
  • TextView

    2019-07-04 23:41:13
    ClickSpan 点击事件 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android=... <item android:state_pressed="true" android:color="@color/...
  • 首先定义个LayoutParams,然后在设置margin,在把这个LayoutParams设置给控件,如下:LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup....
  • TextView 使用详解

    2019-06-20 17:10:46
    极力推荐文章:欢迎收藏Android 干货...一、TextView 继承关系 二、TextView 简单使用举例 三、TextView 跑马灯效果 四、TextView末尾省略号属性 五、TextView 颜色、字体大小属性 六、TextView位置属性 七、TextVie...
  • 设置TextView文字水平垂直居中 有2种方法可以设置TextView文字居中: 一:在xml文件设置:android:gravity="center" 二:在程序中设置:m_TxtTitle.setGravity(Gravity.CENTER); 备注:android:gravity和android:...
  • 安卓 TextView 七宗罪

    万次阅读 热门讨论 2019-06-02 10:48:56
    本文探究 TextView 存在的几个坑,以及其中几个坑的解决方法。
  • Android TextView行间距解析

    万次阅读 多人点赞 2017-07-05 09:52:56
    介绍Android中TextView的行间距设置方法,并分析每项设置对间距的影响。
  • Android之——自定义TextView

    千次阅读 2015-07-27 11:50:48
    在这一篇博文中,将向大家介绍如何以最简单的方式,来自定义Android中的控件,下面我们以自定义TextView为例来向大家介绍如何自定义Android中的控件。 首先,我们来简单说一下Android中自定义控件的原理:创建一个类...
  • Android TextView加上阴影效果

    万次阅读 多人点赞 2014-10-11 16:02:29
    废话不多说 字体阴影需要四个相关参数: 1. android:shadowColor:阴影的颜色 2. android:shadowDx:水平方向上的偏移量 3. android:shadowDy:垂直方向上的偏移量 4. android:shadowRadius:阴影的范围
  • TextView设置行间距、行高,以及字间距

    万次阅读 多人点赞 2018-03-15 14:59:13
    设置TextView行间距、行高:Android系统中TextView有默认行间距,但是比较窄有的时候需要我们设置每行行间距。TextView为我们提供了相关设置属性android:lineSpacingExtra或android:lineSpacingMultiplier。在xml...
  • Android开发之TextView高级应用

    千次阅读 多人点赞 2014-10-10 19:36:12
    我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此。下面就和大家分享一下TextView的一些使用技巧。
  • Android中TextView扩展用法

    千次阅读 2015-04-19 12:28:39
    TextView  之前讲解Android布局的时候,就已经说明,所有Layout都是View的子类或者间接子类。而TextView也一样,是View的直接子类。它是一个文本显示控件,提供了基本的显示文本的功能,并且是大部分UI控件的...
  • TextView的跑马灯效果以及TextView的一些属性

    万次阅读 多人点赞 2016-09-02 19:29:40
    TextView应该是用的最广的控件了,要是这句话不对我直播吃翔,这几天的项目用到跑马灯,居然忘记怎么设置了,还要Google才能解决,看来虽然很基本的东西,但是用的少还是容易遗忘,所以我决定把它写下来加深点印象,方便以后...
  • android textview换行问题

    2015-08-31 08:31:10
    TextView tv1 = new TextView(mContext); TextView tv2 = new TextView(mContext); ImageView iv = new ImageView(mContext); tv1.setTextSize(22); tv2.setTextSize(22); tv1.setWidth(30); tv2....
  • TextView 的隐藏技能

    千次阅读 2016-08-19 15:36:50
    TextView 的隐藏技能前言字符串资源里变量替换Android开发中是拒绝硬编码的,我们需要把一些字符串放在xml中当作资源使用,假设有如下情况:你好A,欢迎使用我们的App。我们在程序中需要使用这个字符串,但是A是一个...
  • android textview 文字排版 换行

    千次下载 热门讨论 2020-07-26 23:31:26
    android textview 文字排版 换行
1 2 3 4 5 ... 20
收藏数 357,536
精华内容 143,014
关键字:

textview