導航:首頁 > 操作系統 > androidview的使用方法

androidview的使用方法

發布時間:2023-05-09 17:07:11

A. 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

B. Carson帶你學Android:手把手教你寫一個完整的自定義View

自定義View一共分為兩大類,具體如下圖:

對於自定義View的類型介紹及使用場景如下圖:

在使用自定義View時有很多注意點(坑),希望大家要非常留意:

View的內部本身提供了post系列的方法,完全可以替代Handler的作用,使用起來更加方便、直接。

主要針對View中含有線程或動畫的情況: 當View退出或不可見時,記得及時停止該View包含的線程和動畫,否則會造成內存泄露問題

當View帶有滑動嵌套情況時,必須要處理好滑動沖突,否則會嚴重影響View的顯示效果。

接下來,我將用自定義View中最常用的 繼承View 來說明自定義View的具體應用和需要注意的點

在下面的例子中,我將講解:

下面我將逐個步驟進行說明:
步驟1:創建自定義View類(繼承View類)

特別注意:

步驟2:在布局文件中添加自定義View類的組件及顯示

至此,一個基本的自定義View已經實現了,運行效果如下圖。

接下來繼續看自定義View關於屬性自定義的問題:

先來看wrap_content & match_parent屬性的區別

如果不手動設置支持 wrap_content 屬性,那麼 wrap_content 屬性是不會生效(顯示效果同 match_parent )

padding 屬性:用於設置控制項內容相對控制項邊緣的邊距;

如果不手動設置支持padding屬性,那麼padding屬性在自定義View中是不會生效的。

繪制時考慮傳入的padding屬性值(四個方向)。

除了常見的以android:開頭的系統屬性(如下所示),很多場景下自定義View還需要系統所沒有的屬性,即自定義屬性。

實現自定義屬性的步驟如下:

下面我將對每個步驟進行具體介紹

對於自定義屬性類型 & 格式如下:

至此,一個較為規范的自定義View已經完成了。

Carson_Ho的github: 自定義View的具體應用

不定期分享關於 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度

C. android 自定義View 使用 DataBinding 筆記

在 build.gradle 文件中添加配置

系統會根據布局文件名稱自動生成相應的 DataBinding 類,例如
布局文件 activity_main.xml 會生成 ActivityMainBinding 類 ,類名生成規則為駝峰命名: 文件名(首字母大寫) + Binding

activity 中使用:

fragment 中使用:

這里 android:text="@{viewmodel.text}" 對text進行設置
在 Edittext 中可以使用 android:text="@={viewmodel.text}" 進行雙向綁定,關鍵是這個 = 號;

若需要在xml布局文件中使用系統類的屬性,則需要引入.例:

通過引入 <import type="android.view.View"/> 可以使用 View.VISIBLE 、 View.GONE 屬性

有時候自定義view要用DataBinding時需要通過 @BindingAdapter 設置

單向綁定設置比較簡單 @BindingAdapter("app:paramA") 方法名為 setParamA ,單向綁定嘛就是傳入參數:

雙向綁定 set 、 get 方法,最主要的是 setListeners 方法,名字可以隨意,只是 @BindingAdapter 中是 "app:paramBAttrChanged" ,在屬性後面跟上 AttrChanged , attrChange 為通知系統內容變更的回調,當在 MineView 內部 paramB 發生變更時,通過 attrChange 去通知對 paramB 進行綁定的對象更新自己緩存中的內容 如:

希望對您有幫助.

D. android自定義view要怎麼使用

視圖,凡事能被用戶看到的小控制項都是一種view,也可以自定義view

E. Android View如何獲取焦點

Android 中的view使用requestFocus()焦點具體的方法如下:1.view.setFocusable(true);2.view.setFocusableInTouchMode(true);然後調用 requestFocus()即可獲取焦點。Android View如何獲取焦點

閱讀全文

與androidview的使用方法相關的資料

熱點內容
exe打開指定文件夾 瀏覽:264
pdf裡面怎麼去水印 瀏覽:845
appleid賬號加密碼 瀏覽:220
蘋果如何下載微倉app 瀏覽:916
迅雷解壓進度為0 瀏覽:859
解壓解惑近義詞 瀏覽:316
壓縮比不一樣燃燒室不一樣 瀏覽:101
androidbutton左對齊 瀏覽:172
怎麼找到學校的伺服器 瀏覽:368
android狀態欄高度是多少 瀏覽:987
linuxcliphp 瀏覽:515
蘿卜源碼如何關閉用戶注冊驗證 瀏覽:756
蘋果手機頭條app怎麼沒有tv 瀏覽:563
電腦qq文件夾怎麼發不出去 瀏覽:614
解壓小游戲測試鑽石劍的硬度 瀏覽:963
java結束函數 瀏覽:622
打開遠程桌面的命令 瀏覽:836
樹莓派如何搭建mqtt伺服器 瀏覽:588
怎麼加密w8文件 瀏覽:610
linuxprogram 瀏覽:709