如果我在 EditText 小部件上设置 SingleLine=true,我会得到一个单行编辑控件,不允许用户插入硬回车(单击 Enter 移动到下一个字段而不是插入新行) .如果我不设置 SingleLine=true,用户可以插入硬回车。
如果我设置 layout_height="wrap_content",EditText 控件将垂直增长以显示所有文本。但是,只有在 SingleLine 未设置为 true 时才会这样做。
所以,我的问题是,是否可以在不允许用户输入硬换行符的情况下实现自动换行和垂直调整大小?我想我可以捕获 enter 按键,但是我还必须捕获他们可能在那里获得一个的其他方式(复制/粘贴,不知道还有什么?)。有没有一种简单的方法可以通过正确的属性组合来做到这一点?
与单行编辑控件的水平滚动相比,我更喜欢用户可以看到所有文本的自动换行,但我真的不希望他们认为他们可以输入多行文本(而且我不'想必须支持它)。我想我可能会在将数据保存到数据库时将硬回车转换为空格,如果必须的话(我将此数据同步到 PC 上的旧版应用程序无法处理硬回车)。
最佳答案
我也一直在寻找可以做到这一点的东西。我找到的唯一解决方案是按如下方式扩展 EditText:
package com.kylemilligan.test;
import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;
public class NoNewlineEditText extends EditText
{
public NoNewlineEditText(Context context) {
super(context);
}
public NoNewlineEditText(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
InputConnection connection = super.onCreateInputConnection(outAttrs);
int imeActions = outAttrs.imeOptions & EditorInfo.IME_MASK_ACTION;
if ((imeActions & EditorInfo.IME_ACTION_DONE) != 0)
{
// clear the existing action
outAttrs.imeOptions ^= imeActions;
// set the DONE action
outAttrs.imeOptions |= EditorInfo.IME_ACTION_DONE;
}
if ((outAttrs.imeOptions & EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0)
{
outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
}
return connection;
}
}
然后在 XML 中使用:
<com.kylemilligan.test.NoNewlineEditText
android:id="@+id/noNewLineText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|left"
android:imeOptions="actionDone"
android:minLines="5" />
希望这对您有所帮助!
关于java - 带有自动换行但没有硬返回的Android EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842421/