public class
TextView
extends View
implements ViewTreeObserver.OnPreDrawListener
java.lang.Object
? android.view. View
? android.widget.TextView
TextView類(lèi)繼承View類(lèi),實(shí)現(xiàn)了OnPreDrawListener接口,其直接子類(lèi)有:Button, CheckedTextView, Chronometer, DigitalClock, EditText, TextClock;非直接子類(lèi)有:AutoCompleteTextView, CheckBox, CompoundButton, ExtractEditText, MultiAutoCompleteTextView, RadioButton, Switch, ToggleButton。
TextView是Android中最常用的控件,主要承擔(dān)文本顯示的任務(wù),任何APP都不可避免的會(huì)用到它。同時(shí),TextView的屬性和方法在所有控件中也是算比較多的,我們沒(méi)必要也很難記住所有屬性和方法,在需要時(shí)查找API即可,這也是“帶你去看API”模塊設(shè)立的目的。
TextView常用屬性和方法參見(jiàn)下表:
http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/1-1.png" alt="這里寫(xiě)圖片描述" />
使用表中部分屬性展示一下運(yùn)行效果,API中還有一些不太常用的屬性和方法,讀者可以自行運(yùn)行測(cè)試其效果。下面結(jié)合一個(gè)小實(shí)例對(duì)上面的屬性進(jìn)行學(xué)習(xí),代碼如下:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="New TextNew TextNew TextNew TextNew TextNew TextNew TextNew TextNew Text"
android:textColor="#ff1911"
android:textSize="24sp"
android:singleLine="true"
android:gravity="center"
android:textStyle="bold"
android:drawableRight="@android:drawable/ic_lock_lock"
android:id="@+id/textView" />
這里設(shè)置了singleLine屬性,在文字很多的情況下會(huì)以省略號(hào)的形式顯示,設(shè)置了drawableRight屬性,會(huì)在控件最右邊顯示一個(gè)圖片,顯示效果如下圖:
http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/1-2.png" alt="這里寫(xiě)圖片描述" />
在設(shè)置單行模式,而文字內(nèi)容又特別多的情況下,除了上面的省略號(hào)顯示方式,還有沒(méi)有其他方式呢?生活中我們可以見(jiàn)到各式各樣的LED廣告顯示屏,它們是通過(guò)跑馬燈的方式顯示廣告,這種顯示方式一方面解決了長(zhǎng)信息展示的問(wèn)題,另一方面也更容易吸引路人的目光。Android中可不可以實(shí)現(xiàn)呢?下面通過(guò)一個(gè)實(shí)例進(jìn)行研究,代碼如下:
<TextView
android:id="@+id/tv_marquee"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/black"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="這是跑馬燈的效果這是跑馬燈的效果這是跑馬燈的效果這是跑馬燈的效果">
</TextView>
這里涉及到了幾個(gè)上面表格中沒(méi)有的屬性,進(jìn)行介紹: ? ellipsize屬性:主要解決文本長(zhǎng)度長(zhǎng)于控件寬度的問(wèn)題,主要有幾個(gè)值:
http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/1-3.png" alt="這里寫(xiě)圖片描述" />
如果你覺(jué)得這還不夠炫,可以添加代碼讓字體閃爍起來(lái),MainActivity添加如下代碼:
public class MainActivity extends Activity {
private int temp = 0;
private TextView tv_marquee;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_marquee = (TextView)findViewById(R.id.tv_marquee);
spark();
}
public void spark() {
Timer timer = new Timer();
TimerTask timerTask = new TimerTask() {
public void run() {
runOnUiThread(new Runnable() {//UI線程上運(yùn)行
public void run() {
if (temp == 0) {
temp = 1;
tv_marquee.setTextColor(Color.YELLOW);
} else {
if (temp == 1) {
temp = 2;
tv_marquee.setTextColor(Color.TRANSPARENT);
} else if (temp == 2){
temp = 3;
tv_marquee.setTextColor(Color.GREEN);
} else {
temp = 0;
tv_marquee.setTextColor(Color.RED);
}
}
}
});
}
};
timer.schedule(timerTask, 1, 100);
}
}
這里用到了Timer和TimerTask兩個(gè)計(jì)時(shí)類(lèi),其中TimerTask是一個(gè)抽象類(lèi),有個(gè)抽象的run方法需要覆寫(xiě)。創(chuàng)建一個(gè)Timer對(duì)象,并調(diào)用Timer類(lèi)的schedule方法可以實(shí)現(xiàn)間隔操作的效果。schedule方法有三個(gè)參數(shù): 第一個(gè)參數(shù)是TimerTask對(duì)象,第二個(gè)參數(shù)是執(zhí)行延遲時(shí)間,第三個(gè)參數(shù)為間隔周期。 同時(shí),這里定義了一個(gè)臨時(shí)變量,通過(guò)臨時(shí)變量的循環(huán)改變動(dòng)態(tài)改變字體的顏色,間接實(shí)現(xiàn)了字體閃爍的效果。 顯示效果如下圖:
http://wiki.jikexueyuan.com/project/twenty-four-Scriptures/images/1-4.png" alt="這里寫(xiě)圖片描述" />