单击后退按钮可降低软键盘并同时退出 activity
one back-button click lowers a soft-keyboard and exits activity at the same time
我在我的 ActivityB 中使用清单中的这些行启动我的软键盘
<activity android:name=".ActivityB"
android:label="@string/title_activity_activity_b"
android:windowSoftInputMode="stateAlwaysVisible" >
</activity>
现在我希望当我按下后退按钮时我立即退出(完成)activity。我只想按一次后退按钮退出 activity。
现在我必须先按一次后退按钮降低软键盘,然后再按一次后退按钮退出activity。
这可能吗?我该怎么做?我尝试了该站点的各种常用技术,但其中 none 有效。我用LG L50做开发
编辑:我正在扩展 activity 而不是 appcompatactivity
编辑 2:程序现在可以运行了,这是代码
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}
MyEditText.java
package com.example.actionbarimagetest;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class MyEditText extends EditText implements OnClickListener {
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyEditText(Context context) {
super(context);
}
public MyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void FlashBorder()
{
//do some custom action
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText txt = (EditText) v;
txt.selectAll();
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
System.out.println("KEYCODE BACK");
((Activity)getContext()).finish();
return true;
}
return super.onKeyPreIme(keyCode, event);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<com.example.actionbarimagetest.MyEditText
android:id="@+id/edtTaskName"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</LinearLayout>
只需覆盖 activity 方法并显式完成
@Override
public void onBackPressed() {
finish();
}
已更新2
是的,这不适用于这种情况。但我尝试了几种解决方案,其中一种确实有效。您需要扩展 EditText 并覆盖方法:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
((Activity)getContext()).finish();
return true;
}
return super.onKeyPreIme(keyCode, event);
}
注:
不要忘记用新的 class
替换布局 xml 中之前的 EditText
Activity.onBackPressed()
不会工作,因为它是在(如果)没有其他东西处理后退按钮(IME 处理)之后调用的。
改写 Activity.dispatchKeyEvent()
:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.dispatchKeyEvent(event);
}
随时随地在您的后退按钮上调用以下函数:
yourMethod()
{
// close keyboard
InputMethodManager mgr = (InputMethodManager) TempActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(searchBox.getWindowToken(), 0);
//close activity
YourActivity.finish();
}
对于 android 设备的反压,请执行以下操作:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
yourMethod();
YourActivity.finish();
}
我在我的 ActivityB 中使用清单中的这些行启动我的软键盘
<activity android:name=".ActivityB"
android:label="@string/title_activity_activity_b"
android:windowSoftInputMode="stateAlwaysVisible" >
</activity>
现在我希望当我按下后退按钮时我立即退出(完成)activity。我只想按一次后退按钮退出 activity。
现在我必须先按一次后退按钮降低软键盘,然后再按一次后退按钮退出activity。
这可能吗?我该怎么做?我尝试了该站点的各种常用技术,但其中 none 有效。我用LG L50做开发
编辑:我正在扩展 activity 而不是 appcompatactivity
编辑 2:程序现在可以运行了,这是代码
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}
MyEditText.java
package com.example.actionbarimagetest;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class MyEditText extends EditText implements OnClickListener {
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyEditText(Context context) {
super(context);
}
public MyEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void FlashBorder()
{
//do some custom action
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
EditText txt = (EditText) v;
txt.selectAll();
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
System.out.println("KEYCODE BACK");
((Activity)getContext()).finish();
return true;
}
return super.onKeyPreIme(keyCode, event);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<com.example.actionbarimagetest.MyEditText
android:id="@+id/edtTaskName"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</LinearLayout>
只需覆盖 activity 方法并显式完成
@Override
public void onBackPressed() {
finish();
}
已更新2
是的,这不适用于这种情况。但我尝试了几种解决方案,其中一种确实有效。您需要扩展 EditText 并覆盖方法:
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) {
((Activity)getContext()).finish();
return true;
}
return super.onKeyPreIme(keyCode, event);
}
注: 不要忘记用新的 class
替换布局 xml 中之前的EditText
Activity.onBackPressed()
不会工作,因为它是在(如果)没有其他东西处理后退按钮(IME 处理)之后调用的。
改写 Activity.dispatchKeyEvent()
:
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
finish();
return true;
}
return super.dispatchKeyEvent(event);
}
随时随地在您的后退按钮上调用以下函数:
yourMethod()
{
// close keyboard
InputMethodManager mgr = (InputMethodManager) TempActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(searchBox.getWindowToken(), 0);
//close activity
YourActivity.finish();
}
对于 android 设备的反压,请执行以下操作:
@Override
public void onBackPressed() {
// TODO Auto-generated method stub
yourMethod();
YourActivity.finish();
}