Показать клавиатуру автоматически

Пожалуйста, объясните мне вопрос о мягкой клавиатуре. Например, у меня есть EditText в моей активности или диалоговом фрагменте или фрагментации, независимо от того. вот он:

<EditText
    android:id="@+id/edPswrd"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="textPassword" >

    <requestFocus />
</EditText>

Когда он отображается в первый раз, я не вижу мягкую клавиатуру и должен нажать editText, чтобы он мог получать фокус, и появляется клавиатура. Другая деятельность отличается, когда она появляется на экране, клавиатура загружается без какой-либо помощи. Я думал, что

< requestFocus/" >

означает, что EditText будет сфокусирован, и клавиатура появится, но я ошибаюсь.

Как мне определить, какой компонент получит фокус, а клавиатура будет автоматически.

Ответ 1

Я думаю, что это ошибка или функция, которая пытается представить вам всю деятельность, не скрывая ее с помощью мягкой клавиатуры. Я искал один раз для получения информации об этом, но, к сожалению, ничего не нашел из действительно надежного источника.

В любом случае, чтобы показать мягкую клавиатуру, вы можете сделать это:

EditText editText = (EditText)findViewById(R.id.edit_text_id);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

Я также видел этот код, который должен заставить мягкую клавиатуру стать видимой сразу после запуска активности, но никогда не пробовал:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

И если вы хотите скрыть мягкую клавиатуру, вы можете сделать это:

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

Надеюсь, что это поможет.

Edit:

При a DialogFragment это должно работать: в методе onCreateView() сделайте следующее:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_id, container);
    EditText editText = (EditText)view.findViewById(R.id.edit_text_id);

    // show soft keyboard
    editText.requestFocus();
    getDialog().getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

    return view;
}

Ответ 2

Откройте файл манифеста Android.

Ищите тег активности, подобный этому

<activity  
        android:name="com.example.framework.MainActivity"
        android:label="@string/app_name" 
        android:windowSoftInputMode="stateVisible"       //Add this line    
         >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Добавьте строку android: windowSoftInputMode = "stateVisible", как показано выше

Ответ 3

Я знаю, что это уже ответили, но я нашел способ сделать принятый ответ в onCreateDialog, а не только в onCreateView. Когда вы закончите с застройщиком, перед возвратом выполните следующие действия:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());  
// blah blah blah do builder stuff here like setTitle, setView, etc

Dialog d = builder.create();

Здесь важная часть:

d.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
return d;

Ответ 4

добавить в onCreate или onStart();

myView.requestFocus();
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

Ответ 5

Попробуйте это

@Override
public void onResume() {
   super.onResume();
   final View v = getDialog().findViewById(R.id.edit_text_id);
   v.post(new Runnable() {
      @Override
      public void run() {
        v.requestFocus();
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
      }
   });
 }

Ответ 6

Это то, что сработало для меня -

Создайте свой собственный класс EditText и переопределите следующий метод -

public class FocussableEditText extends EditText {

    public FocussableEditText(Context context) {
        super(context);
    }

    public FocussableEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public FocussableEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
        if (hasWindowFocus) {
            InputMethodManager imm = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(this, InputMethodManager.SHOW_FORCED);
        }
    }
}

http://debuggingisfun.blogspot.in/2014/08/android-show-soft-keyboard.html

Ответ 7

Я рекомендую следующую ссылку, я следил за шагами, указанными ниже, отлично работает, это довольно хороший ответ, выполненный очень простыми шагами. кредит поступает на ответного человека. надеюсь, что это поможет человеку, который испортил клавиатуру при активном диалоге.

DialogFragment и сила для показа клавиатуры

Ответ 8

для меня, добавив эту строку android: windowSoftInputMode = "stateVisible" в ваш манифест, подобный этому

**<activity
            android:name=".mmmmm.zzzzzzz.yyyyyy.xxxxxx"
            android:windowSoftInputMode="stateVisible"
            android:label="@string/title_activity_print_recharge"></activity>**

вот как я его решил