まず最初に、私はすでにこのスレッドを見ました。私はそこで与えられた受け入れられた方法を試しましたが、何もうまくいきませんでした。
アプリに2つの画面があります。
- 最初のものには2つのEditTextがあります-1つはユーザー名用、もう1つはパスワード用です
- 2番目のものには1つのListViewとEditTextがあります-listViewをフィルタリングします
最初の画面では、ユーザー名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に触れたときにのみ表示されるようにします。
そして、私の問題は、両方の場合で正反対のものを取得していることです。誰かが以前にこの問題に直面したことを願っています。ところで、私はシミュレーターとHTCDesire電話でテストしています。
#FINAL OUTCOME
さて、ここにいるすべての友達の助けを借りて、私はそれを機能させました。
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スレッドにリンクしていました。しかし、面白いことに、このソリューションは、最初に参照したスレッドで提供されています。そして、他のすべての投稿がたくさんの票を持っているスレッドで投票がゼロだったので、私はそれを試していません。愚かさの高さ。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
私にとって、2番目の解決策はきれいに見えたので、私はそれに固執することにしました。しかし、最初の解決策は確かに機能します。また、@ Dynarishの回答には、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の答えを使うことになります。だから私は彼に賞金を授与しています。私を助けようとした他のすべての友達に感謝します。