7

私のアプリは Android 2.2 以降で動作します。その中で、ActionbarSherlockを使用して、3.0 より前のデバイスでアクション バーを使用できるようにしています。アクション バーで EditText を使用して、ユーザーが検索用のテキストを入力できるようにしました。

Android 4.0 および 4.1 (タブレット アプリではないため、3.x は試していません) でエミュレーターを使用すると、EditText が選択されると、必要に応じてソフト キーボードがポップアップします。しかし、Android 2.2 または 2.3.3 を使用するとそうではなく、表示されません。

EditText のコードは単純です。

item.setActionView(R.layout.collapsible_edittext);
etInput = (EditText) item.getActionView().findViewById(R.id.etInput);   
etInput.requestFocus();

レイアウト:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/etInput"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search_hint"
    android:lines="1" 
    android:maxLines="1"
    android:inputType="textFilter|textNoSuggestions"
    android:imeOptions="actionSend"/>

の直後にこのスニペットを使用してソフト キーボードを具体的に表示しようとしましたetInput.requestFocus();が、違いはありませんでした。

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(etInput, InputMethodManager.SHOW_IMPLICIT);

これが ActionbarSherlock の問題なのか、それともより一般的な Android の問題なのかを突き止めようとしています。アクティビティでのソフト キーボード表示の強制に関する多くの記事を精査しましたが、まだ解決策を見つけていません。

ありがとう

4

2 に答える 2

4

私は同じ問題を抱えていました... HTC Nexus Oneでテストするまで、すべてがうまくいきました。AiontBarSherlock menuItem にアタッチされた onActionExpandListener に次のコードを追加することになりました。

item.setOnActionExpandListener(new OnActionExpandListener() {

    @Override
    public boolean onMenuItemActionExpand(MenuItem item) {
    // post delayed to allow time for edittext to become visible
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
        mSearchText.clearFocus();
        showKeyboard();         
        mSearchText.requestFocus();
        }
    }, 400);

    return true;
    }

    @Override
    public boolean onMenuItemActionCollapse(MenuItem item) {
    hideKeyboard();
    return true;
    }
});

private void showKeyboard() {
 if (android.os.Build.VERSION.SDK_INT < 11) {
    mInputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
 } else {
    mInputManager.showSoftInput(mSearchText, InputMethodManager.SHOW_IMPLICIT);
 }
}

private void hideKeyboard() {
 if (android.os.Build.VERSION.SDK_INT < 11) {
   mInputManager.hideSoftInputFromWindow(getActivity().getWindow().getCurrentFocus().getWindowToken(),0);      
 } else {
    mInputManager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
 }  
}
于 2013-03-20T22:28:39.160 に答える
0

Mono droid で C シャープを使用する場合は、次のコードを使用します。

         new Thread(new ThreadStart(() =>
         {
             while (DateTime.Now < _dt)
                 Thread.Sleep(10);
             RunOnUiThread(showKeyboard);
         }
           )).Start();



     protected void showKeyboard()
     {
         int osSDK = (int)Android.OS.Build.VERSION.SdkInt;

         if (osSDK < 11)
         {
             this.mm().ToggleSoftInput(ShowFlags.Forced, HideSoftInputFlags.ImplicitOnly);
         }
         else
         { 
            EditText editTextView = FindViewById<EditText>(Resource.Id.EditTextSubCellAddVenue);
            this.mm().ShowSoftInput(editTextView, ShowFlags.Implicit);
         }
     }

     protected void hideKeyboard()
     {
         int osSDK = (int)Android.OS.Build.VERSION.SdkInt;

         if (osSDK < 11)
         {
             this.mm().HideSoftInputFromWindow(this.Window.CurrentFocus.WindowToken, 0);
         }
         else
         {
             this.mm().HideSoftInputFromWindow(this.CurrentFocus.WindowToken, HideSoftInputFlags.NotAlways);
         }
     }

     protected InputMethodManager mm()
     {
         if (imm == null)
         {
             EditText editTextView = FindViewById<EditText>(Resource.Id.EditTextSubCellAddVenue);

             imm = (InputMethodManager)this.GetSystemService(Android.Content.Context.InputMethodService);
         }

         return imm;
     }
于 2013-04-08T02:28:02.757 に答える