Ich habe festgestellt, dass in der Android Market Application
Wenn Sie auf die Schaltfläche Suchen klicken, wird die Tastatur angezeigt, aber wenn Sie auf die Schaltfläche back
Schaltfläche, die Suche EditText
wird unsichtbar und die keyboard
verborgen ist. Das Problem ist, dass ich die EditText
nachdem die Tastatur nach dem Drücken der Zurück-Taste ausgeblendet wurde, weil ich keinen Listener für das Ausblenden des Tastaturereignisses finden kann. Ich habe dieses Beispiel gefunden Wie erfasst man das Ereignis "Virtuelle Tastatur ein-/ausblenden" in Android? aber es funktioniert nicht auf der Soft-Tastatur.
Antworten
Zu viele Anzeigen?Ich denke, Sie sollten dies mit Hilfe von Fokus behandeln:
final InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
edttext.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!(hasFocus))
{
mgr.hideSoftInputFromWindow(edttext.getWindowToken(), 0);
}
}
});
Hey, ich glaube, die Market-App verwendet den GoogleSearch-Dialog (siehe Auffindbare Aktivität ).
Sie können den editText in ein popupWindow implementieren und das poupwindow als fokussierbar einstellen. Zeigen Sie die Tastatur, wenn Ihr Popup angezeigt wird. in onDismiss verstecken Sie die Tastatur.
popupWindow.setFocusable(true);
popupWindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
// TODO Auto-generated method stub
inputMethodManager.hideSoftInputFromWindow(
edttxtSearchBar.getWindowToken(), 0); }
Dadurch wird sichergestellt, dass, wenn Sie irgendwo außerhalb des Popup-Fensters klicken oder die Taste "Zurück" drücken, das Popup-Fenster ebenfalls verschwindet (zusammen mit der Tastatur).
Die Google Market-Anwendung verwendet Fragmente über das API Support Package. Wenn Sie auf "Zurück" klicken, gehen Sie tatsächlich im Fragmentstapel zurück. Es ist so, als würde man eine Aktivität zurückgehen, ohne den Bildschirm zu wischen. Das Fragment, zu dem sie zurückgehen, enthält nicht das Suchfeld, weshalb es verschwindet.
**perfect answer** REFER THIS **SIMPLE EXAMPLE**...ITS TOOOO GOOOODDDD
KTBEditTextWithListener.java // Custom edittext
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
public class KTBEditTextWithListener extends android.widget.EditText {
public KTBEditTextWithListener(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public KTBEditTextWithListener(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// createFont(context);
}
public KTBEditTextWithListener(Context context, AttributeSet attrs) {
super(context, attrs);
// createFont(context);
}
private BackPressedListener mOnImeBack;
/* constructors */
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
if (mOnImeBack != null) mOnImeBack.onImeBack(this);
}
return super.dispatchKeyEvent(event);
}
public void setBackPressedListener(BackPressedListener listener) {
mOnImeBack = listener;
}
public interface BackPressedListener {
void onImeBack(KTBEditTextWithListener editText);
}
}
//my_layout.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.ktb.gopharma.views.KTBEditTextWithListener
android:id="@+id/edit_text"
style="@style/match_width">
</com.ktb.gopharma.views.KTBEditTextWithListener>
</LinearLayout>
//MyActivity.java
package com.ktb.gopharma;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import com.ktb.gopharma.views.KTBEditTextWithListener;
import com.ktb.gopharma.views.KTBEditTextWithListener.BackPressedListener;
import com.ktechbeans.gopharma.R;
public class MyActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
KTBEditTextWithListener editText = (KTBEditTextWithListener) findViewById(R.id.edit_text);
editText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
showToast("keypad opn");
}
});
editText.setBackPressedListener(new BackPressedListener() {
@Override
public void onImeBack(KTBEditTextWithListener editText) {
showToast("keypad close");
}
});
}
}