① android的textview怎樣設置
設置Android中TextView顯示的值有兩種方式:
在xml中設置 android:text="TextView示例"。
在java代碼中 TextView textView = (TextView) findViewById(R.id.textView); textView.setText("顯示TextView");這樣就可以動態設置文本了。
② android textview怎樣實現文字跑馬燈效果
Android自帶的跑馬燈效果不太好控制,不能控制速度,不能即時停止和啟動,而且還受焦點的影響蛋疼不已。由於項目需求需要用的可控制性高的跑馬燈效果,所以自己寫了一個自定義的TextView android:ellipsize="marquee" android:singleLine="true" 這兩個屬性也要加上 public class MarqueeText extends TextView implements Runnable { private int currentScrollX;// 當前滾動的位置 private boolean isStop = false; private int textWidth; private boolean isMeasure = false; public MarqueeText(Context context) { super(context); // TODO Auto-generated constructor stub } public MarqueeText(Context context, AttributeSet attrs) { super(context, attrs); } public MarqueeText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); if (!isMeasure) {// 文字寬度只需獲取一次就可以了 getTextWidth(); isMeasure = true; } } /** * 獲取文字寬度 */ private void getTextWidth() { Paint paint = this.getPaint(); String str = this.getText().toString(); textWidth = (int) paint.measureText(str); } @Override public void run() { currentScrollX -= 2;// 滾動速度 scrollTo(currentScrollX, 0); if (isStop) { return; } if (getScrollX() <= -(this.getWidth())) { scrollTo(textWidth, 0); currentScrollX = textWidth; // return; } postDelayed(this, 5); } // 開始滾動 public void startScroll() { isStop = false; this.removeCallbacks(this); post(this); } // 停止滾動 public void stopScroll() { isStop = true; } // 從頭開始滾動 public void startFor0() { currentScrollX = 0; startScroll(); } }布局文件: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="start" android:text="走起" /> <Button android:id="@+id/stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="stop" android:text="停止" /> <Button android:id="@+id/startfor0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="startFor0" android:text="從頭開始" /> <simtice.demo.marqueetext.MarqueeText android:id="@+id/test" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#339320" android:ellipsize="marquee" android:singleLine="true" android:text="這才是真正的文字跑馬燈效果這才是真正的字跑馬燈效果這才是真正的" android:textColor="#000000" android:textSize="20dp" > </simtice.demo.marqueetext.MarqueeText></LinearLayout>MainActivitypublic class MainActivity extends Activity { private MarqueeText test; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); test = (MarqueeText) this.findViewById(R.id.test); } public void start(View v) { test.startScroll(); } public void stop(View v) { test.stopScroll(); } public void startFor0(View v){ test.startFor0(); }}
③ 關於Android TextView
android系統的文本視圖的意思。
TextView是android裡面用的最多的控制項,TextView類似一般UI中的Label,TextBlock等控制項,只是為了單純的顯示一行或多行文本。TextView作為android開發中最簡單也最常用的控制項,作為初學者,需要熟知其屬性並熟練掌握。
android:cursorVisible設定游標為顯示/隱藏,默認顯示。
android:digits設置允許輸入哪些字元。如「1234567890.+-*/% ()」
android:drawableBottom在text的下方輸出一個drawable,如圖片。如果指定一個顏色的話會text的背景設為該顏色,並且同時和background使用時覆蓋後者。
android:drawableLeft在text的左邊輸出一個drawable,如圖片。
android:drawablePadding設置text與drawable(圖片)的間隔,與drawableLeft、 drawableRight、drawableTop、drawableBottom一起使用,可設置為負數,單獨使用沒有效果。
android:drawableRight在text的右邊輸出一個drawable。
android:drawableTop在text的正上方輸出一個drawable。
android:editable設置是否可編輯。
android:editorExtras設置文本的額外的輸入數據。
android:ellipsize設置當文字過長時,該控制項該如何顯示。有如下值設置:」start」—-省略號顯示在開頭;」end」 ——省略號顯示在結尾;」middle」—-省略號顯示在中間;」marquee」 ——以跑馬燈的方式顯示(動畫橫向移動)
android:freezesText設置保存文本的內容以及游標的位置。
android:gravity設置文本位置,如設置成「center」,文本將居中顯示。
android:hintText為空時顯示的文字提示信息,可通過textColorHint設置提示信息的顏色。此屬性在 EditView中使用,但是這里也可以用。
android:imeOptions附加功能,設置右下角IME動作與編輯框相關的動作,如actionDone右下角將顯示一個「完成」,而不設置默認是一個回車符號。這個在EditView中再詳細說明,此處無用。
android:imeActionId設置IME動作ID。
android:imeActionLabel設置IME動作標簽。
android:includeFontPadding設置文本是否包含頂部和底部額外空白,默認為true。
android:inputMethod為文本指定輸入法,需要完全限定名(完整的包名)。
android:inputType設置文本的類型,用於幫助輸入法顯示合適的鍵盤類型。在EditView中再詳細說明,這里無效果。
android:linksClickable設置鏈接是否點擊連接,即使設置了autoLink。
android:marqueeRepeatLimit在ellipsize指定marquee的情況下,設置重復滾動的次數,當設置為 marquee_forever時表示無限次。
android:ems設置TextView的寬度為N個字元的寬度。這里測試為一個漢字字元寬度
android:maxEms設置TextView的寬度為最長為N個字元的寬度。與ems同時使用時覆蓋ems選項。
android:minEms設置TextView的寬度為最短為N個字元的寬度。與ems同時使用時覆蓋ems選項。
android:maxLength限制顯示的文本長度,超出部分不顯示。
android:lines設置文本的行數,設置兩行就顯示兩行,即使第二行沒有數據。
android:maxLines設置文本的最大顯示行數,與width或者layout_width結合使用,超出部分自動換行,超出行數將不顯示。
android:minLines設置文本的最小行數,與lines類似。
android:lineSpacingExtra設置行間距。
android:lineSpacingMultiplier設置行間距的倍數。如」1.2」
android:numeric如果被設置,該TextView有一個數字輸入法。此處無用,設置後唯一效果是TextView有點擊效果,此屬性在EdtiView將詳細說明。
android:password以小點」.」顯示文本
android:phoneNumber設置為電話號碼的輸入方式。
android:privateImeOptions設置輸入法選項,此處無用,在EditText將進一步討論。
android:scrollHorizontally設置文本超出TextView的寬度的情況下,是否出現橫拉條。
android:selectAllOnFocus如果文本是可選擇的,讓他獲取焦點而不是將游標移動為文本的開始位置或者末尾位置。 TextView中設置後無效果。
android:shadowColor指定文本陰影的顏色,需要與shadowRadius一起使用。
android:shadowDx設置陰影橫向坐標開始位置。
android:shadowDy設置陰影縱向坐標開始位置。
android:shadowRadius設置陰影的半徑。設置為0.1就變成字體的顏色了,一般設置為3.0的效果比較好。
android:singleLine設置單行顯示。如果和layout_width一起使用,當文本不能全部顯示時,後面用「…」來表示。
android:singleLine="true" android:layout_width="20dp"將只顯示「t…」。如果不設置singleLine或者設置為false,文本將自動換行
android:text設置顯示文本.
android:textAppearance設置文字外觀。如 「?android:attr/textAppearanceLargeInverse」這里引用的是系統自帶的一個外觀,?表示系統是否有這種外觀,否則使用默認的外觀。可設置的值如下:textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse
android:textColor設置文本顏色
android:textColorHighlight被選中文字的底色,默認為藍色
android:textColorHint設置提示信息文字的顏色,默認為灰色。與hint一起使用。
android:textColorLink文字鏈接的顏色.
android:textScaleX設置文字之間間隔,默認為1.0f。
android:textSize設置文字大小,推薦度量單位」sp」,如」15sp」
android:textStyle設置字形[bold(粗體) 0, italic(斜體) 1, bolditalic(又粗又斜) 2] 可以設置一個或多個,用「|」隔開
android:typeface設置文本字體,必須是以下常量值之一:normal 0, sans 1, serif 2,
monospace(等寬字體) 3]
android:height設置文本區域的高度,支持度量單位:px(像素)/dp/sp/in/mm(毫米)
android:maxHeight設置文本區域的最大高度
android:minHeight設置文本區域的最小高度
android:width設置文本區域的寬度,支持度量單位:px(像素)/dp/sp/in/mm(毫米),與layout_width 的區別看這里
android:maxWidth設置文本區域的最大寬度
android:minWidth設置文本區域的最小寬度
④ android 如何使得textView字體熒光
你得有這樣的字型檔ttf,才可以設置.如果你的字體,只是死的或者很少,可以讓美工或者自己PS,做成熒光字效果,做成圖片格式
⑤ android的TextView怎麼做高亮閃爍效果
要給TextView加上效果,方式主要有幾種:第一種,自動應用效果,使用android:autolink屬性,如:Java代碼android:id="@+id/text1"android:layout_width="match_parent"android:layout_height="match_parent"android:autoLink="all"android:text="@string/link_text_auto"/>第二種,在文本中使用標簽,如:Java代碼text2:Thisissomeothertext,withalinkspecifiedviaantag.Usea\"tel:\"URLtodialaphonenumber第三種,和第二種其實是一樣的,只不過將文本改在JAVA代碼中,如:Java代碼TextViewt3=(TextView)findViewById(R.id.text3);t3.setText(Html.fromHtml("text3:Textwitha"+"link"+"."));t3.setMovementMethod(LinkMovementMethod.getInstance());第四種,前面三種可以說都是自動的,而第四種就是純「手工」的了。通過創建SpanableString字元串,並在之上創建一個或多個Span來實現豐富的效果。例子如下:Java代碼SpannableStringss=newSpannableString("text4:Clickheretodialthephone.");ss.setSpan(newStyleSpan(Typeface.BOLD),0,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);ss.setSpan(newURLSpan("tel:4155551212"),13,17,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);TextViewt4=(TextView)findViewById(R.id.text4);t4.setText(ss);t4.setMovementMethod(LinkMovementMethod.getInstance());完整的代碼見ApiDemo吧,下面我提幾點需要注意的:.setMovementMethod,此方法在需要響應用戶事件時使用,如點擊一個電話號碼就跳轉到撥號頁面。如果不執行這個方法是不會響應事件的,即便文本看著已經是下劃線藍色字了。.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,這是在setSpan時需要指定的flag,它的意義我試了很久也沒試出來,睡個覺,今天早上才突然有點想法,試之,果然。它是用來標識在Span范圍內的文本前後輸入新的字元時是否把它們也應用這個效果。分別有Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括)、Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前麵包括,後面不包括)、Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,後麵包括)、Spanned.SPAN_INCLUSIVE_INCLUSIVE(前後都包括)在Android中,TextView是我們最常用的用來顯示文本的控制項。一般情況下,TextView中的文本都是一個樣式。那麼如何對於TextView中各個部分的文本來設置字體,大小,顏色,樣式,以及超級鏈接等屬性呢?下面我們通過SpannableString的具體實例操作來演示一下。res-layout-main.xml:Java代碼android:layout_height="wrap_content"android:layout_width="wrap_content"android:orientation="horizontal">android:id="@+id/myTextView"android:layout_width="fill_parent"android:layout_height="wrap_content"/>res-color-color.xmlres-color-linkcolor.xml:Java代碼android:color="#ffffff00"/>android:color="#ff00ffff"/>TextViewLinkActivity:Java代碼importjava.io.IOException;importorg.xmlpull.v1.XmlPullParserException;importandroid.app.Activity;importandroid.content.res.ColorStateList;importandroid.content.res.XmlResourceParser;importandroid.graphics.Bitmap;importandroid.graphics.BitmapFactory;importandroid.graphics.Color;importandroid.graphics.drawable.Drawable;importandroid.os.Bundle;importandroid.text.SpannableString;importandroid.text.Spanned;importandroid.text.method.LinkMovementMethod;importandroid.text.style.AbsoluteSizeSpan;importandroid.text.style.BackgroundColorSpan;importandroid.text.style.BulletSpan;importandroid.text.style.DrawableMarginSpan;importandroid.text.style.ForegroundColorSpan;importandroid.text.style.IconMarginSpan;importandroid.text.style.ImageSpan;importandroid.text.style.RelativeSizeSpan;importandroid.text.style.ScaleXSpan;importandroid.text.style.StrikethroughSpan;importandroid.text.style.StyleSpan;importandroid.text.style.SubscriptSpan;importandroid.text.style.SuperscriptSpan;importandroid.text.style.TextAppearanceSpan;importandroid.text.style.TypefaceSpan;importandroid.text.style.URLSpan;importandroid.text.style.UnderlineSpan;importandroid.widget.TextView;{TextViewmTextView=null;SpannableStringmsp=null;/**.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);mTextView=(TextView)findViewById(R.id.myTextView);//創建一個SpannableString對象msp=newSpannableString("字體測試字體大小一半兩倍前景色背景色正常粗體斜體粗斜體下劃線刪除線x1x2電話郵件網站簡訊彩信地圖X軸綜合/bot");//設置字體(default,default-bold,monospace,serif,sans-serif)msp.setSpan(newTypefaceSpan("monospace"),0,2,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(newTypefaceSpan("serif"),2,4,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置字體大小(絕對值,單位:像素)msp.setSpan(newAbsoluteSizeSpan(20),4,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);msp.setSpan(newAbsoluteSizeSpan(20,true),6,8,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//第二個參數booleandip,如果為true,表示前面的字體大小單位為dip,否則為像素,同上。//設置字體大小(相對值,單位:像素)參數表示為默認字體大小的多少倍msp.setSpan(newRelativeSizeSpan(0.5f),8,10,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//0.5f表示默認字體大小的一半msp.setSpan(newRelativeSizeSpan(2.0f),10,12,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//2.0f表示默認字體大小的兩倍//設置字體前景色msp.setSpan(newForegroundColorSpan(Color.MAGENTA),12,15,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置前景色為洋紅色//設置字體背景色msp.setSpan(newBackgroundColorSpan(Color.CYAN),15,18,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置背景色為青色//設置字體樣式正常,粗體,斜體,粗斜體msp.setSpan(newStyleSpan(android.graphics.Typeface.NORMAL),18,20,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//正常msp.setSpan(newStyleSpan(android.graphics.Typeface.BOLD),20,22,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//粗體msp.setSpan(newStyleSpan(android.graphics.Typeface.ITALIC),22,24,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//斜體msp.setSpan(newStyleSpan(android.graphics.Typeface.BOLD_ITALIC),24,27,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//粗斜體//設置下劃線msp.setSpan(newUnderlineSpan(),27,30,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置刪除線msp.setSpan(newStrikethroughSpan(),30,33,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置上下標msp.setSpan(newSubscriptSpan(),34,35,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//下標msp.setSpan(newSuperscriptSpan(),36,37,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//上標//超級鏈接(需要添加setMovementMethod方法附加響應)msp.setSpan(newURLSpan("tel:4155551212"),37,39,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//電話msp.setSpan(newURLSpan("mailto:[email protected]"),39,41,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//郵件msp.setSpan(newURLSpan(""),41,43,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//網路msp.setSpan(newURLSpan("sms:4155551212"),43,45,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//簡訊使用sms:或者smsto:msp.setSpan(newURLSpan("mms:4155551212"),45,47,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//彩信使用mms:或者mmsto:msp.setSpan(newURLSpan("geo:38.899533,-77.036476"),47,49,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//地圖//設置字體大小(相對值,單位:像素)參數表示為默認字體寬度的多少倍msp.setSpan(newScaleXSpan(2.0f),49,51,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//2.0f表示默認字體寬度的兩倍,即X軸方向放大為默認字體的兩倍,而高度不變//設置字體(依次包括字體名稱,字體大小,字體樣式,字體顏色,鏈接顏色)ColorStateListcsllink=null;ColorStateListcsl=null;XmlResourceParserxppcolor=getResources().getXml(R.color.color);try{csl=ColorStateList.createFromXml(getResources(),xppcolor);}catch(XmlPullParserExceptione){//TODO:handleexceptione.printStackTrace();}catch(IOExceptione){//TODO:handleexceptione.printStackTrace();}XmlResourceParserxpplinkcolor=getResources().getXml(R.color.linkcolor);try{csllink=ColorStateList.createFromXml(getResources(),xpplinkcolor);}catch(XmlPullParserExceptione){//TODO:handleexceptione.printStackTrace();}catch(IOExceptione){//TODO:handleexceptione.printStackTrace();}msp.setSpan(newTextAppearanceSpan("monospace",android.graphics.Typeface.BOLD_ITALIC,30,csl,csllink),51,53,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//設置項目符號msp.setSpan(newBulletSpan(android.text.style.BulletSpan.STANDARD_GAP_WIDTH,Color.GREEN),0,msp.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//第一個參數表示項目符號佔用的寬度,第二個參數為項目符號的顏色//設置圖片Drawabledrawable=getResources().getDrawable(R.drawable.icon);drawable.setBounds(0,0,drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());msp.setSpan(newImageSpan(drawable),53,57,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);mTextView.setText(msp);mTextView.setMovementMethod(LinkMovementMethod.getInstance());}}
⑥ android TextView的問題
pading = "0dp" 寬和高都用長度設置 字體寬頻也用長度設置
⑦ Android TextView使用及性能優化
TextView 是Android中最常用的控制項,在這里記錄下TextView 的用法;
在Android中可以使用系統自帶的4種字體:
在XML中使用 android:typeface="normal" 進行設置
將字體文件放到main/assets/fonts目錄下,使用Asset讀取字體後進行設置
使用 android:drawableLeft="@mipmap/ic_launcher" 可以設置一張圖片顯示在文字的上下左右,減少布局層級
使用Span能夠在一段TextView中設置不同顏色的字體,鏈接,圖片等內容
使用ClickableSpan 能夠設置一段文字的點擊事件
創建自己的MyClickableSpan:
之後使用SpannableStringBuilder來創建字元串,並使用setSpan來為字元串的一部分設置Span對象
其中setSpan()方法的最後一個參數標識有以下常量,這些常量標識著在 對SpannableStringBuilder進行insert時 添加的字元適用的規則:
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
Spanned.SPAN_EXCLUSIVE_INCLUSIVE
Spanned.SPAN_INCLUSIVE_EXCLUSIVE
Spanned.SPAN_INCLUSIVE_INCLUSIVE
前一個 EXCLUSIVE / INCLUSIVE 標識著在設置了Span的一段字元之前(緊挨著)插入字元時,被不被包含到Span范圍中, EXCLUSIVE 表示包含, INCLUSIVE 表示不包含;
第二個 EXCLUSIVE / INCLUSIVE 同理表示插入這段字元之後的效果;
ImageSpan用於在TextView中插入圖片,可以用來實現圖文混排
使用方法:
這樣實現的效果是文字與圖片底部進行對齊,如果需要圖片中線與文字中線對其,需要自己重寫ImageSpan
Android 中的TextView中存在著很多EditText中的特性,在setText()方法中會涉及到很多Span相關的操作,比如設置TextWatcher,重新構造Spannable等操作,在我們僅僅顯示靜態文本的時候這些操作都是沒有必要的(通過使用普通的TextView進行Debug來驗證普通的TextView的確是Span的);
在大量顯示靜態文本的時候就可以通過StaticLayout來計算出TextView的布局信息,這項工作可以放到非UI線程來進行,能夠減少在setText()的時候UI線程的耗時,達到優化TextView性能的目的;
StaticLayout是TextView中用於顯示多行靜態文本的Layout,也是能夠支持SpannableString的,只是不能在Span變化之後重新Layout,所以在大部分場景下已經適用;
通過這個自定義的View來顯示Text,在onDraw()的時候直接使用layout來進行繪制,而設置需要顯示的文本則直接使用setLayout()來實現
使用下面給出的參考鏈接中的測試Demo在 ZTE A2017 Android7.1.1 高通820設備上,普通TextView在ListView中連續滾動的幀數是55幀,使用StaticLayout的結果為60幀
可以作為在APP使用CPU資源較多的情況下的優化手段
參考鏈接: TextView預渲染研究
在Android中,TextView的測量消耗了大量的時間,Android P中提供了PrecomputedText能夠將測量這個過程放到後台來執行,減輕對於UI線程的卡頓;
非Android P時,使用AppCompatTextView控制項,使用setTextFeature()方法來將文本的measure過程放到其他線程來執行,而不是直接將text應用於TextView;
在調用了這個方法之後如果對TextView進行邊距,文字大小等的設置都將會報錯;
Prefetch Text Layout in RecyclerView
PrecomputedTextCompat
在ListView中僅替換設置Text的方法時未測試出性能與普通方法有什麼優勢,猜測是ListView沒有在getView和顯示之間預留時間,
測試項目地址:
https://github.com/GavynZhang/PrecomuptedTextViewTest