重複の可能性:
Androidソフトキーボードを閉じる/隠す
まず最初に this threadを見ました。私はそこに与えられた受け入れられた方法を試みました。しかし何も私のために働きませんでした..
アプリには2つの画面があります。
最初の画面では、ユーザー名EditTextに起動時のフォーカスを設定し、キーボードを表示する必要があります。..これは私の実装です(不要な/無関係なコードを削除することで簡略化しました).
<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>
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に触れたときにだけ表示されるように私のキーボードを隠したい)私が試したことは何でもソフトキーボードはアクティビティを読み込んだときに表示されます..私はそれを隠すことができません..
<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>
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);
}
}
単純化する
そして、私の問題は、私が両方の機会に正反対になっていることです...誰かがこの問題に以前直面していたことを願っています。
まあ、私はそれをすべての友達の助けを借りて、ここでうまくいった。
1.起動時にキーボードを表示する
二つの答えが私のために働いた。 1つは@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によって提供されています。実際、彼は別のSOスレッドにリンクしていましたが、私はこれまで見たことがありませんでした。しかし面白いことに、この解決策は最初に参照したスレッドで与えられています。そして、私はそれを試したことがありません。なぜなら、他のすべての投稿にたくさんの投票があるスレッドで投票がゼロだったからです。愚かさの高さ..
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
私にとっては2番目の解決策はきちんと見えたので、それに固執することにしました。しかし最初の解決策は確かにうまくいきます。また@ Dyarishの答えには、EditTextの下にあるScrollViewを使ってEditTextにフォーカスを当てるという巧妙なハックが含まれています。きちんとしていない..
2.活動開始時にキーボードを隠すには
1つの答えだけが私のために働きました。それは@Dyarishによって提供されます。そして解決策は、editTextを含むレイアウトに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"
に追加すると、エディットボックスの起動時にキーパッドが表示されなくなります。この行を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>
------------------編集:起動時にキーボードを表示させる------------ -----------
これは、起動時にユーザー名edittextboxにキーボードを表示させるためです。 .xmlファイルの最後に空のScrollviewを追加するだけで、最初の編集テキストにフォーカスが置かれ、キーボードがポップアップします。私はこれがハックであることを認めます、しかし私はあなたがこれを機能させたいだけであると思います。私はそれをテストしました、そしてそれはうまく働きます。
<?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>
あなたがもっと雄弁な解決策を探しているなら、私はあなたを助けるかもしれない この の質問を見つけました、それは上の解決策ほど単純ではありませんがおそらくより良い解決策です。私はそれをテストしていませんが、どうやらうまくいきます。私はそれがあなたのためにうまくいかなかったあなたが試した解決策に似ていると思う。
これがあなたが探しているものであることを願っています。
乾杯!
アップデート2
@Override
protected void onResume() {
super.onResume();
mUserNameEdit.requestFocus();
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);
}
},200); //use 300 to make it run when coming back from lock screen
}
私は一生懸命に努力して解決策を見つけました...新しい活動が始まるときはいつでもキーボード傾けて開くことができますが、我々はonResumeでRunnableとそれを使うことができます正常に動作しているので、このコードを試してみてください...
アップデート1
この行をあなたのAppLogin.Java
に追加してください
mUserNameEdit.requestFocus();
そしてあなたのAppList.Java
のこの行
listview.requestFocus()'
この後、アプリケーションが動作していないか確認してから、この行をAndroidManifest.xml
ファイルに追加します。
<activity Android:name=".AppLogin" Android:configChanges="keyboardHidden|orientation"></activity>
<activity Android:name=".AppList" Android:configChanges="keyboard|orientation"></activity>
元の答え
InputMethodManager imm = (InputMethodManager)this.getSystemService(Service.INPUT_METHOD_SERVICE);
キーボードを隠す
imm.hideSoftInputFromWindow(ed.getWindowToken(), 0);
ショーキーボード用
imm.showSoftInput(ed, 0);
editTextにフォーカスする
ed.requestFocus();
edはEditTextです。
このコードを試してください。
ソフトキーボードを表示するには:
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
}
SoftKeyboardを非表示にする場合-
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);
}
最初のウィンドウでInputMethodManager.SHOW_IMPLICIT
を試しましたか。
そして2番目のウィンドウに隠れるためにはInputMethodManager.HIDE_IMPLICIT_ONLY
を使います
編集:
それでもまだうまくいかない場合は、おそらく間違った場所に置いているでしょう。 onFinishInflate()
をオーバーライドして表示/非表示を切り替えます。
@override
public void onFinishInflate() {
/* code to show keyboard on startup */
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(mUserNameEdit, InputMethodManager.SHOW_IMPLICIT);
}