Android Market Application
検索ボタンをクリックするとキーボードが表示されますが、ボタンをクリックするとback
検索が非表示EditText
になり、keyboard
が非表示になります。問題はEditText
、キーボードイベントを非表示にするためのリスナーが見つからないため、戻るキーを押した後にキーボードが非表示になった後に非表示にできないことです。このサンプルを見つけましたAndroidで「仮想キーボードの表示/非表示」イベントをキャプチャする方法は?
ただし、ソフトキーボードでは機能しません。
13894 次
5 に答える
21
IME にディスパッチされる前に [戻る] ボタンをキャプチャするには、これを実装する必要があります。
于 2011-10-09T18:01:41.037 に答える
3
フォーカスを使用してこれを処理する必要があると思います:
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);
}
}
});
于 2011-10-03T11:42:20.287 に答える
0
Google マーケット アプリケーションは、API サポート パッケージを介してフラグメントを使用しています。戻るをクリックすると、実際にはフラグメント スタックに戻ります。画面をスワイプせずにアクティビティに戻るようなものです。彼らが戻るフラグメントには検索ボックスが含まれていないため、表示されなくなります。
于 2011-10-09T22:19:59.083 に答える
0
ねえ、マーケット アプリは googleSearch ダイアログを使用していると思います ( Searcheable activityをチェックしてください)。
editText を popupWindow に実装し、poupwindow をフォーカス可能に設定できます。ポップアップが表示されたときにキーボードを表示します。onDismiss でキーボードを非表示にします。
popupWindow.setFocusable(true);
popupWindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
// TODO Auto-generated method stub
inputMethodManager.hideSoftInputFromWindow(
edttxtSearchBar.getWindowToken(), 0); }
これにより、ポップアップの外側の任意の場所をクリックするか、ポップアップが(キーボードとともに)消えます。
于 2011-10-07T04:42:14.687 に答える
-2
**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");
}
});
}
}
于 2015-07-24T06:18:09.073 に答える