當前位置:首頁 » 安卓系統 » android圖文混排

android圖文混排

發布時間: 2023-11-08 16:30:58

Ⅰ 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

Ⅱ Android listview圖文混排,有文字,圖片,音頻,視頻 如何判斷數據類別

你上面的那麼些就行,你的listview 是圖文混排,但是你的listview的填充數據肯定是存在一個list中的吧?
首先就是在你的這個函數里,根據參數position,找到list中這個位置是哪種類型,根據他的類型返回不同的布局,然後再getView函數里調用getItemViewType得到布局,根據布局不同來初始化不同的布局並載入數據,這樣就成了每個條目都是根據他的position來做布局的

Ⅲ android開發如圖片上面的這種圖文混排是怎麼實現的!用到什麼技術!因為是隨內容改變排版的,不是

很明顯就是用webview來實現的,webview載入伺服器html5界面,所以界面會經常更新,html5實現這樣的界面就非常簡單了,一個list循環動態載入html即可實現。

Ⅳ android編程如何顯示大量文本

TextView本身是可以顯示大量文本的,但會左右不對齊現象,另外圖文混排的時候更不適合了,建議如下
1、自定義View,顯示大量文本
2、使用webview來顯示大量文本

Ⅳ android圖文混排,我想在文章的任意位置添加圖片,不止一張,是多張圖片,網上找不到類似的布局

圖文並茂的話,你可以用
SpannableString ss = new SpannableString("abcdefghijklmn");
Drawable d = getResources().getDrawable(R.drawable.icon);//找到你要加入的圖片
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, 0, 6, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
Textview.setText()裡面的參數是 char... spannablesString 是它的子類,是把圖片轉化成..

Ⅵ 如何實現一個 Android 端的富文本編輯器

  • 較常見的實現圖文混排的辦法

  1. WebView + JavaScript;

  2. EditText + Span;

  3. scrollview + view;

  • WebView +JavaScript

    webview實現富文本也就是html+css+js,不過這種的難點就是在手機客戶端中的編輯問題,畢竟是webview和android view的轉化問題。

  • EditText + Span

    可以很好的實現簡單富文本的編輯,但是在圖文混排,以及各種主要自定義的組件面前就顯得捉襟見肘。

  • scrollview + view

    優點是可以實現各種各樣的view,想什麼組件自定義就行,而且實現比較簡單,簡單幾句就可以實現文本插入編輯。

  • scrollview + view的實現過程

  1. 效果圖:

其他

在scrollview實現一些view的添加和刪除,以及組件間的拼接,就可以實現一個很簡單的可定製的富文本編輯器。

Ⅶ Android設備的界面適配設計

Android設備App設計中有一個問題可能會被設計師忽略,在各種解析度各種尺寸「雜屏」的界面適配。可能產出的界面稿在常用的720*1280的解析度中是完美,但一到各個不同解析度不同尺寸的設備後

這里就談談適配,了解適配讓設計從PS、sketch到移動設備上都能完美呈現。

如此繁雜的安卓設備,採用哪個標准設計呢?

1.選擇一種尺寸一種解析度作為基準。

2.選擇2-3款主流的Android設備,制定一套適配規則。(國內主流設備、解析度可參考友盟指數)

3.部分極端效果特別注釋說明。

目前移動端設計師多採用iPhone 5與6的解析度設計,這兩個解析度也最接近Android xhdpi的720*1280,設計之後再做等比適配(不做設計元素等比適配會導致Android設備上視覺呈現較小)。

我則傾向於選取720*1280的解析度設計。優點是處於常用解析度的中間值,對小解析度大解析度調整也較容易。另外iOS@1x的320與720剛好是2.25的倍率關系,使用sketch等比輸出快捷多了。(如果時間成本允許的話可以將Android的標注單位用dp,具體的設備尺寸、解析度知識這里不詳描述,可見文章最後面的「Android基礎知識」)

案例說明:

雅虎新聞為各個dpi做了優化,圖片等比縮放,文字區域等比縮放,並且考慮到在低dpi下會被推移至第二屏,就減小圖片了高度,保持文字區域最小高度。

老司機都不會忘記的,僅提醒下新手,每個圖標記得輸出多個比例。並且記得查看各個比例下圖標的顯示效果。

案例說明:

還是拿一個雅虎新聞的例子,大家感受下。

Android設備的系統各個廠商都做了定製化,默認的字體庫可能不同,且字體占空間大小可能不同。不同設備顯示文字會出現不同效果。設計時考慮3點:

多採用流式布局,不對單行做字數限制(如「單行顯示多少個字」「文本寬度多少」),而是定義文本容器的高寬,超出則用「…」「漸隱」或者「遮擋」等方式省略。

若較長的文本需要完整顯示,設計時預留換行空間。

若文本需要在單行完整顯示(如提示類文字),盡量控制字數(建議16字內),避免小屏不夠放置。

案例說明:

圖文混排同一行顯示時,圖片等比固定在右側顯示,文字部分區域寬度會因設備不同出現較大的差異,預留文字多行高度。如下圖不同設備下文字的展示空間有差異,需要考慮小解析度下預留多行文字空間。如圖2第二條新聞標題文字溢出的醜陋展示,建議設定一個文字區域最大高度,超出部分則隱藏。

單行出現多個文字元素時,注意元素在低dpi下的顯示層級,提前說明好該情況的覆蓋或者隱藏規則。如下圖第一個用戶名稱,在低dpi下,避免各元素交錯,而省略了超出的用戶名稱。

圖片常用的方式有固定寬度dp等比縮放高度(用於非通欄圖片);固定高度dp等比縮放寬度(用於橫向滾動圖片,如全屏相冊中的縱向圖片);根據屏幕寬度等比縮放(橫向通欄圖片)。設計時考慮3點:

注意圖片佔用的寬高比,避免大屏設備上占據大量空間,導致內容比例不協調同時降低了屏幕利用率。

考慮到設備屏幕密度不同,輸出圖片時別忘了輸出多個解析度。

考慮圖片寬高比過大的縮略圖處理(最常見的處理方式:高度遠大於寬度時,是給出最大區域,讓圖片等寬居中填充該區域,只顯示該區域;寬度遠大於高度時,與展示區域等高居中取部分顯示。當然也可能出現特殊顯示要求,需要根據具體情況具體處理。)

案例說明:

網易游戲相冊的全屏瀏覽中,大於設備寬高比的寬圖按照最大寬度放置,小於設備寬高比的高度按照最大高度放置。

一行多張圖片要考慮圖片的在不同設備下等比縮放帶來顯示效果的差異。排列時會有兩種情況:

1.要求在一行內顯示完,根據圖片的顯示效果決定放置的數量,超過則不顯示(如下圖1第二條新聞)

2.流式布局,當圖片寬度小於設定值時自動換行(如下圖2相冊展示,低dpi低解析度設備一行顯示3張,高的顯示4-5張,且按比例撐滿屏幕寬度)。

寬高比超出設計區域時的處理,如網路貼吧中列表的小圖模式,給出了正方形區域,當圖片非正方形時,根據寬高中的短邊等比撐滿正方形區域後,截取了圖片居中的部分顯示。

在固定區域內多元素混合放置時,文字一般採取流式布局,圖片多採用等比縮放,圖標元素多採用 彈性布局,即元素內容本身規格不變,考慮水平、垂直方向的間距做相應擴展。設備屏幕越大,在擴展方向上可以顯示更多內容,發揮了大屏幕的優勢。

彈性布局需要給出哪一個元素dp不變,哪一個元素縮放的策略。

彈性布局下部分距離標注採用百分比標注。

當有兩個等比縮放元素時考慮避免重疊的情況。

案例說明:

網易游戲的新聞列表樣式,每一條新聞區域,要求圖片dp不變,而文字區域進行彈性縮放。

下圖網易游戲專區中間的幽靈按鈕圖標為確保點按效果,按照固定dp顯示,中間間隔的寬度按照設備寬度的百分比來確定

網易游戲求交往的界面,中間卡片區域大小根據設備等比縮放,如中間用戶頭像與「同喜歡2款游戲」的文字,在設計時需要考慮產品的目標設備中最小設備下的布局顯示效果,避免出現重疊的情況。而縱向的元素數量也需要如此考慮。

Android界面適配的案例說明就寫到這里啦。

設計時多考慮各個元素(圖標、文本、圖片、區域)在不同設備的情況。當然,做設計時也不是死板的按照建議來實現,特別是固定區域下的元素放置,根據實際情況來處理即可。

Android系統的UI也在不斷進化完善,隨著設計趨勢的改變,Android除了常見的卡片、列表、浮層外,可能會有更多的展示方式,而Android設備也是逐漸淘汰ldpi與mdpi,設備的解析度逐漸變大。也就要求我們需要不斷的去了解嘗試新的設計趨勢,產出最好的方案。

這不是彩蛋哈,僅僅補充安卓設備的基礎知識,老司機完全可以忽略,供新手參考閱讀。

為展示設備的多樣化,貼出Android屏幕尺寸示意圖(藍色矩形的大小代表不同尺寸,顏色深淺則代表所佔百分比的大小。)

屏幕大小以屏幕尺寸來衡量,指屏幕的對角線的長度,單位是英寸,1英寸=2.54厘米

目前的主流尺寸:5.0" ~ 5.5" (有繼續往更大尺寸發展的趨勢,但趨於穩定)

常見的設備尺寸: 4" ~ 10" 。

手機適配參考尺寸: 4" ~ 6"

手機 + 平板適配參考尺寸: 4" ~ 10」

屏幕解析度是指在橫縱向上的像素點數,單位是px,1px=1個像素點。一般以縱向像素*橫向像素,如1960*1080。

屏幕像素密度是指每英寸上的像素點數,單位是dpi,即「dot per inch」的縮寫。目前每個屏幕像素可以認為就是一個「點」。

屏幕 dpi 的計算方式:

Android 設備中 dpi 分幾個段:

•ldpi:~ 120 dpi (幾乎絕跡)

•mdpi:~ 160 dpi (罕見)

•hdpi:~ 240 dpi (逐漸減少中)

•xhdpi:~ 320 dpi

•xxhdpi:~ 480 dpi

•xxxhdpi:~ 640dpi (目前較少)

dp(與 dip 同義) 是在 160dpi 下每個像素對應的物理尺寸,可近似理解為:

•160 dp = 1 inch

•1 dp = 1 / 160 inch = 0.15875 mm

•1 dp = 1 px (160 dpi 屏幕下)

•1 dp = 2 px (320 dpi 屏幕下)

Android的屏幕適配指標都基於物理尺寸(即屏幕的物理大小),而非像素(解析度)。為什麼呢?這里根據dp與px適配出兩種效果來說明。

按 dp 適配不同屏幕的效果如下,內容的物理尺寸變化不大:

若直接按照像素適配,出現以下情況,高像素密度的設備內容顯得特別小,影響布局與可用性:

屏幕長邊和短邊的比例。

目前手持設備的 長邊 dpi 和 短邊 dpi 普遍非常接近,可認為屏幕比例和屏幕水平、垂直像素比例一致

屏幕比例目前趨於 16:9 ~ 16:10 (8:5)

因不少設備使用了虛擬按鍵,所以通常非全屏的 app 可用面積略低,屏幕比例更接近 16:10

Ⅷ android的listview中用自定義適配器時定義復雜底層數據類型怎麼定義

方法/步驟

1

首先將適配器的View視圖表現出來,使用ListView為例,代碼如下。

熱點內容
反恐精英15游戲伺服器ip 發布:2025-01-23 21:13:38 瀏覽:850
起床的戰爭玩什麼伺服器 發布:2025-01-23 21:03:06 瀏覽:140
企業級安卓手機防毒軟體哪個好 發布:2025-01-23 20:59:28 瀏覽:242
資料庫精美 發布:2025-01-23 20:37:05 瀏覽:234
mysql怎麼編譯驅動 發布:2025-01-23 20:35:15 瀏覽:466
修改資料庫的語句是 發布:2025-01-23 20:26:17 瀏覽:761
linuxping域名 發布:2025-01-23 20:24:34 瀏覽:478
神經網路演算法應用 發布:2025-01-23 20:18:36 瀏覽:218
冒險島按鍵精靈腳本下載 發布:2025-01-23 19:46:50 瀏覽:751
安卓訪問共享需要開通什麼服務 發布:2025-01-23 19:43:01 瀏覽:518