上次看到老罗的视频教程,很有收获,今天将学到的东西总结一下。
一)响应TextView对应位置的点击事件(如123456中,对2345响应单击事件,对1,6点击没有效果)
1) 首先在xml文件中定义一个TextView。
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:autoLink="all"
android:textColor="@color/red"
android:textIsSelectable="false" />
2)在activity中,我们定义一个TextView,通过findViewById函数,获取对应的textView1控件。
textView1=(TextView)findViewById(R.id.textview1);
view.setOnClickListener()函数只能对这个控件整体进行单机事件的监听,要达到对TextView中某段文字的单击事件的监听如下:
String str1="跳转到activity1";
SpannableString spanStr=new SpannableString(str1);//使用SpannableString
spanStr.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
Intent intent=new Intent(MainActivity.this,Activity1.class);
startActivity(intent);
}
}, 0, str1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//new ClickableSpan实现对这个字符串的点击事件,第2.3个参数是设置开始字符和结束字符。
textView1.setText(str1);
二)传统的TextView只有在获得焦点的时候才会出现跑马灯效果,第二个想实现的就是在TextView没有获得焦点的时候也能实现跑马灯效果。当然网上的例子一大堆,呵呵。
要实现这个功能,首先就要自定义控件继承自TextView,我命名为MarqueenText,然后重些isFocus和onFocusChanged函数。代码如下
@Override
public boolean isFocused() {
// TODO Auto-generated method stub
return true;//返回值改成true
}
@Override
protected void onFocusChanged(boolean focused, int direction,
Rect previouslyFocusedRect) {
// TODO Auto-generated method stub
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}//加上这个方法的作用是在TextView控件获得焦点和失去焦点的时候对跑马灯没有影响
然后在xml文件中,引用自定义的控件。如下代码
<com.yhj.mytextview1.MarqueenText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:id="@+id/textview5"
android:singleLine="true"
android:textIsSelectable="false"
android:layout_marginTop="20dp"/>
引用自定义的控件就是包名加自定义控件的类名:com.yhj.mytextview1.MarqueenText。就这样就能达到控件没有获得焦点也能达到跑马灯的效果。