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

    很多时候由于手机屏幕的显示,TextView单行没法显示完全内容。如下所示:


    当点击3个点的时候,文字就会展开:



    对于这个需求,可以使用一个LinearLayout,orientation是horizontal,有两个TextView,一个显示内容,一个显示...

    <?xml version="1.0" encoding="utf-8"?>
    <merge xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/root" >
    
        <TextView
            android:id="@+id/mainText"
            android:layout_width="wrap_content"
            android:textSize="25sp"
            android:textColor="#000000"
            android:maxLines="10"
            android:layout_height="wrap_content"
            android:gravity="center_vertical|left"
             />
        <TextView
            android:id="@+id/mainDots"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="25sp"
            android:textColor="#000000"
            android:gravity="center_vertical"
            android:text="..."
            android:linksClickable="true"
            android:visibility="gone"
            android:textAppearance="?android:attr/textAppearanceMedium"
           />
    
    </merge>

    在代码中,首先在在资源文件中声明这个view的属性:

     <declare-styleable name="ClickableTextView">
            <attr name="text" format="string" />
            <attr name="textStyle" format="string" />
            <attr name="textSize" format="dimension" />
            <attr name="textColor" format="color" />
            <attr name="maxLines" format="integer" min="0" />
            <attr name="textGravity" format="enum">
                <enum name="left" value="0" />
                <enum name="center" value="1" />
                <enum name="right" value="2" />
            </attr>
        </declare-styleable>

    显示在layout的时候可以这么写
      <com.example.clickabletextview.ClickableTextView  xmlns:am="http://schemas.android.com/apk/res/com.example.clickabletextview"
            android:id="@+id/textview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            am:text="aadsjklfsjflsdfjslkfsdfajfdsafnasjifnsdjiafnsifjnsdifjsndfsdjifnsdfjnsdsdjfsfdsfdsffjsdflksdf"
            am:textSize ="20sp"/>


    在ClickableTextVIew这个类里,我们先取到xml的属性:

    public ClickableTextView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		TypedArray a = context.obtainStyledAttributes(attrs,
    				R.styleable.ClickableTextView, 0, 0);
    		int n = a.getIndexCount();
    		for (int i = 0; i < n; i++) {
    			int attr = a.getIndex(i);
    			switch (attr) {
    			case R.styleable.ClickableTextView_textSize:
    				mTextSizePixel = a.getDimension(attr, DEFAULT_TEXT_SIZE);
    				break;
    			case R.styleable.ClickableTextView_textColor:
    				mTextColor = a.getColor(attr, DEFAULT_TEXT_COLOR);
    				break;
    			
    			case R.styleable.ClickableTextView_textStyle:
    				mTextStyle = a.getString(R.styleable.ClickableTextView_textStyle);
    				break;
    			case R.styleable.ClickableTextView_text:
    				defaultText = a.getString(R.styleable.ClickableTextView_text);
    				break;
    			}
    		}
    		a.recycle();
    		
    		init(context);
    	}


    然后把这些属性set给TextView,当赋值TextSize的时候,为了适配很多分辨率,我们要采用mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSizePixel)来赋值

    private void init(Context context) {
    		if(mRoot == null) {
    			mRoot = inflate(context, R.layout.customtext, this);
    		}
    		mRoot.setFocusable(true);
    		mRoot.setFocusableInTouchMode(true);
    		
    		mDots = (TextView) findViewById(R.id.mainDots);
    		mDots.setVisibility(View.GONE);
    		mDots.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSizePixel);
    		//mDots.setTextSize(mTextSize);
    		mDots.setTextColor(mTextColor);
    		mDots.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);	//
    		mDots.setOnClickListener(new View.OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				if (!mExpanded)
    					onDotsClicked();
    			}
    		});
    		
    		mText = (TextView) findViewById(R.id.mainText);
    		if (BOLDSTYLE.equals(mTextStyle)) {
    			mText.getPaint().setFakeBoldText(true);
    		}
    		mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSizePixel);
    		//mText.setTextSize(mTextSize);
    		mText.setTextColor(mTextColor);
    		
    	}


    在onSizeChange的时候,这个view已经得到宽度了,这时我们把文字放入textview中:

    	@Override
    	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    		super.onSizeChanged(w, h, oldw, oldh);
    		int width = w;
    		mTextWidth = width -3*getDotsWidth();
    		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mTextWidth, RelativeLayout.LayoutParams.WRAP_CONTENT);
    		mText.setSingleLine(true);
    		mText.setLayoutParams(params);
    		if(!TextUtils.isEmpty(defaultText)) {
    			setText(defaultText);
    		}
    	}
    
    	public void setWidth(int paddingLeft){
    		if(mIsSetWidth){
    			return;
    		}
    		mIsSetWidth = true;
    		this.mTextWidth = (mTextWidth-paddingLeft);
    		LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(mTextWidth, RelativeLayout.LayoutParams.WRAP_CONTENT);
    		mText.setSingleLine(true);
    		mText.setLayoutParams(params);
    	}
    	
    	private int getDotsWidth() {
    		TextPaint mPaint = mDots.getPaint();
    		return (int)mPaint.measureText(mDots.getText().toString());
    	}
    
    	public void setText(String text) {
    		if(mIsClicked){
    			return;
    		}
    		if(text == null) {
    			text = "";
    		}
    		mContent = text;
    		mExpanded = false;
    		mOriText = text;
    		mText.setText(mContent);
    		mText.measure(getMeasuredWidth(), getMeasuredHeight());
    		mDots.setVisibility(View.GONE);
    		String newText = getTruncText(mContent, mText);
    		if (newText.length() < mText.length()) {
    			mDots.setVisibility(View.VISIBLE);
    			mText.measure(getMeasuredWidth(), getMeasuredHeight());
    			newText = getTruncText(mContent, mText);
    			mText.setText(newText);
    		}
    	}<pre name="code" class="java"><span style="white-space:pre">	</span>private String getTruncText(String text, TextView view) {
    		final Paint textPaint = view.getPaint();
    		final int numChar = textPaint.breakText(text, true, mTextWidth, null);
    		return text.substring(0, numChar);
    	}

    
    



    这个原理是给TextView设置一个固定的宽度,然后让他加载文字,measure他,然后通过得到view.getPaint()得到这个view的绘制信息,然后可以得到这个TextView可以放多少个字符,得到之后跟原来的字符数对比,如果原来的字符多于可以放的下的字符,就显示...


    可以在http://download.csdn.net/detail/baidu_nod/7521021下载代码



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

    千次阅读 2018-08-02 10:17:38
    文本展示在Android开发中非常常见,大部分都是用TextView来实现,不过有些文本展示必须要手动调用Canvas来绘制,如果不了解绘制文本的原理很难把展示的文本对齐,这里就来记录一下文本绘制的各种技巧。 文本测量 ...
  • Android TextView字体设置

    千次阅读 2019-05-06 15:10:35
    字体资源代码要点 Typeface mtypeface=Typeface.createFromAsset(getAssets(),"huawencaiyunv.TTF"); mTextViewContent.setTypeface(mtypeface); 注意: 1、这里需要注意的是下载的字体是中文名字需要自己改成...
  • Android 查看更多 TextView实现

    千次阅读 2016-03-04 00:42:43
    在公司开发过程中,需要用到固定行数的展开查看更多的控件,在网上找了好久,都没有找到,于是花了半天时间实现了一个,在此做下记录,主要有几个关键的地方: private Layout makeTextLayout(String text) { ...
  • 怎么获得当前TextView中显示的内容

    千次阅读 2014-08-23 13:17:41
    Java代码  package com.test;    import android.app.Activity;  import android.os.Bundle;  import android.util.Log;  import android.view.View;  import android.widget....import a
  • TextView

    2018-01-11 09:03:36
    textStyle  1.在xml文件中使用android:textStyle=”bold” 可以将英文设置成粗体, 但是不...TextView tv = (TextView)findViewById(R.id.TextView01); TextPaint tp = tv.getPaint(); tp.setFakeBoldText(true);
  • 首先定义个LayoutParams,然后在设置margin,在把这个LayoutParams设置给控件,如下:LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup....
  • TextView 高级教程

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

    千次阅读 2019-06-04 11:32:48
    TextView属性 android:text 设置显示文本. android:textappearance 设置文字外观。如“?android:attr/textappearancelargeinverse”这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观...
  • 设置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的一些使用技巧。
1 2 3 4 5 ... 20
收藏数 357,912
精华内容 143,164
关键字:

textview