android 控件焦点中 如何设置控件获取焦点

Android 动态设置控件获取焦点
Android 动态设置控件获取焦点
之前写过一篇博客,简单的介绍了Android
隐藏EditText的焦点,之所以要隐藏EditText的焦点,是因为当应用在第一次进入某个Activity时,由于该页面中的EditText获取了焦点,致使键盘弹出,而影响了用户的体验。
之前写过一篇博客,简单的介绍了,之所以要隐藏EditText的焦点,是因为当应用在第一次进入某个Activity时,由于该页面中的EditText获取了焦点,致使键盘弹出,而影响了用户的体验。
今天扩展下之前的内容,简单介绍如何动态设置某个控件获取到焦点。
首先,定义页面布局:
&LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
&LinearLayout
android:id="@+id/edit_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true"
android:orientation="vertical" &
android:id="@+id/edit_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="姓名"
android:inputType="text"
android:minHeight="50dp" /&
android:id="@+id/edit_mobile"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="手机号"
android:inputType="phone"
android:minHeight="50dp" /&
&/LinearLayout&
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="确定"
android:onClick="setFocus"
&/LinearLayout&
观察下,我已经对两个EditText的父容器LinearLayout设置了两行代码android:focusable="true",android:focusableInTouchMode="true"。有了这两行代码,当我们进入该Activity时,便不会弹出软键盘啦。
下面,我们对两个文本输入框定义焦点事件:
private class OnFocusHandler implements OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.edit_name:
if (hasFocus) {
edit_name.setText("ning shuai");
edit_name.setText("");
case R.id.edit_mobile:
if (hasFocus) {
edit_mobile.setText("");
edit_mobile.setText("");
焦点事件很容易理解,不多讲了。最后,我们定义Button的点击事件,在这个事件中,我们让两个EditText的父容器LinearLayout动态获取焦点。效果是,当点击Button时,两个EditText输入框中的内容同时清空。
public void setFocus(View view) {
edit_layout.setFocusable(true);
edit_layout.setFocusableInTouchMode(true);
edit_layout.requestFocus();
edit_layout.requestFocusFromTouch();
注意下,edit_layout.requestFocus();edit_layout.requestFocusFromTouch();这两行代码是必须添加的,不然LinearLayout是无法获取到焦点的!
好了,就是如此简单的内容,把整个Activity的代码给大家看下,就不上传源码了。
import android.app.A
import android.os.B
import android.util.L
import android.view.V
import android.view.View.OnFocusChangeL
import android.widget.B
import android.widget.EditT
import android.widget.LinearL
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
private LinearLayout edit_
private EditText edit_
private EditText edit_
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_layout = (LinearLayout) findViewById(R.id.edit_layout);
edit_name = (EditText) findViewById(R.id.edit_name);
edit_mobile = (EditText) findViewById(R.id.edit_mobile);
this.edit_name.setOnFocusChangeListener(new OnFocusHandler());
this.edit_mobile.setOnFocusChangeListener(new OnFocusHandler());
public void setFocus(View view) {
edit_layout.setFocusable(true);
edit_layout.setFocusableInTouchMode(true);
edit_layout.requestFocus();
edit_layout.requestFocusFromTouch();
private class OnFocusHandler implements OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.edit_name:
if (hasFocus) {
edit_name.setText("ning shuai");
edit_name.setText("");
case R.id.edit_mobile:
if (hasFocus) {
edit_mobile.setText("");
edit_mobile.setText("");
看下最后的效果:
怎么样,了解吧,希望能帮助大家解决某些问题!
用云栖社区APP,舒服~
【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。&&
一项针对阿里云资源和互联网应用进行监控的服务。云监控服务可用于收集获取阿里云资源的监控指标,...
独立的公网IP资源,可以绑定到阿里云专有网络VPC类型的ECS、NAT网关、私网负载均衡SL...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效...博客分类:
发现
android:focusable="false"
在某些视图里面没有用,比如说 ListView
写在 layout 的 xml 里面,会发现根被没起作用。
而在代码里面写上 setFocusable(false); 这时候却有用。
没去跟踪,但是怀疑是 ListView的父类在某个地方吧这个焦点重置了,不知道是不是这样。如果是这样的话,可能还会牵连一些延生过来的组件。
这个问题搞了我好久,纳闷,发现竟然是代码里面才有用
Android 2.2 的,不知道更高版本是不是还是一样。
具体原因有空再研究下。
浏览: 23239 次
来自: 深圳
你好 我想请问下 我的vmdk的Centos的[root@lo ...
谢谢你的打包文件,VMware-mount-loop-linu ...
&div class=&quote_title ...
请问: sudo vmware-mount -f xxx.vm ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多。当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button或者是CheckBox等控件以及其子类控件的时候,经常会碰到各种控件的点击事件冲突的情况,那么我们如何来处理Listview中这种控件之间焦点冲突的情况呢?
我们以item存在一个Button控件为例
首先,加入我们不设置任何关于焦点的属性,比如focus等,代码如下
01.@Override
02.public&View getView(int&position, View convertView, ViewGroup parent) {
03.convertView = inflater.inflate(R.layout.item,&null);
05.Button btnButton = (Button) convertView.findViewById(R.id.btn);
06.btnButton.setOnClickListener(new&OnClickListener() {
08.@Override
09.public&void&onClick(View v) {
11.Toast.makeText(context,&"点击了按钮",&0).show();
16.return&convertV
设置listview的OnitemClickListener事件
1.@Override
2.public&void&onItemClick(AdapterView&?& parent, View view,&int&position,&long&id) {
3.Toast.makeText(context,&"点击了Item",&0).show();
那么在上面这种情况下,我们可以触发Button的点击事件,但是item的点击事件并不会被触发,也就是说,Button控件抢夺了item的焦点事件,使得item不能触发相应的点击事件,那么,如果我们既想触发Button的点击事件,又想触发item的点击事件,我们应该怎么做呢?
这里有三种解决方案
1.将ListView中的Item布局中的子控件focusable属性设置为false2.在getView方法中设置button.setFocusable(false)
3.设置item的根布局的属性android:descendantFocusability="blocksDescendant"
我们可以发现,其实这三种方法都是为了让Button等控件不能获取焦点,从而使得item可以响应点击事件。
第三种方法使用起来相对方便,因为它是将item布局中的其他所有控件都设置为不能获取焦点。
android:descendantFocusability属性共有三个取值,分别为
beforeDescendants:viewgroup会优先其子类控件而获取到焦点afterDescendants:viewgroup 只有当其子类控件不需要获取焦点时才获取焦点blocksDescendants:viewgroup 会覆盖子类控件而直接获得焦点
阅读(...) 评论()android中设置控件获得焦点
android中,要使控件获得焦点,需要先setFocus,再requestFocus。
以Button为例:
&&&&&&&&&&&&&&&&btn.setFocusable(true);
&&&&&&&&&&&&&&& btn.setFocusableInTouchMode(true);
&&&&&&&&&&&&&&& btn.requestFocus();
&&&&&&&&&&&&&&& btn.requestFocusFromTouch();
//获得失去焦点的监听器
btn.setOnFocusChangeListener(new OnFocusChangeListener() {
&&@Override
&&public void onFocusChange(View v, boolean hasFocus) {
&&&// TODO Auto-generated method stub
&&&if (hasFocus) {
&&&&btn_box.setBackgroundResource(R.drawable.book_green);
&&&}else {
&&&&btn_box.setBackgroundResource(R.drawable.book);
请各位遵纪守法并注意语言文明android 点击按钮,使其他控件获得焦点
需求:点击一个Button,,让EditText获得焦点;
1.在EditText的xml属性中添加
android:focusable=&true&
2.在Button的点击事件中添加EditText的焦点判断和焦点的获得。
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(editText.isFocused()){
//已获得焦点
editText.requestFocus();//获得焦点
OK啦。。。
版权声明:本文为博主原创文章,未经博主允许不得转载。}

我要回帖

更多关于 android 获取控件坐标 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信