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); ...
随机推荐
- 操作系统 Lab1
练习1 1 ucore.img 是如何生成的 使用 make V= 查看详细的步骤 cc kern/init/init.c 使用cc工具进行预处理 gcc -Idir 将dir 作为查找目录(头文件) ...
- Leetcode16.3Sum Closest最接近的三数之和
给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这三个数的和.假定每组输入只存在唯一答案. 例如,给定数 ...
- html DOM(CSS放置位置的问题)
转载自: http://www.php.cn/div-tutorial-386900.html (本文对读者有帮助的话请移步支持原作者) 笔记: 这样会先加载css的样式,在渲染dom的时候已经知道了 ...
- Poj 2796 单调栈
关于单调栈的性质,和单调队列基本相同,只不过单调栈只使用数组的尾部, 类似于栈. Accepted Code: /******************************************* ...
- DataGrid无故多一行空白行
DataGrid绑定datatable时, Datagrid.Itemsource=dt.DefaultView: 发现DataGRID会多处一行 解决如下: 对Datagrid的CanUserAdd ...
- win7下装双系统win8安装及问题
配置:笔记本 联想S510p 准备:老毛桃UEFI版 8gU盘 win8 X64系统 问题1:出现 error 10099:invalid target partition specified ...
- JS DOM节点的增删改查
合并拆分 行内样式 script写在html里面
- vue-cli3 关闭eslint
关闭eslint 直接注释掉package.json文件中eslint的配置就可以了(以下是vue-cli的默认配置) "eslintConfig": { "root&q ...
- Sentinel 1.5.0 正式发布,引入 Reactive 支持
近日,流控降级组件 Sentinel 的又一个里程碑版本 1.5.0 正式发布. 该版本引入 Reactive 的支持,并提供多项新特性与改进.从 1.5.0 版本开始,Sentinel 仅支持 JD ...
- 【POJ 3294】Life Forms
[链接]h在这里写链接 [题意] 给你n个字符串. 让你找最长的字符串s; 这个s在超过一半的子串里面都有出现过且长度大于n/2; 如果有多个,输出多行. (按字典序输出) 也没说会不会出现大写. [ ...