[英]Android EditText with word-wrap but no hard returns
如果我在EditText小部件上設置SingleLine = true,我會得到一個單線編輯控件,它不允許用戶插入硬返回(單擊Enter移動到下一個字段而不是插入新行)。 如果我沒有設置SingleLine = true,則用戶可以插入硬回車。
如果我設置layout_height =“wrap_content”,EditText控件將垂直增長以顯示所有文本。 但是,只有在SingleLine未設置為true時才會執行此操作。
所以,我的問題是,是否有可能在不允許用戶輸入硬換行符的情況下進行自動換行和垂直調整大小? 我想我可以陷入輸入按鍵,但是我還必須抓住其他方式,他們可能會在那里得到一個(復制/粘貼,不知道還有什么?)。 只有正確的屬性組合,有一種簡單的方法嗎?
與單線編輯控件的水平滾動相比,我更喜歡用戶可以看到所有文本的自動換行,但我真的不希望他們認為可以輸入多行文本(我不想要必須支持它)。 我想,當我將數據保存到我的數據庫時,我可能只是將硬返回轉換為空格,如果必須的話(我將這些數據同步到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" />
希望這可以幫助!
我對此感興趣,並意識到內置的Android消息傳遞應用程序已經包裝了文本而沒有軟鍵盤上的回車鍵。 根據這里的源布局,它完成了以下選項。 並非所有都是必要的; 我相信關鍵是要有textShortMessage
, textMultiLine
和flagNoEnterAction
:
android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
android:imeOptions="actionSend|flagNoEnterAction"
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
//This will treat Enter as Done instead of new line:
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
And in XML:
android:inputType="textMultiLine"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.