一:创建一个类继承TextView类
public class RollTextView extends TextView {
public RollTextView(Context context) {
super(context);
}
public RollTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RollTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public RollTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
/**
* 实现TextView内容的滚动其实就是使其默认是'有焦点'的,这里的有焦点并不是真的有焦点,
* 仅仅是使其isFocused()默认返回true。
* 不管有没有获取到焦点,将该方法直接返回true,欺骗Android我获取到了焦点,不一定。
* @return:true为获取到焦点
*/
@Override
public boolean isFocused() {
// return super.isFocused();
return true;
}
}
二:在布局文件中使用自定义的可以滚动的TextView
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<!--
对于ellipsize的几个属性:
start:前面的用...省略;
end:后面的用...省略;
middle:中间的用...省略
none:默认情况,相当于没用使用ellipsize属性
marquee:不省略任何内容,类似一个大帐篷,遮罩住整个内容
focusableInTouchMode:允许控件获取焦点,但是前提也是focusable属性为true;
当给focusableInTouchMode属性设为true时,第一次点击控件是使其获取焦点,以后
的点击才会执行控件的onClick事件。
-->
<EditText
android:id="@+id/et_tests"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/et_hint_test1"
/>
<Button
android:id="@+id/bt_rollTextView_button"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:singleLine="true"
android:onClick="onClick"
android:focusableInTouchMode="true"
android:text="@string/text_rolltextview_button"/>
<EditText
android:id="@+id/et_test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!--自定义的可以滚动的TextView-->
<com.mycompany.mysimple.RollTextView
android:id="@+id/tv_rollTextView_show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="true"
android:ellipsize="marquee"
android:text="@string/tv_rollTextView_text"/>
</LinearLayout>
三:
public class RollTextViewActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rolltextview);
}
public void onClick(View view){
Toast.makeText(this,"按钮被点击了",Toast.LENGTH_SHORT).show();
System.out.println("按钮被点击了");
}
}