zoukankan      html  css  js  c++  java
  • 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的话会发现无法显示预期的效果的。

  • 相关阅读:
    JavaScript中{}+{}
    网站性能优化
    C++是如何从代码到游戏的?
    C++是如何从代码到游戏的?
    【力扣】至少是其他数字两倍的最大数 中速题解
    代码编辑器选择Atom还是VScode?
    TIOBE 4 月榜单:少儿编程语言 Scratch 进入 TOP 20
    熟悉一下oncontextmenu事件的知识
    input属性type为file打开文件资源管理器时,如何限制多次选取或只能一次选取的行为
    HTML5的拖放事件
  • 原文地址:https://www.cnblogs.com/loaderman/p/10382655.html
Copyright © 2011-2022 走看看