当前位置:首页 » 安卓系统 » android控件焦点

android控件焦点

发布时间: 2023-06-28 09:48:57

Ⅰ Android下如何取当前获得焦点的控件的ID

Android如何获取动态添加控件的id:RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.relaGameZhaiGuoZi);imgApple2 = new ImageView(this);imgApple2.setImageResource(R.drawable.app);imgApple2.setId(110);imgApple2.setOnClickListener(this);RelativeLayout.LayoutParams lp1 = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);lp1.leftMargin=30;lp1.topMargin = 100;mainLayout.addView(imgApple2,lp1);View类里面有一个findFocus的成员函数,作用相当于找到以当前View为根的view层次结构中,获得当前输入焦点的view 。Android下如何取当前获得焦点的控件的ID

Ⅱ Android移动应用中的焦点分析

简单一点理解,在移动应用中,焦点就是当前正在处理事件的位置。在手机应用中,最有可能用到焦点的就是EditText,如果同一个界面中有多个EditText,通常情况下同一时间只有一个能够输入内容,此时,这个EditText就获取了焦点。

在Android中,对焦点的设置分为两种情况,TouchMode和非TouchMode。现在的手机基本都是触摸屏,我们用手指触摸屏幕来操作Android应用时,处于TouchMode。除了TouchMode之外,还有非TouchMode,利用外接设备来操作应用。比如键盘。使用Genymotion模拟器的时候,一个界面上有多个控件时,可以用电脑tab键来进行移动,被选中的控件会高亮显示,这时候就是非TouchMode,被选中的控件获得了焦点。

在手机应用中,用到焦点的时候并不多,但是TV应用中,需要用遥控器来操作选中控件,这时候就需要对焦点进行处理了。关于焦点,常用方法如下:

在View类中, isFocusable() 和 isFocusableInTouchMode() 获取到的结果都是false,也就是说,直接继承自View的控件是不能获取焦点的。我们常用控件中对这两个方法进行了改写,比如EditText,这两个方法都是true,而Button则只有 isFocusable() 返回true。这也就是为什么我们用tab键选取Button的时候能够高亮显示,而鼠标点击(模拟触控)的时候不能高亮显示的原因了。如果想在点击的时候也能高亮显示Button,需要手动设置 setFocusableInTouchMode(true) ,就可以了。

如果想对控件的焦点状态进行监听,需要设置 setOnFocusChangeListener() ,只要控件的焦点状态发生变化(获得或者失去焦点),都会调用 onFocusChange 方法

关于焦点的移动,默认的算法会寻找指定方向上最近的可以获取焦点的元素(非TouchMode)。另外在创建控件的时候,也可以指定寻找焦点的方向,设置nextFocusDown、nextFocusLeft、nextFocusRight 和 nextFocusUp的值为指定元素就可以了。看以下例子:

这里指定了上面的button向上寻找焦点时,下一个元素是id为bottom的元素,也就是说,上面的Button在获取了焦点之后,继续按向上键,系统会将焦点移动到id为bottom的元素上,而不是继续向上。

在开发手机应用的过程中,对焦点的处理并不多,它与事件是两个不同的体系,通常情况下焦点和事件是相互独立并不冲突。但是在Button的点击事件中会有一点问题。如果我们队一个button设置了 setFocusableInTouchMode(true) ,使他可以获取焦点,那么我们点击这个button的时候,第一次点击并不会执行 onClick() 方法,而是执行 onFocusChange() 。第二次点击的时候才会执行 onClick() 方法。看起来好像 onFocusChange() 消耗了点击事件,实际上并不是的。

这个问题我们看一下源码就清楚了:

onClick() 方法是在onTouchEvent的ACTION_UP里调用的,看一下View的onTouchEvent方法:

可以看到,只有当focusTaken为false的时候才会执行onClick,focusTaken的值默认是false的,但是在 isFocusable() && isFocusableInTouchMode() && !isFocused() 为true的时候,会去 requestFocus 获取焦点,并将值赋给focusTaken。

关键在于 isFocused() ,如果当前Button没有获取焦点, isFocused() 返回false, !isFocused() 值为ture,Button就会去获取焦点,从而导致 focusTaken 为true, onClick 方法就不会执行了,只有Button已经获取了焦点的时候才会执行onClick方法。

Ⅲ Android下如何取当前获得焦点的控件的ID

Android如何获取动态添加控件的id:RelativeLayout
mainLayout
=
(RelativeLayout)findViewById(R.id.relaGameZhaiGuoZi);imgApple2
=
new
ImageView(this);imgApple2.setImageResource(R.drawable.app);imgApple2.setId(110);imgApple2.setOnClickListener(this);RelativeLayout.LayoutParams
lp1
=
new
RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);lp1.leftMargin=30;lp1.topMargin
=
100;mainLayout.addView(imgApple2,lp1);View类里面有一个findFocus的成员函数,作用相当于找到以当前View为根的view层次结构中,获得当前输入焦点的view
。Android下如何取当前获得焦点的控件的ID

Ⅳ android 中如何设置焦点的位置。

设置焦点需要以下几步:
1,打开手机相机,进入设置,打开焦点功能。
2,进入拍照页面,双击屏幕的一个地方,相机就会自动锁定焦点。
3,焦点会带有两个锁定框,一个锁定,一个可以拖动。
4,锁定在屏幕上的锁定框就是焦点,可移动的是进行焦距调节。

多数相机的焦距处理并不明显,直接移动焦点效果会好些。

Ⅳ Android中ListView的Item的子控件获取焦点问题

ListView默认情况

当item有焦点时,item上的button等子控件获取不到焦点;
当子控件有焦点时,item无焦点无法响应onItemClick事件

ViewGroup.FOCUS_AFTER_DESCENDANTS:表示item的子控件优先于item获得焦点;
ViewGroup.FOCUS_BEFORE_DESCENDANTS:表示item优先于其子控件获得焦点。

解决办法:

[java] view plain
listView.setOnItemSelectedListener(onItemSelectedListener);
private AdapterView.OnItemSelectedListener onItemSelectedListener =
new AdapterView.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//当此选中的item的子控件需要获得焦点时
parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
//else parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {
parent.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
}
}

Ⅵ android某一app设为焦点app

在做电视机顶盒应用的时候,每个控件都是有焦点变化的显示的册启,如果当前焦点被一个自己不知道的控件获取到,则其他控件就不会获取到焦点,我们必须要找到当前获取焦点的控件,将其 android:focusable="false" ,不让它获取到焦点。

通过findFocus()方法来获取到当前的控件。

在Activity的onCreate方法中,启动线毁困程。

new Thread(run2).start();

run2的代码如下所示:

Runnable run2 = new Runnable() {
@Override

public void run() {
while (true) {
try {
Thread.sleep(5000);

} catch (InterruptedException e) {
e.printStackTrace();

}

View rootview = DetailActivity.this.getWindow().getDecorView();

View aaa = rootview.findFocus();

Log.i("tag", aaa.toString());

}

}

};

这样每隔5秒会获取一纤姿念次当前有焦点的控件,打印出log就可以了。

打印出的log如下所示:

最后就是控件的id了,这样你就找到了当前获取焦点的控件了。

结束。

链接:https://www.waimaiguai.com/technology/article/1327504
来源:外卖怪

Ⅶ android listview button 焦点问题

istview button 抢占焦点的解决办法:
Item xml 根节点添加 android:descendantFocusability="blocksDescendants"
Button 设置
android:focusable="false"
这样点击Button 和ListView Item 可以分别响应自己的点击事件
开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。
原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。
这时候就可以使用descendantFocusability来解决啦
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上**android:descendantFocusability=”blocksDescendants”**的属性就好了,至此listview点击的灵异事件告一段落。

Ⅷ Android View如何获取焦点

Android新启动Activity,dialog或者其他窗体中包含EditText, 新启动的activity的焦点默认在EditText上,这时android系统会弹出软键盘,挤压activity本来的界面,影响美观。
因此最好在新窗体创建时,在onCreate()方法中将焦点放在另一个view上。
view使用requestFocus()焦点,但是如果让button或者textView之类控件直接使用requestFocus()方法,则无法获取焦点,焦点会依然在editText上。
只能在使用View的requestFocus()方法之前调用下面2个方法,view才可获取焦点:

view.setFocusable(true);

view.setFocusableInTouchMode(true);

然后调用 view.requestFocus()即可获取焦点。

热点内容
我的世界里面什么服务器是建造的 发布:2025-02-07 03:51:48 浏览:189
不能连接到数据库 发布:2025-02-07 03:47:00 浏览:45
安卓手机如何设置翻屏动画 发布:2025-02-07 03:46:18 浏览:594
利基型存储器什么意思 发布:2025-02-07 03:43:58 浏览:556
安卓读写权限在哪里 发布:2025-02-07 03:29:21 浏览:36
钉邮怎么找回密码 发布:2025-02-07 03:16:40 浏览:81
比特币钱包源码 发布:2025-02-07 03:16:39 浏览:101
饥荒如何转移服务器 发布:2025-02-07 03:14:42 浏览:4
怎么才能知道电视是不是安卓系统 发布:2025-02-07 03:04:23 浏览:817
银行更改密码红色预警是什么意思 发布:2025-02-07 02:54:22 浏览:552