去除EditText自動獲得焦點
當帶有EditView的activity第一次進入時,第一個EditText框會自動獲得焦點,這個嚴重影響了用戶體驗,但是如何去掉呢?
查閱了很多資料後,發現以下方法最簡單:
在xml中,在EditText控件之前
加入
<LinearLayout
android:id="@+id/linearLayout_focus"
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>
這是一個虛假的LinearLayout,不會顯示的,但是會搶走焦點
EditText控件獲得焦點是背景如何修改:
EditText有一個background屬性(對應setBackgroundResource方法),可以修改EditText的背景顏色
但是在獲得焦點的時候,想讓它的背景顏色和未獲得焦點時的不一樣,怎樣修改它的屬性呢。
可以參考如下代碼:
- EditText editText = (EditText) findViewById(R.id.search_text);
- //給editText增加獲得焦點的響應
- editText.setOnFocusChangeListener(new OnFocusChangeListener(){
- @Override
- public void onFocusChange(View v, boolean hasFocus){
- if(hasFocus){
- //獲得焦點時,修改背景屬性
- //R.drawable.edit_text_bg_focus爲背景資源
- v.setBackgroundResource(R.drawable.edit_text_bg_focus);
- }
- else{
- v.setBackgroundResource(R.drawable.edit_text_bg_unfocus);
- }
- }
- });
這樣就可以修改editText在獲得焦點時的背景屬性了
EditTex默認不獲得焦點
一個佈局文件裏第一個EditText或默認獲得焦點,如果想讓默認不獲得,則:
可以在EditText前面放置一個看不到的LinearLayout,讓他率先獲取焦點:
<LinearLayout
android:focusable="true" android:focusableInTouchMode="true"
android:layout_width="0px" android:layout_height="0px"/>
或者,讓EditText之前的控件先獲得焦點,都行。