?Android應(yīng)用開(kāi)發(fā)學(xué)習(xí)筆記——目錄索引
上一章Android應(yīng)用開(kāi)發(fā)(5)文本視圖(TextView)介紹了文本視圖(TextView)設(shè)置文本內(nèi)容、設(shè)置文本大小、設(shè)置文本顯示顏色。
TextView是最基礎(chǔ)的文本顯示控件,常用的基本屬性和設(shè)置方法有:
XML中的屬性 | TextView類(lèi)的設(shè)置方法 | 說(shuō)明 |
android:text | setText | 設(shè)置文本內(nèi)容 |
android:textColor | setTextColor | 設(shè)置文本顏色 |
android:textSize | setTextSize | 設(shè)置文本大小 |
android:gravity | setGravity | 設(shè)置文本的對(duì)齊方式 |
本章介紹TextView的一些有趣用法:響應(yīng)點(diǎn)擊、省略顯示,跑馬燈滾動(dòng)顯示、多行垂直滾動(dòng)顯示
本章用到的TextView屬性與方法的介紹:
XML中的屬性 | TextView類(lèi)的設(shè)置方法 | 說(shuō)明 |
android:textAppearance | setTextAppearance | 設(shè)置文本風(fēng)格 |
android:focusable | setFocusable | 設(shè)置是否獲得焦點(diǎn) |
android:focusableInTouchMode | setFocusableInTouchMode | 設(shè)置在觸摸是是否獲得焦點(diǎn) |
android:singleLine | setSingleLine | 設(shè)置文本內(nèi)容是否為單行 |
android:lines | setLines | 設(shè)置文本行數(shù) |
android:maxLines | setMaxLines | 設(shè)置文本最大行數(shù) |
android:ellipsize | setEllipsize | 設(shè)置文本內(nèi)容超出范圍后的省略方式,取值下面詳細(xì)介紹 |
android:scrollbars | - | 設(shè)置滾動(dòng)條的方向,取值vertical/horizontal,如果不指定將不顯示滾動(dòng)條 |
- | setMovementMethod | 設(shè)置文本移動(dòng)的方式,可設(shè)置ScrollingMovementMethod,如果不設(shè)置文本無(wú)法拉動(dòng) |
省略方式ellipsize取值介紹:
XML中的屬性 | TextUtils.TruncateAt類(lèi)中取值 | 說(shuō)明 |
android:ellipsize="start" | START | 省略號(hào)在開(kāi)頭 |
android:ellipsize="middle" | MIDDLE | 省略號(hào)在中間 |
android:ellipsize="end" | END | 省略號(hào)在末尾 |
android:ellipsize="marquee" | MARQUEE | 跑馬燈 |
一、TextView響應(yīng)點(diǎn)擊
TextView繼承View,有setOnClickListener()
方法,所以可以通過(guò)實(shí)現(xiàn)onClick()方法來(lái)響應(yīng)用戶(hù)點(diǎn)擊的功能。
具體代碼如下:
public class MainActivity extends AppCompatActivity {
private final static String TAG = "lzl-test";
private TextView mTextViewSetOnClickListener;
private Boolean isRedColor = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 測(cè)試TextView點(diǎn)擊效果 */
mTextViewSetOnClickListener = (TextView) findViewById(R.id.textViewSetOnClickListener);
mTextViewSetOnClickListener.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.textViewSetOnClickListener) {
isRedColor = !isRedColor;
if (isRedColor) {
mTextViewSetOnClickListener.setTextColor(Color.RED);
} else {
mTextViewSetOnClickListener.setTextColor(Color.BLUE);
}
}
}
});
}
}
二、省略顯示
當(dāng)一行內(nèi)容太多,可以在XML中設(shè)置android:ellipsize省略顯示
//省略文本開(kāi)始部分,省略號(hào)在開(kāi)頭
android:ellipsize="start"
//省略文本中間部分,省略號(hào)在中間
android:ellipsize="middle"
//省略文本結(jié)尾部分,省略號(hào)在尾部
android:ellipsize="end"
或者在java代碼中調(diào)用文本視圖的setTextColor()方法設(shè)置
public class MainActivity extends AppCompatActivity {
private final static String TAG = "lzl-test";
private TextView mTextViewEllipsize;
private int mCount = 0;
private TextView mTextViewSetOnClickListener;
private int onClickCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 測(cè)試TextView省略顯示,點(diǎn)擊改變省略方式 */
mTextViewEllipsize = (TextView) findViewById(R.id.textViewEllipsize);
mTextViewEllipsize.setSingleLine(true);
mTextViewEllipsize.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.textViewEllipsize) {
mCount++;
if (mCount >= 4)
mCount = 1;
switch (mCount) {
case 1:
mTextViewEllipsize.setEllipsize(TextUtils.TruncateAt.START);
mTextViewEllipsize.setTextColor(Color.RED);
break;
case 2:
mTextViewEllipsize.setEllipsize(TextUtils.TruncateAt.MIDDLE);
mTextViewEllipsize.setTextColor(Color.GREEN);
break;
case 3:
mTextViewEllipsize.setEllipsize(TextUtils.TruncateAt.END);
mTextViewEllipsize.setTextColor(Color.BLUE);
break;
default:
break;
}
}
}
});
}
}
三、跑馬燈滾動(dòng)顯示
當(dāng)一行內(nèi)容太多,導(dǎo)致無(wú)法全部顯示,也不想分行顯示,可以讓文本從左向右已跑馬燈方式滾動(dòng)顯示。
Layout.xml文件中配置
<TextView
android:id="@+id/textViewMarquee"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:text="來(lái)自中央氣象臺(tái)的最新預(yù)報(bào),預(yù)示著“杜蘇芮”的強(qiáng)大“威力”——7月29日至8月1日,北京、天津、河北、山東西部、河南北部、山西東部部分地區(qū)將有大暴雨,北京西部山前和南部、河北中南部等地局地有特大暴雨。氣象專(zhuān)家特別提醒,本輪強(qiáng)降雨極端性強(qiáng),致災(zāi)風(fēng)險(xiǎn)高。"
android:textSize="18sp"
Java 代碼中設(shè)置
public class MainActivity extends AppCompatActivity {
private final static String TAG = "lzl-test";
private TextView mTextViewMarquee;
private boolean isPaused = false;
private TextView mTextViewSetOnClickListener;
private int onClickCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 測(cè)試TextView跑馬燈滾動(dòng)效果 */
mTextViewMarquee = (TextView) findViewById(R.id.textViewMarquee);
mTextViewMarquee.setTextColor(Color.RED);
mTextViewMarquee.setEllipsize(TextUtils.TruncateAt.MARQUEE);
mTextViewMarquee.requestFocus(); // 強(qiáng)制獲得焦點(diǎn),讓跑馬燈滾起來(lái)
mTextViewMarquee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.textViewMarquee) {
isPaused = !isPaused;
if (isPaused) {
mTextViewMarquee.setFocusable(false); // 不允許獲得焦點(diǎn)
mTextViewMarquee.setFocusableInTouchMode(false); // 不允許在觸摸時(shí)獲得焦點(diǎn)
} else {
mTextViewMarquee.setFocusable(true); // 允許獲得焦點(diǎn)
mTextViewMarquee.setFocusableInTouchMode(true); // 允許在觸摸時(shí)獲得焦點(diǎn)
mTextViewMarquee.requestFocus(); // 強(qiáng)制獲得焦點(diǎn),讓跑馬燈滾起來(lái)
}
}
}
});
}
}
四、多行垂直滾動(dòng)顯示
當(dāng)行數(shù)固定,一直新增文本更多文本,新的文本加入到窗口尾部,窗口可以垂直滾動(dòng)顯示。
Layout.xml文件中配置
<TextView
android:id="@+id/textViewScrollable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:lines="8"
android:maxLines="10"
android:text=""
android:textSize="18sp"
android:gravity="left|bottom"
android:scrollbars="vertical"
Java 代碼中設(shè)置
public class MainActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener {
private final static String TAG = "lzl-test";
private TextView mTextViewScrollable;
private int mAddTextCount = 0;
private String[] mStrings = {
"黃藥師:能不能請(qǐng)你喝碗酒?",
"盲劍客:我今天只想喝水。",
"黃藥師:我以前好象見(jiàn)過(guò)你?",
"盲劍客:何止見(jiàn)過(guò),你曾經(jīng)是我最好的朋友,但是現(xiàn)在已經(jīng)不是啦。你來(lái)這兒干什么?",
"黃藥師:前不久,我遇到一個(gè)人,她送給我一壇酒,她說(shuō)叫“醉生夢(mèng)死”,喝了之后,不管以前干過(guò)什么也會(huì)全忘了。我很奇怪,為什么會(huì)有這樣的酒,我喝了之后發(fā)覺(jué)真的很有效,不知你有沒(méi)有興趣試試?",
"盲劍客:你知道喝酒跟喝水的分別嗎?酒,越喝越暖,水會(huì)越喝越寒。",
"黃藥師:我們還會(huì)再見(jiàn)嗎?",
"盲劍客:不會(huì)!",
"盲劍客(獨(dú)白):我曾經(jīng)發(fā)過(guò)誓,如果再讓我碰到這個(gè)人,我一定會(huì)殺了他。但是我沒(méi)有這樣做, 因?yàn)槲乙?jiàn)他的時(shí)候,眼睛已經(jīng)看不見(jiàn)東西了。",
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 測(cè)試TextView垂直滾動(dòng)顯示效果,點(diǎn)擊添加文本,長(zhǎng)按刪除 */
mTextViewScrollable = (TextView) findViewById(R.id.textViewScrollable);
mTextViewScrollable.setLines(8);
mTextViewScrollable.setMaxLines(10);
mTextViewScrollable.setBackgroundColor(Color.GRAY);
// 設(shè)置內(nèi)部文字的對(duì)齊方式
mTextViewScrollable.setGravity(Gravity.LEFT | Gravity.BOTTOM);
// 設(shè)置內(nèi)部文本的移動(dòng)方式為滾動(dòng)形式
mTextViewScrollable.setMovementMethod(new ScrollingMovementMethod());
mTextViewScrollable.setOnClickListener(this);
mTextViewScrollable.setOnLongClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.textViewScrollable ) {
Log.d(TAG, "mStrings.length:" + mStrings.length);
String string = String.format("%s\n%s %s", mTextViewScrollable.getText().toString(), getNowTimeMs(), mStrings[mAddTextCount]);
mTextViewScrollable.setText(string);
mAddTextCount++;
if (mAddTextCount >= mStrings.length) {
mAddTextCount = 0;
}
}
}
@Override
public boolean onLongClick(View v) {
if (v.getId() == R.id.textViewScrollable) {
mTextViewScrollable.setText("");
}
return true;
}
private String getNowTimeMs() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss:SSS");
return simpleDateFormat.format(new Date());
}
}
java 代碼使用R.drawable.
TextView textView = (TextView) findViewById(R.id.textView);
textView.setBackgroundResource(R.drawable.ic_launcher_background);
四、測(cè)試程序
?完整源碼
百度網(wǎng)盤(pán)鏈接:百度網(wǎng)盤(pán) 請(qǐng)輸入提取碼 提取碼:test
TextViewTest目錄textviewtest2 module
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-633196.html
點(diǎn)此查看Android應(yīng)用開(kāi)發(fā)學(xué)習(xí)筆記的完整目錄文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-633196.html
到了這里,關(guān)于Android應(yīng)用開(kāi)發(fā)(6)TextView進(jìn)階用法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!