[mobilesafe] 06_单行显示,自定义TextView对象

Android 4.0

组件上,文字单行显示时,有的文字显示不出来,可聚焦组件

android:theme="@android:style/Theme.Light.NoTitleBar"  没有标题,背景白色
当一行数据过多,如何显示出来剩余的文字?
1)可以触摸获取焦点的组件

android:singleLine="true"  //只显示一行
android:ellipsize="end" 
none:多出来的部分不显示
start:显示后面,前面显示不出,用...
middle:显示前面和后面,中间用...
end:显示前面,后面显示不出用...
marquee:显示前面一部分,focusableInTouchMode="true", 指定该属性,当获取焦点,看不到的字会自动出来,其他的属性不行。
android:focusableInTouchMode="true"

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:ellipsize="none"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="我是none,只显示一行,超出部分怎么显示?只显示一行,超出部分怎么显示?" />
    <Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:ellipsize="start"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="我是start,只显示一行,超出部分怎么显示?只显示一行,超出部分怎么显示?" />
    <Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:ellipsize="middle"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="我是middle,只显示一行,超出部分怎么显示?只显示一行,超出部分怎么显示?" />
    <Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:ellipsize="end"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="我是end,只显示一行,超出部分怎么显示?只显示一行,超出部分怎么显示?" />
    <Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:ellipsize="marquee"
        android:focusableInTouchMode="true"
        android:singleLine="true"
        android:text="我是marquee,只显示一行,超出部分怎么显示?只显示一行,超出部分怎么显示?" />
</LinearLayout>

结果:

源码:
2)触摸获取不到焦点的——自定义TextView对象
对button,这种,可以触摸获取焦点的,配置android:ellipsize="marquee" android:singleLine="true"  ,就可以将看不到的文字显示出来,而TextView,天生不能获取焦点,那只能重写里面的方法,isActivated(),让其返回true,那么就可以被获取焦点了。
View里面的方法
@ViewDebug.ExportedProperty
public boolean isActivated() {
    return (mPrivateFlags & PFLAG_ACTIVATED) != 0;
}

自定义
TextView对象
//1、一个类继承TextView,重写里面的
isActivated()方法
//2、自定义类在xml中配置时,不能和系统的组件一样,要将包名写全
<cn.zengfansheng.mobilesafe.ui.FocusedTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="marquee"
        android:singleLine="true"
        android:text="我是您的手机卫士,我保护您的安全!我是您的手机卫士,我保护您的安全!" />  

自定义TextView对象
package cn.zengfansheng.mobilesafe.ui;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
 
public class FocusedTextView extends TextView {
    public FocusedTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    public FocusedTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    } 
    public FocusedTextView(Context context) {
        super(context);
    }
    @Override
    public boolean isFocused() {
        return true;
    }
}