我有一个EditText
,其宽度和高度都是固定的。我希望EditText
可以在长度/文本太多时自动缩小文本大小。为了实现这一目标,我的问题是:
答案 0 :(得分:0)
好的,我已经收集了一些关于它的想法,我将它呈现给你。我还没有测试过。所以我们首先需要做的是编辑文本max-length。但是,只有有限的参数才有吸气剂,所以我认为你不能读它。
因此在values文件夹中写入长度(Say 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"
/>
Java中的3):
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。