Saat ini, saya memiliki layout yang berisi a Button
, a TextView
dan an EditText
. Saat tata letak ditampilkan, fokus akan secara otomatis diletakkan di EditText
, yang akan memicu keyboard untuk muncul di ponsel Android. Bukan itu yang saya inginkan. Adakah cara agar saya bisa mengatur fokus TextView
atau tidak ada saat tata letak ditampilkan?
90
Anda harus menambahkan ini:
android:focusableInTouchMode="true"
sumber
Set
android:focusable="true"
di Anda
<EditText/>
sumber
Untuk menyetel fokus, tunda requestFocus () menggunakan 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(); } } ); } }
sumber
Anda dapat mencoba menyembunyikan keyboard. Sesuatu seperti ini:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
sumber
Mencoba
sumber
Setel baris ini
OnResume
juga dan pastikan jikafocusableInTouch
disetel ke true saat Anda menginisialisasi kontrol Andasumber
untuk mengubah fokus, buat textView di xml bisa difokuskan
<TextView **android:focusable="true"** android:id="@+id/tv_id" android:layout_width="wrap_content" android:layout_height="wrap_content"/>
dan di java di buat
textView.requestFocus();
atau cukup sembunyikan keyboard
public void hideKeyBoard(Activity act) { act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); InputMethodManager imm = (InputMethodManager) act.getSystemService(Context.INPUT_METHOD_SERVICE); }
sumber
Tidak ada jawaban di atas yang cocok untuk saya. Satu-satunya solusi (katakanlah) adalah mengubah TextView pertama dalam EditText nonaktif yang menerima fokus dan kemudian menambahkan
di callback onCreate untuk mencegah keyboard ditampilkan. Sekarang EditText pertama saya terlihat seperti TextView tetapi akhirnya bisa mendapatkan fokus awal.
sumber
Saran terakhir adalah solusi yang tepat. Sekadar mengulang, pertama setel
android:focusable="true"
dixml
file layout , lalurequestFocus()
di tampilan di kode Anda.sumber
Saya pikir tampilan teks tidak bisa difokuskan. Cobalah untuk mengatur fokus pada sebuah tombol misalnya, atau untuk mengatur properti yang dapat difokuskan ke true.
sumber
Anda dapat menambahkan teks edit dengan ukuran "0 dip" sebagai kontrol pertama di ur xml, jadi, itu akan mendapatkan fokus pada render. (pastikan itu dapat difokuskan dan semua ...)
sumber
Anda dapat memulai dengan menambahkan
android:windowSoftInputMode
aktivitas Anda dalamAndroidManifest.xml
file.<activity android:name="YourActivity" android:windowSoftInputMode="stateHidden" />
Ini akan membuat keyboard tidak terlihat, tapi
EditText
tetap fokus. Untuk mengatasinya, Anda dapat mengaturandroid:focusableInTouchmode
danandroid:focusable
ketrue
pada tampilan root Anda.<LinearLayout android:orientation="vertical" android:focusable="true" android:focusableInTouchMode="true" ... > <EditText ... /> <TextView ... /> <Button ... /> </LinearLayout>
Kode di atas akan memastikan yang
RelativeLayout
mendapatkan fokus, bukanEditText
sumber
Fokus adalah untuk memilih komponen UI saat Anda menggunakan sesuatu selain sentuhan (mis., D-pad, keyboard, dll.). Setiap tampilan dapat menerima fokus, meskipun beberapa tidak dapat difokuskan secara default. (Anda dapat membuat tampilan
setFocusable(true)
dapat difokuskan dengan dan memaksanya untuk difokuskanrequestFocus()
.)Namun demikian, penting untuk diperhatikan bahwa saat Anda dalam mode sentuh, fokus dinonaktifkan . Jadi jika Anda menggunakan jari Anda, mengubah fokus secara terprogram tidak akan menghasilkan apa-apa. Pengecualian untuk ini adalah untuk tampilan yang menerima masukan dari editor masukan. Contohnya
EditText
seperti itu. Untuk situasi khusussetFocusableInTouchMode(true)
ini digunakan agar keyboard lunak tahu ke mana harus mengirim input. AnEditText
memiliki pengaturan ini secara default. Soft keyboard akan muncul secara otomatis.Jika Anda tidak ingin soft keyboard muncul secara otomatis maka Anda dapat menekannya untuk sementara seperti yang dicatat @abeljus:
InputMethodManager inputManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Namun, saat pengguna mengkliknya
EditText
, keyboard masih tetap ditampilkan.Bacaan lebih lanjut:
sumber