最近修改一個功能,EditText一開始默認不獲焦點,等點擊Edittext的時候,再獲得焦點並彈軟鍵盤。
按照常規操作,
一開始在代碼中設置Edittext沒有焦點:
tv_subject.clearFocus();
當它需要焦點的時候,讓其獲取焦點:
tv_subject.setFocusable(true);
tv_subject.setFocusableInTouchMode(true);
tv_subject.requestFocus();
tv_subject.requestFocusFromTouch();
//需要光標閃動
tv_subject.setCursorVisible(true);
然後調用彈出軟鍵盤的代碼。
發現沒有效果!
後面根據網上的一些說法,又嘗試了下面的做法,不行!
tv_subject.postDelayed(new Runnable() {
@Override
public void run() {
tv_subject.setFocusable(true);
tv_subject.setFocusableInTouchMode(true);
tv_subject.requestFocus();
tv_subject.requestFocusFromTouch();
}
},500);
總之軟鍵盤就是死活不出來!
後面終於找到了原因,原來是在EditText的某一層根佈局中有這樣一個屬性:
android:descendantFocusability="blocksDescendants"
該屬性是當一個爲view獲取焦點時,定義viewGroup和其子控件兩者之間的關係。
屬性的值有三種:
beforeDescendants:viewgroup會優先其子類控件而獲取到焦點
afterDescendants:viewgroup只有當其子類控件不需要獲取焦點時才獲取焦點
blocksDescendants:viewgroup會覆蓋子類控件而直接獲得焦點
原來是上層的控件直接就已經將焦點給搶走了,纔會導致軟鍵盤彈不出來!