我想知道是否有一种方法可以处理用户在输入 EditText
时按下 Enter,类似于 onSubmit HTML 事件。
还想知道是否有一种方法可以操作虚拟键盘,即“完成”按钮被标记为其他内容(例如“开始”)并在单击时执行特定操作(再次,如 onSubmit)。
我想知道是否有一种方法可以处理用户在输入 EditText 时按 Enter 键,例如 onSubmit HTML 事件。
是的。
还想知道是否有一种方法可以操作虚拟键盘,即“完成”按钮被标记为其他内容(例如“开始”)并在单击时执行特定操作(再次,如 onSubmit)。
也是的。
您需要查看 TextView
上的 android:imeActionId
和 android:imeOptions
属性以及 setOnEditorActionListener()
方法。
要将“完成”按钮的文本更改为自定义字符串,请使用:
mEditText.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);
final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
enter
时,整个编辑文本会向下移动...我该如何解决这个问题?
这就是你要做的。它也隐藏在 Android 开发者的示例代码“蓝牙聊天”中。用您自己的变量和方法替换“示例”的粗体部分。
首先,将您需要的内容导入到您希望返回按钮执行特殊操作的主 Activity 中:
import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
import android.view.KeyEvent;
现在,为您的返回键创建一个 TextView.OnEditorActionListener 类型的变量(这里我使用 exampleListener);
TextView.OnEditorActionListener exampleListener = new TextView.OnEditorActionListener(){
然后你需要告诉听众两件事,当按下返回按钮时要做什么。它需要知道我们在说什么EditText(这里我使用exampleView),然后它需要知道按下Enter 键时要做什么(这里是example_confirm())。如果这是您的活动中的最后一个或唯一一个 EditText,它应该与您的提交(或确定、确认、发送、保存等)按钮的 onClick 方法执行相同的操作。
public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_NULL
&& event.getAction() == KeyEvent.ACTION_DOWN) {
example_confirm();//match this behavior to your 'Send' (or Confirm) button
}
return true;
}
最后,设置监听器(很可能在你的 onCreate 方法中);
exampleView.setOnEditorActionListener(exampleListener);
KeyEvent.ACTION_UP
上执行操作。为此,您需要首先使用 ACTION_DOWN
事件:if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
。然后您可以检查 ACTION_UP
事件并执行操作(类似于上面的答案)。如果您不使用 ACTION_DOWN
事件,则不会为 ACTION_UP
调用 onEditorAction
。
if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
-- 无法使用任何其他方法
此页面准确描述了如何执行此操作。
https://developer.android.com/training/keyboard-input/style.html
设置 android:imeOptions 然后您只需检查 onEditorAction 中的 actionId。因此,如果您将 imeOptions 设置为“actionDone”,那么您将在 onEditorAction 中检查“actionId == EditorInfo.IME_ACTION_DONE”。另外,请确保设置 android:inputType。
如果使用 Material Design 将代码放在 TextInputEditText 中。
这是上面链接示例中的 EditText:
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:inputType="text"
android:imeOptions="actionSend" />
您也可以使用 setImeOptions(int) 函数以编程方式进行设置。这是上面链接示例中的 OnEditorActionListener:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage();
handled = true;
}
return handled;
}
});
硬件键盘总是产生输入事件,但软件键盘在单行 EditTexts 中返回不同的 actionID 和空值。每次用户在此侦听器已设置的 EditText 中按 Enter 键时,此代码都会响应,无论 EditText 或键盘类型如何。
import android.view.inputmethod.EditorInfo;
import android.view.KeyEvent;
import android.widget.TextView.OnEditorActionListener;
listener=new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
if (event==null) {
if (actionId==EditorInfo.IME_ACTION_DONE);
// Capture soft enters in a singleLine EditText that is the last EditText.
else if (actionId==EditorInfo.IME_ACTION_NEXT);
// Capture soft enters in other singleLine EditTexts
else return false; // Let system handle all other null KeyEvents
}
else if (actionId==EditorInfo.IME_NULL) {
// Capture most soft enters in multi-line EditTexts and all hard enters.
// They supply a zero actionId and a valid KeyEvent rather than
// a non-zero actionId and a null event like the previous cases.
if (event.getAction()==KeyEvent.ACTION_DOWN);
// We capture the event when key is first pressed.
else return true; // We consume the event when the key is released.
}
else return false;
// We let the system handle it when the listener
// is triggered by something that wasn't an enter.
// Code from this point on will execute whenever the user
// presses enter in an attached view, regardless of position,
// keyboard, or singleLine status.
if (view==multiLineEditText) multiLineEditText.setText("You pressed enter");
if (view==singleLineEditText) singleLineEditText.setText("You pressed next");
if (view==lastSingleLineEditText) lastSingleLineEditText.setText("You pressed done");
return true; // Consume the event
}
};
在 singleLine=false 中输入键的默认外观给出了一个弯曲的箭头输入键盘。当最后一个 EditText 中的 singleLine=true 时,键表示 DONE,而在 EditTexts 之前它表示 NEXT。默认情况下,此行为在所有 vanilla、android 和 google 模拟器中是一致的。 scrollHorizontal 属性没有任何区别。空测试很重要,因为手机对软输入的响应留给制造商,即使在模拟器中,香草 Level 16 模拟器也会响应多行和滚动水平 EditTexts 中的长软输入,actionId 为 NEXT,null 为事件。
我知道这是一岁了,但我刚刚发现这非常适合 EditText。
EditText textin = (EditText) findViewById(R.id.editText1);
textin.setInputType(InputType.TYPE_CLASS_TEXT);
它可以防止除文本和空格之外的任何内容。我不能制表符、“返回”(“\n”)或任何东西。
正如 Chad 响应的附录(这对我来说几乎完美),我发现我需要添加对 KeyEvent 操作类型的检查,以防止我的代码执行两次(一次在按键上,一次在按键下事件)。
if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN)
{
// your code here
}
有关重复动作事件(按住回车键)等的信息,请参阅 http://developer.android.com/reference/android/view/KeyEvent.html。
我也有类似的目的。我想解决在扩展 TextView 的 AutoCompleteTextView 中按下键盘上的“Enter”键(我想自定义)。我从上面尝试了不同的解决方案,它们似乎有效。但是,当我将设备(带有 AOKP ROM 的 Nexus 4)上的输入类型从 SwiftKey 3(它工作得很好)切换到标准的 Android 键盘(而不是从侦听器处理我的代码时,我遇到了一些问题,新行是按“Enter”键后输入。我花了一段时间来处理这个问题,但我不知道无论您使用哪种输入类型,它是否在所有情况下都能正常工作。
所以这是我的解决方案:
将xml中TextView的输入类型属性设置为“text”:
android:inputType="text"
自定义键盘上“Enter”键的标签:
myTextView.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);
为 TextView 设置一个 OnEditorActionListener:
myTextView.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event)
{
boolean handled = false;
if (event.getAction() == KeyEvent.KEYCODE_ENTER)
{
// Handle pressing "Enter" key here
handled = true;
}
return handled;
}
});
我希望这可以帮助其他人避免我遇到的问题,因为他们几乎把我逼疯了。
在您的 xml 中,将 imeOptions 属性添加到 editText
<EditText
android:id="@+id/edittext_additem"
...
android:imeOptions="actionDone"
/>
然后,在您的 Java 代码中,将 OnEditorActionListener 添加到相同的 EditText
mAddItemEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(actionId == EditorInfo.IME_ACTION_DONE){
//do stuff
return true;
}
return false;
}
});
这是解释 - imeOptions=actionDone 会将“actionDone”分配给 EnterKey。键盘中的 EnterKey 将从“Enter”变为“Done”。因此,当按下 Enter 键时,它将触发此操作,因此您将处理它。
你也可以这样做。。
editText.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
{
Log.i("event", "captured");
return false;
}
return false;
}
});
enter
时,整个编辑文本会向下移动...我该如何解决这个问题?
首先,您必须设置 EditText 听按键
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Set the EditText listens to key press
EditText edittextproductnumber = (EditText) findViewById(R.id.editTextproductnumber);
edittextproductnumber.setOnKeyListener(this);
}
其次,定义按键时的事件,例如设置TextView文本的事件:
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
// Listen to "Enter" key press
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))
{
TextView textviewmessage = (TextView) findViewById(R.id.textViewmessage);
textviewmessage.setText("You hit 'Enter' key");
return true;
}
return false;
}
最后,不要忘记在顶部导入 EditText、TextView、OnKeyListener、KeyEvent:
import android.view.KeyEvent;
import android.view.View.OnKeyListener;
import android.widget.EditText;
import android.widget.TextView;
password.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if(event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
submit.performClick();
return true;
}
return false;
}
});
对我来说效果很好除了隐藏键盘
完美工作
public class MainActivity extends AppCompatActivity {
TextView t;
Button b;
EditText e;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button) findViewById(R.id.b);
e = (EditText) findViewById(R.id.e);
e.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (before == 0 && count == 1 && s.charAt(start) == '\n') {
b.performClick();
e.getText().replace(start, start + 1, ""); //remove the <enter>
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void afterTextChanged(Editable s) {}
});
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
b.setText("ok");
}
});
}
}
完美工作
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId != 0 || event.getAction() == KeyEvent.ACTION_DOWN) {
// Action
return true;
} else {
return false;
}
}
});
xml
<EditText
android:id="@+id/editText2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:imeOptions="actionGo|flagNoFullscreen"
android:inputType="textPassword"
android:maxLines="1" />
这应该工作
input.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {}
@Override
public void beforeTextChanged(CharSequence s, int start,
int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
if( -1 != input.getText().toString().indexOf( "\n" ) ){
input.setText("Enter was pressed!");
}
}
});
在您的编辑器中键入此代码,以便它可以导入必要的模块。
query.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if(actionId == EditorInfo.IME_ACTION_DONE
|| keyEvent.getAction() == KeyEvent.ACTION_DOWN
|| keyEvent.getAction() == KeyEvent.KEYCODE_ENTER) {
// Put your function here ---!
return true;
}
return false;
}
});
你可以用这种方式
editText.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Do some things
return true;
}
return false;
});
您可以看到操作列表 there。
例如:
IME_ACTION_GO
IME_ACTION_SEARCH
IME_ACTION_SEND
如果您使用 DataBinding,请参阅 https://stackoverflow.com/a/52902266/2914140 和 https://stackoverflow.com/a/67933283/2914140。
绑定.kt:
@BindingAdapter("onEditorEnterAction")
fun EditText.onEditorEnterAction(callback: OnActionListener?) {
if (f == null) setOnEditorActionListener(null)
else setOnEditorActionListener { v, actionId, event ->
val imeAction = when (actionId) {
EditorInfo.IME_ACTION_DONE,
EditorInfo.IME_ACTION_SEND,
EditorInfo.IME_ACTION_GO -> true
else -> false
}
val keydownEvent = event?.keyCode == KeyEvent.KEYCODE_ENTER
&& event.action == KeyEvent.ACTION_DOWN
if (imeAction or keydownEvent) {
callback.enterPressed()
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}
}
interface OnActionListener {
fun enterPressed()
}
布局.xml:
<data>
<variable
name="viewModel"
type="YourViewModel" />
</data>
<EditText
android:imeOptions="actionDone|actionSend|actionGo"
android:singleLine="true"
android:text="@={viewModel.message}"
app:onEditorEnterAction="@{() -> viewModel.send()}" />
这在 LG Android 手机上运行良好。它可以防止 ENTER
和其他特殊字符被解释为普通字符。 Next
或 Done
按钮会自动出现,并且 ENTER
会按预期工作。
edit.setInputType(InputType.TYPE_CLASS_TEXT);
这是一个简单的静态函数,您可以将其放入 Utils
或 Keyboards
类中,当用户按下硬件或软件键盘上的返回键时,该函数将执行代码。这是@earlcasper 出色答案的修改版
/**
* Return a TextView.OnEditorActionListener that will execute code when an enter is pressed on
* the keyboard.<br>
* <code>
* myTextView.setOnEditorActionListener(Keyboards.onEnterEditorActionListener(new Runnable()->{
* Toast.makeText(context,"Enter Pressed",Toast.LENGTH_SHORT).show();
* }));
* </code>
* @param doOnEnter A Runnable for what to do when the user hits enter
* @return the TextView.OnEditorActionListener
*/
public static TextView.OnEditorActionListener onEnterEditorActionListener(final Runnable doOnEnter){
return (__, actionId, event) -> {
if (event==null) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Capture soft enters in a singleLine EditText that is the last EditText.
doOnEnter.run();
return true;
} else if (actionId==EditorInfo.IME_ACTION_NEXT) {
// Capture soft enters in other singleLine EditTexts
doOnEnter.run();
return true;
} else {
return false; // Let system handle all other null KeyEvents
}
} else if (actionId==EditorInfo.IME_NULL) {
// Capture most soft enters in multi-line EditTexts and all hard enters.
// They supply a zero actionId and a valid KeyEvent rather than
// a non-zero actionId and a null event like the previous cases.
if (event.getAction()==KeyEvent.ACTION_DOWN) {
// We capture the event when key is first pressed.
return true;
} else {
doOnEnter.run();
return true; // We consume the event when the key is released.
}
} else {
// We let the system handle it when the listener
// is triggered by something that wasn't an enter.
return false;
}
};
}
文本字段上的 InputType 必须是 text
才能使 CommonsWare 所说的工作。刚刚尝试了所有这些,试用前没有inputType,没有任何效果,Enter一直注册为软输入。在 inputType = text
之后,包括 setImeLabel 在内的一切都起作用了。
示例: android:inputType="text"
final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
// Perform action on key press
Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
使用 Kotlin,我创建了一个函数来处理 EditText 的各种“完成”式操作,包括键盘,并且可以修改它,也可以根据需要处理其他键:
private val DEFAULT_ACTIONS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT = arrayListOf(EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_GO, EditorInfo.IME_ACTION_SEARCH, EditorInfo.IME_ACTION_DONE)
private val DEFAULT_KEYS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT = arrayListOf(KeyEvent.KEYCODE_ENTER, KeyEvent.KEYCODE_NUMPAD_ENTER)
fun EditText.setOnDoneListener(function: () -> Unit, onKeyListener: OnKeyListener? = null, onEditorActionListener: TextView.OnEditorActionListener? = null,
actionsToHandle: Collection<Int> = DEFAULT_ACTIONS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT,
keysToHandle: Collection<Int> = DEFAULT_KEYS_TO_HANDLE_AS_DONE_FOR_EDIT_TEXT) {
setOnEditorActionListener { v, actionId, event ->
if (onEditorActionListener?.onEditorAction(v, actionId, event) == true)
return@setOnEditorActionListener true
if (actionsToHandle.contains(actionId)) {
function.invoke()
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}
setOnKeyListener { v, keyCode, event ->
if (onKeyListener?.onKey(v, keyCode, event) == true)
return@setOnKeyListener true
if (event.action == KeyEvent.ACTION_DOWN && keysToHandle.contains(keyCode)) {
function.invoke()
return@setOnKeyListener true
}
return@setOnKeyListener false
}
}
因此,示例用法:
editText.setOnDoneListener({
//do something
})
至于更改标签,我认为这取决于键盘应用程序,并且通常仅在横向更改,如 here 所示。无论如何,这个示例用法:
editText.imeOptions = EditorInfo.IME_ACTION_DONE
editText.setImeActionLabel("ASD", editText.imeOptions)
或者,如果您想使用 XML:
<EditText
android:id="@+id/editText" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:imeActionLabel="ZZZ" android:imeOptions="actionDone" />
结果(以横向显示):
https://i.stack.imgur.com/gYoE2.png
Kotlin 解决方案使用 Lambda 表达式对输入新闻做出反应:
editText.setOnKeyListener { _, keyCode, event ->
if(keyCode == KeyEvent.KEYCODE_ENTER && event.action==KeyEvent.ACTION_DOWN){
//react to enter press here
}
true
}
不对事件类型进行额外检查将导致该侦听器在按下一次时被调用两次(一次用于 ACTION_DOWN,一次用于 ACTION_UP)
一种可靠的方式来响应 <enter>在 EditText 中包含 TextWatcher、LocalBroadcastManager 和 BroadcastReceiver。您需要添加 v4 support library 才能使用 LocalBroadcastManager。我使用 vogella.com 的教程:7.3 "Local broadcast events with LocalBroadcastManager" 因为它完整简洁的代码示例。在 onTextChanged 中 before 是 更改结束的索引更改之前>;减去开始。当在 TextWatcher 中 UI 线程忙于更新 editText 的可编辑内容时,我们发送一个 Intent 以在 UI 线程完成更新 editText 时唤醒 BroadcastReceiver。
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.text.Editable;
//in onCreate:
editText.addTextChangedListener(new TextWatcher() {
public void onTextChanged
(CharSequence s, int start, int before, int count) {
//check if exactly one char was added and it was an <enter>
if (before==0 && count==1 && s.charAt(start)=='\n') {
Intent intent=new Intent("enter")
Integer startInteger=new Integer(start);
intent.putExtra("Start", startInteger.toString()); // Add data
mySendBroadcast(intent);
//in the BroadcastReceiver's onReceive:
int start=Integer.parseInt(intent.getStringExtra("Start"));
editText.getText().replace(start, start+1,""); //remove the <enter>
//respond to the <enter> here
android:inputType="textCapSentences"
),则回车会从输入中过滤掉,因此当用户按下 Enter 键时不会调用 onTextChanged()。
Butterknife 还没有回答这个问题
布局 XML
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/some_input_hint">
<android.support.design.widget.TextInputEditText
android:id="@+id/textinput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionSend"
android:inputType="text|textCapSentences|textAutoComplete|textAutoCorrect"/>
</android.support.design.widget.TextInputLayout>
JAVA应用
@OnEditorAction(R.id.textinput)
boolean onEditorAction(int actionId, KeyEvent key){
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND || (key.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
//do whatever you want
handled = true;
}
return handled;
}
将“txtid”替换为您的 EditText ID。
EditText txtinput;
txtinput=findViewById(R.id.txtid)
txtinput.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
//Code for the action you want to proceed with.
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
添加这些依赖项,它应该可以工作:
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
当用户按下返回键时,这将为您提供一个可调用的函数。
fun EditText.setLineBreakListener(onLineBreak: () -> Unit) {
val lineBreak = "\n"
doOnTextChanged { text, _, _, _ ->
val currentText = text.toString()
// Check if text contains a line break
if (currentText.contains(lineBreak)) {
// Uncommenting the lines below will remove the line break from the string
// and set the cursor back to the end of the line
// val cleanedString = currentText.replace(lineBreak, "")
// setText(cleanedString)
// setSelection(cleanedString.length)
onLineBreak()
}
}
}
用法
editText.setLineBreakListener {
doSomething()
}
检测 Enter 键被按下的最简单方法是:
mPasswordField.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event!= null) { // KeyEvent: If triggered by an enter key, this is the event; otherwise, this is null.
signIn(mEmailField.getText().toString(), mPasswordField.getText().toString());
return true;
} else {
return false;
}
}
});