如何根据加载的文本增加我的android textview中的文本大小?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何根据加载的文本增加我的android textview中的文本大小?相关的知识,希望对你有一定的参考价值。

我有一个textview显示我从数据库加载的文本。有时文本是像b这样的单个字母,有时它是两个字,像small word一样超过两行。

如果我显示一个字母,我希望字体大小更大。我尝试使用带有size属性的html字体标记,并通过Html.fromHtml()传递字符串:

<font size='6'>d</font>

但不幸的是,字体大小不会改变,android似乎无法识别该属性。

我不想在px中给出字体大小,因为我有时想在textviews中加载带有不同默认textize的文本。


更多细节:我有一个应用程序,询问用户一系列问题。为此,它在两个单独的textviews中显示两个可能的答案。我的数据库中有几千个问题。该活动一次运行3分钟,我希望用户每三秒回答一个问题。

有时答案是单行词,有时它需要两行,有时它只是一个字母。如果它是一个字母,我觉得我通过在同一文本中显示字母来浪费空间,所以我想增加它的文本化。

在显示问题的字段中,我有类似的问题。有时问题需要两行,有时需要一个简短的单行词。当它需要一行时我也想增加字体大小。

enter image description here

答案

更新:

我创建了一个CustomTextView类,动态地覆盖ondraw方法到setTextSize而不是设置每个TextView。

public class CustomTextView extends TextView {
  private static final String TAG = "CustomTextView";

  public CustomTextView(Context context) {
    super(context);
  }

  public CustomTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
  }

  @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  }

  @Override protected void onDraw(Canvas canvas) {
    if (getLineCount() == 1) {
      setTextSize(40);
    } else {
      setTextSize(20);
    }
    super.onDraw(canvas);
  }
}

layout_custom.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_marginTop="98dp"
    >
  <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:weightSum="1"
      >
    <com.example.blizzard.sof.CustomTextView
        android:id="@+id/customtextview1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:layout_weight="0.5"
        android:background="@android:color/holo_blue_dark"
        android:gravity="center"
        android:textColor="@android:color/holo_red_dark"
        android:text="Word1 
Word2"
        />

    <com.example.blizzard.sof.CustomTextView
        android:id="@+id/customtextview2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="fill"
        android:layout_marginLeft="16dp"
        android:layout_weight="0.5"
        android:background="@android:color/holo_blue_dark"
        android:gravity="center"
        android:textColor="@android:color/holo_red_dark"
        android:text="B"
        />
  </LinearLayout>
</LinearLayout>

确保使用适当的包名替换com.example.blizzard.sof.CustomTextView

预习:

enter image description here

上一个答案:

您可以使用AutoFitTextView库。

将所有文本视图转换为AutofitTextView,并确保为属性android:textSize="?"autofit:minTextSize="?"设置适当的值。

样品:

AutoFitTextView

另一答案

如果我正确理解了您的问题,您需要根据显示的字母数设置文本大小。

你可以这样做:

TextView textView = (TextView) findViewById (R.id.your_layout);
if (string.length() > 10) {
    textView.setTextSize(10);
else {
    textView.setTextSize(20);
}
textView.setText(string);
另一答案
TextView textView = (TextView) findViewById (R.id.your_layout);
textView.setTextSize(constant-textView.getText().toString().length);

获取TextView文本,并根据长度设置字体大小。例如 - 如果TextView包含一个字母“b”,那么大小将恒定 - 1,如果它包含两个单词,如“Android Is Cool”,那么大小将是恒定的 - 15,这是更小的。

另一答案

你为什么不这样做呢?

textview.setText(“Some text”);
    textview.post(new Runnable() {
        @Override
        public void run() {
        if(textview.gettext().toString().length==1)
{
textView.setTextSize(10.0f);
}else{
            int lineCount = textview.getLineCount();
            // Use lineCount here
if(lineCount==1)
{
textView.setTextSize(20.0f);
}else if(lineCount==2)
{
textView.setTextSize(30.0f);
}
}
        }
    });

这应该可以让您根据文本保留文本大小。

以上是关于如何根据加载的文本增加我的android textview中的文本大小?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据文本内容增加 NSTableView 中的行高?

如何在android中增加底部导航视图的高度及其图标和文本大小?

如何根据 iphone 中的文本大小动态增加按钮宽度?

如何在android中动态增加EditText的大小?

自动布局图像大小应根据 UItextview 文本增加

如何增加更快的recyclerView负载?