[解決済み】Android - プログラムでソフトキーボードを隠す/表示する【重複あり
質問
重複の可能性があります。
Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
まず最初に、私はすでに見た これ というスレッドがあります。私はそこに与えられた受け入れ方法を試してみましたが、何も私のために動作しませんでした。
私のアプリには2つの画面があります。
- 1つ目のテキストは、ユーザー名とパスワードの2つのEditTextです。
- 2つ目は、1つのListViewと1つのEditText - フィルタリングするためのものです。 リストビュー
最初の画面では、起動時にユーザー名のEditTextにフォーカスを当て、キーボードを表示させたい。 . これは私の実装です(不要なコードや関連性のないコードを削除して簡略化しています)。
#app_login.xml
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dip"
android:paddingRight="20dip">
<EditText android:id="@+id/username"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:hint="Username"
android:imeOptions="actionDone" android:inputType="text"
android:maxLines="1"/>
<EditText android:id="@+id/password"
android:password="true"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Password" />
</LinearLayout>
#AppLogin.java
class AppLogin extends Activity{
private EditText mUserNameEdit = null;
private EditText mPasswordEdit = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.app_login);
mUserNameEdit = (EditText) findViewById(R.id.username);
mPasswordEdit = (EditText) findViewById(R.id.password);
/* code to show keyboard on startup.this code is not working.*/
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT);
}//End of onCreate()
}
まあね。 起動時にキーボードが表示されない . そして、私のデザインは、そこにキーボードを必要とします。
では、次に 2ページ目 . すでに述べたように、そこにはlistViewとEditTextがあります。 起動時にはキーボードを隠し、ユーザーがeditTextに触れたときだけ表示させたい。 . 信じられますか、何をやっても アクティビティをロードすると、ソフトキーボードが表示されます。 . 非表示にすることができません。
#app_list_view.xml
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText android:id="@+id/filter_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search" android:inputType="text"
android:maxLines="1"/>
<ListView android:id="@id/android:list"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:layout_width="fill_parent"
android:focusable="true"
android:descendantFocusability="beforeDescendants"/>
</LinearLayout>
#AppList.java
public class MyListActivity extends ListActivity{
private EditText mfilterEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_list_view);
mFilterEditText = (EditText) findViewById(R.id.filter_edittext);
InputMethodManager imm = InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mFilterEditText.getWindowToken(), 0);
}
}
簡略化するために
- ログインページ(最初のページ)において、起動時にキーボードを表示させたい。
- SecondPage では、まずキーボードを非表示にし、その後に表示されるようにしたい。 editTextをタッチしたとき
そして、私の問題は、両方の場面で正反対のことが起こることです。 . 誰かがこの問題に直面したことがあるといいのですが。ちなみに、シミュレータとHTC Desire Phoneでテストしています。
#最終結果
まあ、ここにいる友人たちの助けもあって、なんとか動くようになったんだけどね。
1. 起動時にキーボードを表示する
2つの回答でうまくいきました。 一つは @CapDroid が提供しているもので、ハンドラを使用してそれを遅延させて投稿するというものです。
mUserNameEdit.postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(mUserNameEdit, 0);
}
},50);
2つ目の回答は@Dyarishさんによるものです。実は、彼は別のSOFスレッドにリンクしており、私はそのスレッドを見たことがありません。しかし、おかしなことに、この解決策は、私が最初に参照したスレッドで与えられているのです。そして、私は試していません。 というのも、他の投稿がたくさん票を集めているスレッドで、その投稿は0票だったからです。愚の骨頂。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
私としては、2番目のソリューションがきれいに見えたので、それにこだわることにしました。 また、@Dyarishの回答には、EditTextの下にあるScrollViewを使用してEditTextにフォーカスを与えるという巧妙なハックが含まれています。しかし、私は試していませんが、それは動作するはずです。でも、うまくはいかない。
2. アクティビティ開始時にキーボードを隠すには
私の場合、@Dyarish さんの提供する1つの回答のみが有効でした。そして、その解決策は EditTextsを含むレイアウトのXMLでfocusableInTouchModeの設定をしています。これはトリックでした
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
<EditText android:id="@+id/filter_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search" android:inputType="text"
android:maxLines="1"/>
<ListView android:id="@id/android:list"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:layout_width="fill_parent"
android:focusable="true"
android:descendantFocusability="beforeDescendants"/>
</LinearLayout>
とにかく、結局どちらもDyarishの答えを使うことになるんです。というわけで、彼に賞金を贈呈します。他の友人たちにも感謝します。 ということです。
解決方法は?
あなたのコードにこれを追加してください
android:focusableInTouchMode="true"
は、edittextボックスの起動時にキーパッドが表示されないようにします。この行は、EditTextBoxを含むリニアレイアウトに追加したい。これで、両方の問題を解決することができるはずです。 私はこれをテストしました。簡単な解決策です。
ie: app_list_view.xml ファイルにあります。
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
<EditText
android:id="@+id/filter_edittext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Search"
android:inputType="text"
android:maxLines="1"/>
<ListView
android:id="@id/android:list"
android:layout_height="fill_parent"
android:layout_weight="1.0"
android:layout_width="fill_parent"
android:focusable="true"
android:descendantFocusability="beforeDescendants"/>
</LinearLayout>
------------------ EDIT: 起動時にキーボードを表示させるには -----------------------
これは、起動時にユーザー名のエディットボックスにキーボードを表示させるためのものです。私がしたことは、空のScrollviewを.xmlファイルの下に追加しただけです。これにより、最初のedittextがフォーカスされ、キーボードがポップアップします。私はこれがハックであることを認めますが、私はあなたがこれを動作させたいだけだと仮定しています。私はこれをテストし、うまく動作しました。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="20dip"
android:paddingRight="20dip">
<EditText
android:id="@+id/userName"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Username"
android:imeOptions="actionDone"
android:inputType="text"
android:maxLines="1"
/>
<EditText
android:id="@+id/password"
android:password="true"
android:singleLine="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Password" />
<ScrollView
android:id="@+id/ScrollView01"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</ScrollView>
</LinearLayout>
もっと雄弁な解決策をお探しなら、私は これ という質問がありますが、これは上記の解決策ほど簡単ではありませんが、おそらくより良い解決策でしょう。私はテストしていませんが、どうやらうまくいきそうです。あなたが試した解決策に似ていると思いますが、うまくいきませんでしたね。
これがあなたが探しているものであることを願っています。
乾杯
関連
-
[解決済み] ユーザーがDIVの外側をクリックしたときに、jQueryを使用してDIVを非表示にする
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Android: EditTextにフォーカスがあるとき、自動的にソフトキーボードを表示する
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み】編集テキストにフォーカスが当たっている時にソフトキーボードを表示させる方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Application startメソッドで例外が発生する。JavaFx 11
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] Java- <T extends Comparable<T>>の意味?
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] Java: getInstanceとStaticの比較
-
[解決済み] Javaコンパイラーエラー:ステートメントではありません
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?