A. 安卓 View層 和 Activity層 消息傳遞機制和焦點問題
其實是activity派送出來的事件,不是無人知曉。而是這種問題不容易弄出一個關鍵字來搜索。
一個activity的touch事件先由activity的dispatchtouchevent來處理,負責派送。
dispatchtouchevent把ACTION_DOWN事件首先交給view,然後view返回false再傳遞回activity的onTouchEvent中處理。
具體的部分代碼如下:
java">if(ev.getAction()==MotionEvent.ACTION_DOWN){
onUserInteraction();
}
如果用戶需要這個ACTION_DOWN,應該在自身的onTouchEvent中對 ACTION_DOWN採取return true的響應,表示這個ACTION_DOWN歸我了。只有在dispatchtouchevent為ACTION_DOWN事件找到一個歸屬,也即是target之後,後面的ACTION_MOVE和ACTION_UP才會對這個target傳送。
如果你這個頁面就僅僅有一個這樣需要捕捉事件的view,你是可以直接在dispatchtouchevent中直接傳送給這個view然後return true的。
B. android 開發怎麼讓打開一個activity時 edittext獲得焦點之後自動彈出輸入鍵盤
// 獲取編輯框焦點
editText.setFocusable(true);
//打開軟鍵盤
IInputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
如果你想關閉的話在清單文件中的本activity 屬性 android:windowSoftInputMode=」stateHidden」
C. 怎麼使dialog失去焦點而不消失,activity獲得焦點
Activity像Dialog一樣,可以使用主題樣式,默認sdk提供一個theme.dialog, 4.0開始使用Theme.Holo.DialogWhenLarge
在Androidmanifest.xml中配置Activity的時候添加@android:style/Theme.Holo.DialogWhenLarge:
在計算listview總高度並設置
ListView listView = (ListView) findViewById(id);
YourAdapter adapter = new MyAdapter("初始化你的適配器");
listView.setAdapter(adapter);
(listView);(在setAdapter後調用自定義的方法)
復制代碼代碼如下:
/**
* @param listView
*/
private void (ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
使用該方法需要注意:子ListView的每個Item必須是LinearLayout,不能是其他的,因為其他的Layout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。
D. android彈出dialog後,activity得到焦點的問題,activity能獲得焦點,但是卻不能獲得裡面的控制項的點擊事件
你是想跳出dialog的時候,dialog裡面的控制項就獲取焦點呢還是,點擊dialog裡面的控制項獲取焦點.
點擊是自動獲取的焦點,你讓給他設置相應的點擊事件監聽.
要是點dialog以後就想讓dialog裡面的控制項獲取焦點,則要是給自己手動設置.
E. android中 怎麼使新載入的activity獲得焦點~
android中,如果在業務代碼層實現控制項獲得焦點,需要先調用setFocus(),再調用requestFocus()。
如果直接使用layout布局使其中的控制項某人獲取焦點,只需要在控制項中添加一個<requestFocus />標簽。
以EditText為例:
<EditText id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:paddingBottom="4">
<requestFocus />
</EditText>
這樣在打開這個Activity時,EditText會自動獲取焦點。
F. android開發 如何讓Activity或者布局失去焦點,像彈出Dialog一樣。
你可以在整個布局文件中嵌套一個空的布局,讓這個空布局去獲取焦點,這樣你另一個布局中的控制項就不會獲取焦點了,這個我以前用過,肯定好用。
G. android如何設置整個activity不可點擊不可獲得焦點
那你把可以點擊的和可以獲取焦點的,全都設置Enabled和Focusable屬性全為false假吧,或者在代碼里修改也行