0

我有一个EditText固定的宽度和高度。我希望EditText当长度/文本太多时可以自动减小文本大小。为了实现这一点,我的问题是:

  1. 如何通过提供固定宽度/高度和文本大小来获得最大长度?
  2. 通过给出固定的/高度和文本内容,我应该使用什么文本大小?
4

1 回答 1

0

好的,我已经收集了一些关于它的想法,我正在向你展示它。我还没有测试它。所以首先我们需要在这里做的是获取编辑文本最大长度。但是,只有有限的参数有它们的 getter,所以我认为你看不到它。

因此,在 values 文件夹中写入长度(比如 12)并在 xml 布局和您的 java 类中使用它。现在它没有硬编码。

1)在值中创建 integer.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="integer" name="max_length">12</item>
</resources>

2)在布局中

<TextView  android:id="@+id/tv"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:maxLength="@integer/max_length"
    />

3)在Java中:

int maxLength = getResources().getInteger(R.integer.max_length);

现在我们必须调整文本的字体大小,所以我们需要先得到它:

    msgInput = (EditText) findViewById(R.id.msgInput);
    msgInput.addTextChangedListener(new TextWatcher()
    {

    public void afterTextChanged(Editable s) {
    if ((msgInput.getMaxHeight() > maxLength) || (msgInput.getTextSize() > maxLength))
    {
    msgInput.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, TableRow.LayoutParams.WRAP_CONTENT));
    }
    else
    {
    int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 40, getResources().getDisplayMetrics());
    msgInput.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, height));
    }
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
    int after) {         
    }

    public void onTextChanged(CharSequence s, int start, int before,
    int count) {         
    }

    });

总而言之,您必须在此处应用TextView

于 2013-06-13T10:12:06.523 回答