Android 使用键盘上的“完成”按钮来单击按钮

好了,在我的应用程序,我有一个字段为用户输入一个数字。我将字段设置为只接受数字。当用户点击字段时,它会弹出键盘。在键盘上(在 ICS 上)有一个完成按钮。我想在键盘上的完成按钮触发提交按钮,我在我的应用程序。我的代码如下。

package com.michaelpeerman.probability;


import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;


public class ProbabilityActivity extends Activity implements OnClickListener {


private Button submit;
ProgressDialog dialog;
int increment;
Thread background;
int heads = 0;
int tails = 0;


public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.main);
submit = ((Button) findViewById(R.id.submit));
submit.setOnClickListener(this);
}


public void onClick(View view) {
increment = 1;
dialog = new ProgressDialog(this);
dialog.setCancelable(true);
dialog.setMessage("Flipping Coin...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(0);
EditText max = (EditText) findViewById(R.id.number);
int maximum = Integer.parseInt(max.getText().toString());
dialog.setMax(maximum);
dialog.show();
dialog.setOnCancelListener(new OnCancelListener(){


public void onCancel(DialogInterface dialog) {


background.interrupt();
TextView result = (TextView) findViewById(R.id.result);
result.setText("heads : " + heads + "\ntails : " + tails);




}});




background = new Thread(new Runnable() {
public void run() {
heads=0;
tails=0;
for (int j = 0; !Thread.interrupted() && j < dialog.getMax(); j++) {
int i = 1 + new Random().nextInt(2);
if (i == 1)
heads++;
if (i == 2)
tails++;
progressHandler.sendMessage(progressHandler.obtainMessage());
}
}
});
background.start();
}


Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {


dialog.incrementProgressBy(increment);
if (dialog.getProgress() == dialog.getMax()) {
dialog.dismiss();
TextView result = (TextView) findViewById(R.id.result);
result.setText("heads : " + heads + "\ntails : " + tails);




}
}


};


}
144699 次浏览

试试这个:

max.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
if(keyCode == event.KEYCODE_ENTER){
//do what you want
}
}
});

你也可以使用这个(设置一个特殊的监听器,当一个操作在 EditText 上执行时调用) ,它可以同时工作于 DONE 和 RETURN:

max.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
Log.i(TAG,"Enter pressed");
}
return false;
}
});

另外,在键盘本身显示一个漂亮的发送按钮会使它变得更好:

android:imeOptions="actionSend"
android:inputType="text"

试试这个 Xamarin。 Android (跨平台)

edittext.EditorAction += (object sender, TextView.EditorActionEventArgs e) {
if (e.ActionId.Equals (global::Android.Views.InputMethods.ImeAction.Done)) {
//TODO Something
}
};

在布局中使用这个类:

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;
}

}

在 xml 中:

<com.test.custom.ActionEditText
android:id="@+id/postED"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@android:color/transparent"
android:gravity="top|left"
android:hint="@string/msg_type_message_here"
android:imeOptions="actionSend"
android:inputType="textMultiLine"
android:maxLines="5"
android:padding="5dip"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:textColor="@color/white"
android:textSize="20sp" />

您可以在密钥侦听器上实现:

public class ProbabilityActivity extends Activity implements OnClickListener, View.OnKeyListener {

在 onCreate 中:

max.setOnKeyListener(this);

...

@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
if(keyCode == event.KEYCODE_ENTER){
//call your button method here
}
return true;
}

你可以试试 强 > IME_ACTION_DONE

此操作执行一个“完成”操作,不进行任何输入,并且 IME 将关闭。

 Your_EditTextObj.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
/* Write your logic here that will be executed when user taps next button */




handled = true;
}
return handled;
}
});

在创建 LoginActivity 时,我从 AndroidStudio 复制了以下代码。 我使用了 ime 属性

在你的布局里

<EditText android:id="@+id/unidades" android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint="@string/prompt_unidades"
android:inputType="number" android:maxLines="1"
android:singleLine="true"
android:textAppearance="?android:textAppearanceSmall"
android:enabled="true" android:focusable="true"
android:gravity="right"
android:imeActionId="@+id/cantidad"
android:imeActionLabel="@string/add"
android:imeOptions="actionUnspecified"/>

在你的活动中

editTextUnidades.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == R.id.cantidad || actionId == EditorInfo.IME_NULL) {
addDetalle(null);
return true;
}
return false;
}
});
max.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
if(keyCode == event.KEYCODE_ENTER){
//do what you want
}
}
});

您的 LastEdittext.setOnEditorActionListener 调用此方法自动命中 api

我用 et _ password 在 LoginActivity 打电话

 et_Pass.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {


Log.i(TAG,"Enter pressed");
Log.i(Check Internet," and Connect To Server");


}
return false;
}
});

工作顺利

如果你想抓住键盘输入按钮做你的工作,你想通过任何事件,如按钮点击,你可以写下面的文本视图的简单代码

Edittext ed= (EditText) findViewById(R.id.edit_text);


ed.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Do you job here which you want to done through event
}
return false;
}
});

这是科特林的版本:

editText.setOnEditorActionListener { v, actionId, event ->
if(actionId == EditorInfo.IME_ACTION_DONE){
//Put your action there
true
} else {
false
}
}

Kotlin 溶液

在 Kotlin,处理已完成行动的基本方法是:

edittext.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Call your code here
true
}
false
}

Kotlin 分部

使用此命令在主代码中调用 edittext.onDone {/*action*/},使其更具可读性和可维护性

edittext.onDone { submitForm() }


fun EditText.onDone(callback: () -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
true
}
false
}
}

不要忘记将这些选项添加到编辑文本中

<EditText ...
android:imeOptions="actionDone"
android:inputType="text"/>

如果你需要 inputType="textMultiLine"的支持,读读这篇文章

Kotlin 和数字键盘

如果您使用的是数字键盘,则必须取消键盘, 就像这样:

editText.setOnEditorActionListener { v, actionId, event ->
if (action == EditorInfo.IME_ACTION_DONE || action == EditorInfo.IME_ACTION_NEXT || action == EditorInfo.IME_ACTION_UNSPECIFIED) {
//hide the keyboard
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(windowToken, 0)
//Take action
editValue.clearFocus()
return true
} else {
return false
}
}