布局:
<span style="font-size:18px;"><com.mydemo.view.FocusableTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="10dp"
android:text="www.baidu.com"
android:textColor="#ff0000"
android:textSize="20sp" /></span>
代码逻辑:
<span style="font-size:18px;">public class FocusableTextView extends TextView {
public FocusableTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
System.out.println("3个参数的构造方法");
init();
}
public FocusableTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
System.out.println("2个参数的构造方法");
}
/**
* 初始化textView
*/
// <!--
// android:ellipsize="marquee" 跑马灯
// android:focusable="true" //物理键获取到焦点
// android:focusableInTouchMode="true" //手指触摸获取到焦点
// android:singleLine="true" 单行展示
// android:marqueeRepeatLimit="marquee_forever" 跑马灯循环
//-->
private void init() {
setEllipsize(TruncateAt.MARQUEE);
setFocusable(true);
setFocusableInTouchMode(true);
setSingleLine();
setMarqueeRepeatLimit(-1);
}
public FocusableTextView(Context context) {
super(context);
init();
System.out.println("1个参数的构造方法");
}
// <!--
// android:ellipsize="marquee" 跑马灯
// android:focusable="true" //物理键获取到焦点
// android:focusableInTouchMode="true" //手指触摸获取到焦点
// android:singleLine="true" 单行展示
// android:marqueeRepeatLimit="marquee_forever" 跑马灯循环 -->
/**
* 让两个控件同时获取到焦点
*/
@Override
@ExportedProperty(category = "focus")
public boolean isFocused() {
// TODO Auto-generated method stub
return true;
}
/**
* 不管谁获取到焦点。那么都开启跑马灯
*/
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
if(focused){
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
}
/**
* 窗体获取到焦点
*/
@Override
public void onWindowFocusChanged(boolean hasWindowFocus) {
if(hasWindowFocus){
super.onWindowFocusChanged(hasWindowFocus);
}
}
}</span>