是否有可能同时拥有一个EditText
具有android:inputType="textMultiLine"
集合的小部件android:imeOptions="actionDone"
?
我想要一个多行编辑框,键盘上的动作按钮完成,而不是回车(回车),但它似乎没有工作..
提前致谢
ale*_*btr 166
使用
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
Run Code Online (Sandbox Code Playgroud)
并在XML中:
android:inputType="textMultiLine"
Run Code Online (Sandbox Code Playgroud)
HYS*_*HYS 49
来自android文档:' "textMultiLine"普通文本键盘,允许用户输入包含换行符(回车符)的长字符串文本.'因此,如果要在键盘中使用"完成"按钮,则textMultiLine属性不合适.
使用完成按钮获取多行(在本例中为3行)输入字段的简单方法是使用EditText
android:lines="3"
android:scrollHorizontally="false"
Run Code Online (Sandbox Code Playgroud)
但是,出于某种原因,如果我在代码而不是布局文件(在onCreate中)中进行这些设置,这仅适用于我
TextView tv = (TextView)findViewById(R.id.editText);
if (tv != null) {
tv.setHorizontallyScrolling(false);
tv.setLines(3);
}
Run Code Online (Sandbox Code Playgroud)
我希望这对某人有所帮助,因为花了很长时间才弄明白.如果您找到一种方法使其从清单中运行,请告诉我们.
Ane*_*s U 24
工作实例!创建以下支持此功能的自定义EditText类,并使用xml文件中的类.工作代码:
package com.example;
import android.content.Context;
import android.util.AttributeSet;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.widget.EditText;
public class ActionEditText extends EditText
{
public ActionEditText(Context context)
{
super(context);
}
public ActionEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public ActionEditText(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
InputConnection conn = super.onCreateInputConnection(outAttrs);
outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
return conn;
}
}
<com.example.ActionEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="textAutoCorrect|textCapSentences|textMultiLine" />
Run Code Online (Sandbox Code Playgroud)
Oll*_*e C 15
要在 Kotlin 中执行此操作(并且还可以选择应用其他配置,例如textCapSentences
您可以使用此扩展功能:
// To use this, do NOT set inputType on the EditText in the layout
fun EditText.setMultiLineCapSentencesAndDoneAction() {
imeOptions = EditorInfo.IME_ACTION_DONE
setRawInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES or InputType.TYPE_TEXT_FLAG_MULTI_LINE)
}
Run Code Online (Sandbox Code Playgroud)
用法:
myEditText.setMultiLineCapSentencesAndDoneAction()
Run Code Online (Sandbox Code Playgroud)
我认为这是做你事的方法.拥有android:inputType="textMultiLine"
,android:imeOptions="actionDone"
使输入密钥功能模糊不清.请记住,你可以使用android:lines="10"
,也许删除android:inputType="textMultiLine"
,但取决于你想要实现的有时你只需要它,android:inputType="textMultiLine"
并没有替代它.
EditText ed=new EditText(this);
ed.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_ENTER){
//do your stuff here
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
在代码中设置这些值是唯一对我有用的东西
edittext.inputType = EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE
edittext.setHorizontallyScrolling(false)
edittext.maxLines = Integer.MAX_VALUE // Or your preferred fixed value
Run Code Online (Sandbox Code Playgroud)
我经常需要这个,所以这样做是为了保持代码干净:
fun EditText.multilineIme(action: Int) {
imeOptions = action
inputType = EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE
setHorizontallyScrolling(false)
maxLines = Integer.MAX_VALUE
}
// Then just call
edittext.multilineIme(EditorInfo.IME_ACTION_DONE)
Run Code Online (Sandbox Code Playgroud)
如果您想在“完成”上添加可选的自定义操作,请尝试以下操作:
fun EditText.multilineDone(callback: (() -> Unit)? = null) {
val action = EditorInfo.IME_ACTION_DONE
multilineIme(action)
setOnEditorActionListener { _, actionId, _ ->
if (action == actionId) {
callback?.invoke()
true
}
false
}
}
}
// Then you can call
edittext.multilineDone { closeKeyboard() }
// or just
edittext.multilineDone()
Run Code Online (Sandbox Code Playgroud)
需要在回调中轻松控制键盘?阅读这篇文章
然后添加hideKeyboard()
调用EditText.multilineDone
这似乎对我很有用
int lineNum = 2;
mEditText.setHorizontallyScrolling(false);
mEditText.setLines(3);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
55587 次 |
最近记录: |