Ami*_*ari 7 android android-manifest android-softkeyboard android-edittext
我有一个EditText,Activity我希望它是活动的,当我打开它时,软键盘会打开Activity.这是我xml的EditText:
<EditText
android:background="@null"
android:cursorVisible="true"
android:elegantTextHeight="true"
android:enabled="true"
android:focusable="true"
android:hint="Search"
android:id="@+id/editText11"
android:inputType="textNoSuggestions|textCapSentences"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:singleLine="true"
android:textColor="#000000"
android:textCursorDrawable="@null" />
Run Code Online (Sandbox Code Playgroud)
我已经习惯android:windowSoftInputMode="stateVisible"了这项活动EditText.
问题是,当我按back一次键盘时,键盘不会隐藏(理想情况下它会在所有其他键盘中隐藏EditText),当我back再次按下键盘时,键盘会关闭Activity.在第一次back按下时,我没有接到onBackPressed()第二次back按下的电话,我这样做.为什么会发生这种行为以及如何解决?
编辑我想要的是,如果键盘打开,按下键应关闭键盘,如果键盘未打开,则关闭活动.
Nru*_*ikh 12
试试这个 ...
创建名为Util的类并放置此代码
public static void hideSoftKeyboard(Activity activity) {
final InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager.isActive()) {
if (activity.getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并调用Activity的onBackPressed()
小智 5
我在 BaseActivity.java 中添加以下代码
@Override
protected void onPause() {
super.onPause();
final InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
if (inputMethodManager != null && inputMethodManager.isActive()) {
if (getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
根据您的要求:
如果键盘打开,按返回键应关闭键盘,如果键盘未打开,则关闭活动
我已经测试过我的代码工作正常。
第 1 步:CustomEditText如下创建。
<com.yourpackage.yourappname.CustomEditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)
第 2 步:创建CustomEditText.java类。
public class CustomEditText extends EditText {
Context context;
private static Activity mSearchActivity;;
public CustomEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if(mSearchActivity != null && event.getKeyCode() == KeyEvent.KEYCODE_BACK){
KeyEvent.DispatcherState state = getKeyDispatcherState();
if(state != null){
if(event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0){
InputMethodManager mgr = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(this.getWindowToken(), 0);
}
else if(event.getAction() == KeyEvent.ACTION_UP && !event.isCanceled() && state.isTracking(event)){
mSearchActivity.onBackPressed();
return true;
}
}
}
return super.dispatchKeyEventPreIme(event);
}
}
Run Code Online (Sandbox Code Playgroud)
步骤 3:在您的 Activity 中初始化 CustomEditText 并隐藏 KeyBoard,如下所示。
CustomEditText editText = (CustomEditText) findViewById(R.id.edittext);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
Run Code Online (Sandbox Code Playgroud)
第 4 步:在您的 Activity 中只需添加Override方法即可onBackPressed()。
@Override
public void onBackPressed() {
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9116 次 |
| 最近记录: |