Android 动态设置控件获取焦点
之前写过一篇博客,简单的介绍了Android
隐藏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" > <EditText
android:id="@+id/edit_name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="姓名"
android:inputType="text"
android:minHeight="50dp" /> <EditText
android:id="@+id/edit_mobile"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="手机号"
android:inputType="phone"
android:minHeight="50dp" />
</LinearLayout> <Button
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 {
@Override
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.edit_name: if (hasFocus) {
edit_name.setText("ning shuai");
} else {
edit_name.setText("");
}
break;
case R.id.edit_mobile:
if (hasFocus) {
edit_mobile.setText("963258741");
} else {
edit_mobile.setText("");
}
break;
}
}
}
焦点事件很容易理解,不多讲了。最后,我们定义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.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout; public class MainActivity extends Activity { private static final String TAG = "MainActivity"; private LinearLayout edit_layout; private EditText edit_name; private EditText edit_mobile; @Override
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 {
@Override
public void onFocusChange(View v, boolean hasFocus) {
switch (v.getId()) {
case R.id.edit_name: if (hasFocus) {
edit_name.setText("ning shuai");
} else {
edit_name.setText("");
}
break;
case R.id.edit_mobile:
if (hasFocus) {
edit_mobile.setText("963258741");
} else {
edit_mobile.setText("");
}
break;
}
}
}
}
看下最后的效果:
怎么样,了解吧,希望能帮助大家解决某些问题!
Android 动态设置控件获取焦点的更多相关文章
- Android 动态设置控件高度
TextView textView= (TextView)findViewById(R.id.textview); LinearLayout.LayoutParams linearParams =(L ...
- android 动态设置控件宽高度
Android 代码里直接使用 setWidth() 和 setHeight()设置宽高度是没用的. 解决办法是 改用setLayoutParams()方法 如设置宽高内容自适应: setLayout ...
- android屏幕适配的全攻略3-动态获取手机屏幕宽高及动态设置控件宽高
1.获取手机屏幕宽高: DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetr ...
- android动态增加控件时控制样式的方法
在学习android的动画时,发现所谓的tween动画只是改变绘制效果并不改变原控件的位置时是颇为失望的,虽然3.0之后已经有了property animation,但是由于要兼容老版本的androi ...
- android 开发-设置控件/view的水平方向翻转
设置控件沿着水平方向翻转(即Y轴180°) 看效果: 代码: <pl.droidsonroids.gif.GifImageView android:id="@+id/gv_image1 ...
- Android中设置控件的背景颜色的方式整理
版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 在Android开发中,经常需要设置控件的背景颜色或者图片的src颜色. 效果图 代码分析 根据使用的方法不同,划分为 setBackgro ...
- android 动态改变控件位置和大小 .
动态改变控件位置的方法: setPadding()的方法更改布局位置. 如我要把Imageview下移200px: ImageView.setPadding( ImageVie ...
- android中设置控件获得焦点 (转)
android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例: btn.setFocusable(true); ...
- android中设置控件获得焦点
android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例: btn.setFocusable(true); ...
随机推荐
- centos部分网站无法访问问题的解决
CentOS 5内核对TCP的读缓冲区大小有缺省设置,缺省为:net.ipv4.tcp_rmem = 4096 87380 4194304 解决办法就是将最后一个数字改小一点,具体操作就是在文件/et ...
- 【洛谷】P1590 失踪的7
P1590 失踪的7 题目描述 远古的Pascal人也使用阿拉伯数字来进行计数,但是他们又不喜欢使用7,因为他们认为7是一个不吉祥的数字,所以Pascal数字8其实表示的是自然数中的7,18表示的是自 ...
- SQL Sever实验二 交互式 SQL
一. 实验目的 1.观察查询结果, 体会 SELECT 语句实际应用: 2.要求学生能够使用 SELECT 语句进行数据库查询. 3. 熟练掌握各种查询的操作方法. 二. 实验准备 1. 完成实验一所 ...
- php分页查询的简单实现代码
<body><h1>分页查询</h1><?phpinclude("DADB.class.php");$db=new DADB();$tj= ...
- Js 克隆
1.浅表克隆 调用concate() 或者slice() 方法,可以创建数组的浅表副本,在浅表副本中,如果原始数组的元素是复杂数据类型,则元素值指向对象的引用而非对象本身, 与原始数组一样,浅表副本的 ...
- 八.DBN深度置信网络
BP神经网络是1968年由Rumelhart和Mcclelland为首的科学家提出的概念,是一种按照误差反向传播算法进行训练的多层前馈神经网络,是目前应用比较广泛的一种神经网络结构.BP网络神经网络由 ...
- 响应式布局及bootstrap(实例)
说明: 这几天公司要求网站实现响应式布局,所以对响应式布局进行了相对全面的了解,并做了几个实例. 转载请注明源地址,谢谢^_^,http://www.cnblogs.com/liu-zhen/p/44 ...
- Vue--moment时间格式插件安装和使用
使用链接:http://momentjs.cn/ 1.安装monent 2.导入 3.过滤器 4.template模板使用:
- openssl生成证书 - CSDN博客
大家都可以生成公钥.私钥对,无法确认公钥对到底是谁的. 如果能够确定公钥到底是谁的,就不会有这个问题了.例如,如果收到“黑客”冒充“服务器”发过来的公钥,经过某种检查,如果能够发现这个公钥不是“服务器 ...
- python中的open函数
open函数用于文件处理 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 1 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件 ...