您的位置:首页 > 其它

自定义控件--自定义内容可以滚动的TextView

2015-11-10 12:59 357 查看

一:创建一个类继承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("按钮被点击了");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: