我正在寻找一种最佳方法来调整包装文本的大小TextView,使其适合其getHeight和getWidth界限.我不是简单地寻找一种包装文本的方法 - 我想确保它既包装又小到足以完全适合屏幕.
我在StackOverflow上看到了一些需要自动调整大小的情况,但它们或者是非常特殊的黑客解决方案案例,没有解决方案,或者涉及TextView递归重新绘制,直到它足够小(这是内存密集并迫使用户观看文本逐步收缩每次递归).
但是我确信那里有人找到了一个很好的解决方案,不涉及我正在做的事情:编写几个重度例程来解析和测量文本,调整文本大小,然后重复直到找到一个合适的小尺寸.
TextView用于包装文本的例程是什么?难道不能以某种方式用来预测文本是否足够小?
tl; dr:是否有一种最佳实践方法可以自动调整大小TextView以适应,包裹,在其getHeight和getWidth范围内?
android中是否有任何方法可以调整textview中的文本大小以适应它占用的空间?
例如,我正在使用a TableLayout并TextView在每行中添加几个s.由于我不希望TextViews包装文本,我宁愿看到它降低了内容的字体大小.
有任何想法吗?
我试过measureText,但由于我不知道列的大小,使用起来似乎很麻烦.这是我想要将字体大小更改为适合的代码的代码
TableRow row = new TableRow(this);
for (int i=0; i < ColumnNames.length; i++) {
TextView textColumn = new TextView(this);
textColumn.setText(ColumnNames[i]);
textColumn.setPadding(0, 0, 1, 0);
textColumn.setTextColor(getResources().getColor(R.drawable.text_default));
row.addView(textColumn, new TableRow.LayoutParams());
}
table.addView(row, new TableLayout.LayoutParams());
Run Code Online (Sandbox Code Playgroud) 我一直在寻找一种在textview中自动调整文本的方法.通过我的搜索,我找到了许多解决方案,如:
但和许多其他人一样,这些并不能解决我的问题.当我们使用带有多行的TextView时,它们无法按预期工作.
基本上我的目标是这个:

如您所见,文本根据宽度,高度调整大小,并注意换行,创建多行文本视图.也可以改变字体.
我解决这个问题的一个想法是这样的:
int size = CONSTANT_MAX_SIZE;
TextView tv = (TextView) findViewById(R.id.textview1)
while(Math.abs(tv.getMeasuredHeight()) >= TEXTVIEW_MAX_HEIGHT) {
size--;
tv.setTextSize(size);
tv.measure(MeasureSpec.UNSPECIFIED,MeasureSpec.UNSPECIFIED);
i++;
}
Run Code Online (Sandbox Code Playgroud)
CONSTANT_MAX_SIZE是一个常量,用于定义字体的最大大小(TextView中的textsize礼节)
TEXTVIEW_MAX_HEIGHT是一个常量,用于定义textview可以具有的最大大小.
每次textview中的文本发生更改时都会调用此方法.
textview xml是这样的:
<TextView
android:id="@+id/textview1"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:singleLine="false"
android:inputType="textMultiLine"
android:text=""
android:textSize="150sp" />
Run Code Online (Sandbox Code Playgroud)
由于宽度在XML中受到限制,因此只需要考虑视图的高度,因为调整它后android会在需要时自动创建多行.
虽然这是一个潜在的解决方案并不完美(远离它)并且它不支持调整大小(当您删除文本时).
任何sugestions和/或想法?
有没有办法让TextView选择一个字体大小,以便它填充它可用的任何空间?例如:
<LinearLayout
layout_width="fill_parent"
layout_height="50dip" >
<TextView
layout_width="fill_parent"
layout_height="fill_parent"
textSize="scale?" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
谢谢
我不相信这存在,但想仔细检查.我想设置一个TextView的文本大小,使其适合给定的宽度,单行.例:
<LinearLayout
layout_width="100dip"
layout_height="50dip">
<TextView
layout_width="fill_parent"
layout_height="wrap_content"
textSize="fill"
text="fit me please!" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
谢谢