AppCompatTextView可改變文本字體大小


有這樣一個需求,要求在一個列表中的每個條目中展示字數不限個數的文本。而且每個條目的寬度都是固定的,展示的文本如果過長,不可以用省略號顯示,只能動態的調整(縮小)文本的字號來達到文本能完全顯示的效果,而且要限一行展示。關於這個效果,其實目前android官方已經提供了實現方式。那就是AutoSizeableTextView。

  <android.support.v7.widget.AppCompatTextView
        android:id="@+id/atv"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:maxLines="1"
        android:textColor="#f00"
        android:textSize="12sp"
        app:autoSizeMaxTextSize="20sp"
        app:autoSizeMinTextSize="4sp"
        app:autoSizeStepGranularity="1sp"
        app:autoSizeTextType="uniform" />  //none時為不支持改變

代碼使用

TextViewCompat.setAutoSizeTextTypeWithDefaults(textView, TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM); 
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration( textView, 8, 25, 1, TypedValue.COMPLEX_UNIT_SP);

1.當低於27的時候,這個TextView必須屬於AutoSizeableTextView類型的,而前面已經說過,AppCompatTextView實現了AutoSizeableTextView接口,因此,為了兼容老版本,我們在xml聲明的時候需要聲明為AppCompatTextView。

2.控件的寬度和高度必須要有具體的值,不能設置為wrap_content。這一點估計也好理解,如果寬高不固定,也就不會有根據寬高改變字號這一問題了。

3.關於一行展示這個屬性,平時我們應該都知道兩種方式。那就是singleLine="true",或者maxLines="1"。看我上面的代碼,兩種方式我都采用的是maxLines="1"的方式進行設置,如果用singleLine的話會發現無法顯示預期的效果的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM