Я хотел бы открыть клавиатуру, когда начнется моя активность. Я пробовал все методы/ответы с приведенными ниже вопросами без везения.
Я считаю, что проблема заключается в том, когда аппаратная клавиатура доступна, поведение по умолчанию для мягкой клавиатуры не отображается. Может ли это быть отменено? Что произойдет, если аппаратная клавиатура скрыта?
Я прочел следующие вопросы без везения. Самый близкий к проблеме, которую я испытываю, здесь: Вопрос 2712822
Другие включают:
Вопрос 3379403
Вопрос 2479504
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/scrollView1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="match_parent" android:id="@+id/linearLayout1" android:layout_height="match_parent" android:orientation="vertical">
<LinearLayout android:layout_height="match_parent" android:id="@+id/linearLayout2" android:layout_gravity="center" android:layout_width="match_parent">
<TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/textView1"></TextView>
<EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/testText" android:focusable="true" android:focusableInTouchMode="true" android:hint="Input here"></EditText>
</LinearLayout>
<LinearLayout android:layout_height="match_parent" android:id="@+id/linearLayout2" android:layout_gravity="center" android:layout_width="match_parent">
<TextView android:layout_height="wrap_content" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/textView1"></TextView>
<EditText android:id="@+id/editText1" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="and here"></EditText>
</LinearLayout>
</LinearLayout>
</ScrollView>
Мой основной код действия выглядит следующим образом:
package com.example.example3;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
public class example3 extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EditText edit = (EditText)this.findViewById(R.id.testText);
edit.requestFocus();
/* // Below Doesn't work
InputMethodManager imm = (InputMethodManager)
example3.this.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null){/ imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}
//Below Doesn't work
// getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
*/
}
}
Это потерянное дело? Может ли кто-нибудь проверить это на телефоне с закрытой аппаратной клавиатурой и рассказать мне, что происходит?
Ответы, связанные с softinputMode, должны работать. Если вам не повезло с установкой его в манифесте, вы можете попробовать установить его в onCreate()
, чтобы определить, как отображается клавиатура при навигации по активности.
Чтобы показать это в любое время, когда активность будет использоваться фокусом:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Попробуйте это
edtReceiver.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
{
// getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null)
{
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}
}
}
});
Это работает для меня.
Этот definitley работает, я использую его все время, не вызываю его из onCreate, вызываю его из onStart или onResume.
public static void showKeyboard(Activity act,EditText t){
InputMethodManager imm = (InputMethodManager)act.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(t, 0);
}