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假吧,或者在代码里修改也行