java - 非表示 - android ダイアログ キーボード




プログラムでAndroidソフトキーボードの表示/非表示を切り替える (3)

更新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
    }

私は非常に懸命に試して、解決策を見つけました...新しいアクティビティが始まると、キーボードが開くことはありませんが、私たちはonResumeRunnableを使用でき、 うまくいきますので、このコードを試してみてください。

更新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です

可能な重複:
Androidソフトキーボードを閉じる/隠す

まず最初に私はすでにこのスレッドを見ました。 私はそこに与えられた方法を受け入れようとしたが、私のためには何も働かなかった。

私は私のアプリに2つの画面があります。

  • 最初のものは2つのEditTextを持っています - 一つはユーザー名用、もう一つはパスワード用です
  • 2番目にはListViewが1つあり、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);
   }
}

簡素化する

  1. ログインページ(最初のページ)起動時にキーボードを表示したい
  2. SecondPageではキーボードを最初に隠しておき、ユーザーがeditTextをタッチしたときにのみ表示したい

そして、私の問題は、両方の機会に正反対になってきています...誰かがこの問題に直面したいと思っています.BTW私はシミュレータとHTC Desireの電話でテストしています。

ファイナル・アウトカム

うーん、私はここですべての友人の助けを借りて、それを働かせました。

1.起動時にキーボードを表示するには

2つの答えが私のために働いた。 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スレッドにリンクしています。 しかし面白いことは、この解決策は私が最初に参照したスレッドに与えられていることです。 そして、私はそれが他のすべての投稿がたくさんの票を持っているスレッドで0票を持っていたのでそれを試していない。愚かさの高さ..

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

私にとっては2番目の解決策はきれいに見えたので、私はそれに固執することにしました。 また、@ Dyarishの答えには、EditTextの下にScrollViewを使ってフォーカスを与えるEditTextの巧妙なハックが含まれています。しかし、私はそれを試していませんが、動作するはずです。 しかし、きちんとしていない..

2.アクティビティ開始時にキーボードを非表示にするには

@Dyarishによって提供された回答は1つだけでした。 そして、解決策は、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"は、あなたのキーパッドがあなたのedittextボックスの起動時に現れないことを確認します。 EditTextBoxを含む線形レイアウトにこの線を追加したいとします。 両方の問題を解決するには、これで遊ぶことができます。 私はこれをテストしました。 シンプルなソリューション。

つまり、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が追加され、最初の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>

あなたがより雄弁な解決策を探しているなら、私はあなたを助けるかもしれないthis質問を見つけました。それは上記の解決策ほどシンプルではありませんが、おそらくもっと良い解決策でしょう。 私はそれをテストしていないが、明らかに動作します。 私はあなたがあなたのために働かなかったあなたが試みた解決策に似ていると思う。

これがあなたが探しているものであることを願っています。

乾杯!


最初のウィンドウでInputMethodManager.SHOW_IMPLICITを試しましたか?

2番目のウィンドウで隠すためにInputMethodManager.HIDE_IMPLICIT_ONLY使用し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);
}




soft-keyboard