安卓常用控件--textView 的特性和演变

时间:2021-09-09 22:42:12

安卓基础

1. textview 的跑马灯效果

这里写代码片<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/tv_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_margin="30dp"
android:gravity="center_horizontal"
android:text="显示跑马灯的效果" />

<TextView
android:id="@+id/tv_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="30dp"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee" //跑马灯显示
android:focusable="true" //获得焦点
android:singleLine="true" //单行显示,
android:focusableInTouchMode="true"
android:text="显示跑马灯的效果显示跑马灯的效果显示跑马灯的效果显示跑马灯的效果显示跑马灯的效果显示跑马灯的效果aydehua" />

<!--
android:layout_width="wrap_content"
android:marqueeRepeatLimit="marquee_forever"//表示滚动回数,这里这么设置,表示一直滚动
android:ellipsize="start" 省略号在开头
android:ellipsize="middle" 省略号在中间
android:ellipsize="end" 省略号在结尾
android:ellipsize="marquee" 跑马灯显示
android:focusable="true" //要显示该跑马灯,view必须要获得焦点,只有在取得焦点的情况下跑马灯才会显示

或者在程序中可通过setEillpsize显式设置。

-->

</LinearLayout>

总而言之, 要现实跑马灯效果,
1. 就必须view 先获得焦点. 在xml 布局中,
android:focusable=”true” 获得焦点, 或者在代码中通过 setEillpsize显式设置一样获得焦点..

有朋友在gridview 中只用textview 的走马灯的效果,无法实现,并且 gridview 也不可点击
查看源码知道: gridview 来自于ViewGroup
那么textView 和gridview 组合的的话, 获取焦点, 点击时间涉及到事件分发机制和消费机制了.
详细缘由, 我也没做研究…

自定义一个跑马灯效果的TextView 就可以解决这个问题

public class MyGridViewTextView extends TextView 
{


public MyGridViewTextView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}

public MyGridViewTextView(Context context, AttributeSet attrs)
{
super(context, attrs);
}

@Override
public boolean isFocused()
{
return true; //直接返回true , 就可以了
}

}
这样的话, 使用MyGridViewTextView并且去掉android:focusable="true" 即可。