很多时候,我们需要将TextView的字体自动调整到给定的边界.
可悲的是,即使有很多线程和帖子(和建议的解决方案)谈论这个问题(例如这里,这里和这里的例子),它们都没有真正运作良好.
这就是为什么,我决定测试每一个,直到找到真正的交易.
我认为来自这样一个textView的要求应该是:
应允许使用任何字体,字体,样式和字符集.
应该处理宽度和高度
没有截断,除非文本由于限制而无法适应,我们已经给它(例如:文本太长,可用大小太小).但是,如果我们愿意,我们可以请求水平/垂直滚动条,仅适用于那些情况.
应该允许多线或单线.如果是多行,请允许最大和最小行.
计算速度不应该慢.使用循环找到最佳尺寸?至少要优化它,不要每次增加1个采样.
在多行的情况下,应该允许更喜欢调整大小或使用更多行,和/或允许使用"\n"字符自己选择行.
我已经尝试了很多样本(包括链接的那些,我已经写过了),而且我也尝试修改它们来处理这些情况,我已经谈过了,但没有一个真正起作用.
我做了一个示例项目,让我可以直观地看到TextView是否正确自动匹配.
目前,我的示例项目只是随机化文本(英文字母加上数字)和textView的大小,并让它保持单行,但即使这样也不适用于我尝试的任何样本.
这是代码(也可在此处获得):
res/layout/activity_main.xml<RelativeLayout 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" tools:context=".MainActivity">
<Button android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" android:text="Button" />
<FrameLayout android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_above="@+id/button1"
android:layout_alignParentLeft="true" android:background="#ffff0000"
android:layout_alignParentRight="true" android:id="@+id/container"
android:layout_alignParentTop="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
src/.../MainActivity.javapublic class MainActivity extends Activity
{
private final Random _random =new Random();
private static final String ALLOWED_CHARACTERS ="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); …Run Code Online (Sandbox Code Playgroud) Android最近添加了对基于视图大小和最小和最大文本大小调整TextViews文本大小的支持.
https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview.html
不幸的是,它们不支持EditTexts,那么EditText还有其他选择吗?