1. 程式人生 > >AppCompatTextView可改變文本字體大小

AppCompatTextView可改變文本字體大小

設置 zemax lines line 個數 xtext parent 代碼 wid

有這樣一個需求,要求在一個列表中的每個條目中展示字數不限個數的文本。而且每個條目的寬度都是固定的,展示的文本如果過長,不可以用省略號顯示,只能動態的調整(縮小)文本的字號來達到文本能完全顯示的效果,而且要限一行展示。關於這個效果,其實目前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的話會發現無法顯示預期的效果的。

AppCompatTextView可改變文本字體大小