Obecnie mam układ, który zawiera a Button
, a TextView
i EditText
. Po wyświetleniu układu fokus zostanie automatycznie umieszczony na EditText
, co spowoduje wyświetlenie klawiatury na telefonie z Androidem. Nie tego chcę. Czy istnieje sposób, w jaki mogę ustawić fokus TextView
na niczym lub na niczym, gdy wyświetlany jest układ?
90
Powinieneś to dodać:
android:focusableInTouchMode="true"
źródło
Zestaw
android:focusable="true"
w Twoim
<EditText/>
źródło
Aby ustawić ostrość, opóźnij requestFocus () za pomocą Handler.
private Handler mHandler= new Handler(); public class HelloAndroid extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout mainVw = (LinearLayout) findViewById(R.id.main_layout); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); EditText edit = new EditText(this); edit.setLayoutParams(params); mainVw.addView(edit); TextView titleTv = new TextView(this); titleTv.setText("test"); titleTv.setLayoutParams(params); mainVw.addView(titleTv); mHandler.post( new Runnable() { public void run() { titleTv.requestFocus(); } } ); } }
źródło
Możesz spróbować po prostu ukryć klawiaturę. Coś takiego:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
źródło
Próbować
źródło
Ustaw te linie
OnResume
również na i upewnij się, żefocusableInTouch
jest ustawione na true podczas inicjowania formantówźródło
aby zmienić fokus, ustaw element textView w xml na fokus
<TextView **android:focusable="true"** android:id="@+id/tv_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
i java w czasie tworzenia
textView.requestFocus();
lub po prostu ukryj klawiaturę
public void hideKeyBoard(Activity act) { act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE); }
źródło
Żadna z powyższych odpowiedzi nie działa dla mnie. Jedynym (powiedzmy) rozwiązaniem była zmiana pierwszego TextView w wyłączonym EditText, który otrzymuje fokus, a następnie dodanie
w wywołaniu zwrotnym onCreate, aby zapobiec wyświetlaniu klawiatury. Teraz mój pierwszy EditText wygląda jak TextView, ale w końcu może uzyskać początkowy fokus.
źródło
Ostatnia sugestia to właściwe rozwiązanie. Powtarzam, najpierw ustaw
android:focusable="true"
wxml
pliku układu , a następnierequestFocus()
w widoku w kodzie.źródło
myślę, że widok tekstu nie jest aktywny. Spróbuj na przykład ustawić fokus na przycisku lub ustawić właściwość, którą można ustawić na true.
źródło
możesz dodać tekst edycji o rozmiarze "0 dip" jako pierwszą kontrolkę w ur xml, więc to skupi się na renderowaniu. (upewnij się, że można go ustawić i wszystko ...)
źródło
Możesz zacząć od dodania
android:windowSoftInputMode
do swojej aktywności wAndroidManifest.xml
pliku.<activity android:name="YourActivity" android:windowSoftInputMode="stateHidden" />
Spowoduje to, że klawiatura nie będzie wyświetlana, ale
EditText
nadal będzie fokus. Aby rozwiązać ten można ustawićandroid:focusableInTouchmode
iandroid:focusable
abytrue
na widoku głównym.<LinearLayout android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" ... > <EditText ... /> <TextView ... /> <Button ... /> </LinearLayout>
Powyższy kod upewni się, że
RelativeLayout
zamiastEditText
źródło
Skupiamy się na wybieraniu komponentów interfejsu użytkownika, gdy używasz czegoś innego niż dotyk (np. Pada kierunkowego, klawiatura itp.). Każdy widok może otrzymać fokus, chociaż niektóre nie są domyślnie ustawiane. (Możesz
setFocusable(true)
ustawić ostrość widoku i wymusić na nim skupienierequestFocus()
).Należy jednak pamiętać, że w trybie dotykowym ostrość jest wyłączona . Jeśli więc używasz palców, programowa zmiana fokusu nic nie robi. Wyjątkiem są widoki, które otrzymują dane wejściowe z edytora danych wejściowych. A
EditText
jest takim przykładem. W tej specjalnej sytuacjisetFocusableInTouchMode(true)
jest używany, aby dać klawiaturze programowej znać, gdzie wysłać dane wejściowe.EditText
Ma to ustawienie domyślne. Miękka klawiatura pojawi się automatycznie.Jeśli nie chcesz, aby klawiatura programowa pojawiała się automatycznie, możesz tymczasowo ją wyłączyć, jak zauważył @abeljus:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
EditText
Jednak po kliknięciu przez użytkownika klawiatura nadal powinna być wyświetlana.Czytaj dalej:
źródło