setFocusable() 设置view接受焦点的资格
isFocusable() view是否具有接受焦点的资格

setFocusInTouchMode() 对应在触摸模式下,设置是否有焦点来响应点触的资格
isFocusableInTouchMode() 对应在触摸模式下,view是否具有焦点的资格

强制view焦点获取,注意:这些方法都不会触发事件(onTouch,onClick等),想要触发onClick事件请调用view.performClick()
requestFocus() ------ view
requestFocus(int direction)当用户在某个界面聚集焦点,参数为下面的4个
requestFocusFromTouch() 触摸模式下
......
requestChildFocus (View child, View focused) ------viewGroup
1 父元素调用此方法
2 child 将要获取焦点的子元素
3 focused 现在拥有焦点的子元素

一般也可以通过 配置文件设置
View.FOCUS_LEFT Move focus to the left
View.FOCUS_UP Move focus up
View.FOCUS_RIGHT Move focus to the right
View.FOCUS_DOWN Move focus down
代码设置实现 其实都是通过这些设置的

isInTouchMode() 触摸模式

-------------------------------------------------------------------------------
下面的例子主要使用了requestFocus()方法使焦点在各个控件之间切换。
看下图:



最上面的弹出框是个PopupWindow,需要依次输入4个密码,为了方便快捷,当上一个文本框输入值之后,焦点自动切换到下一个文本框,当输入到最后一个文本框后,PopupWindow自动关闭,并返回4个文本框中的值,放在String[]数组中。
看代码:
package com.reyo.view;import android.content.Context;import android.graphics.drawable.BitmapDrawable;import android.text.Editable;import android.text.TextWatcher;import android.view.View;import android.widget.EditText;import android.widget.ImageButton;import android.widget.LinearLayout.LayoutParams;import android.widget.PopupWindow;import com.reyo.merchant2.R;public class PasswordPopupWindow extends PopupWindow {private Context context;private EditText[] texts;private ImageButton btn_close;public PasswordPopupWindow(Context context, View view) {super(view, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, true);this.context = context;this.setBackgroundDrawable(new BitmapDrawable());// 响应返回键,响应触摸周边消失this.setAnimationStyle(R.style.PopupAnimationFromTop);this.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE);texts = new EditText[4];texts[0] = (EditText) view.findViewById(R.id.et_0);texts[1] = (EditText) view.findViewById(R.id.et_1);texts[2] = (EditText) view.findViewById(R.id.et_2);texts[3] = (EditText) view.findViewById(R.id.et_3);for (int i = 0; i < texts.length; i++) {final int curIndex = i;texts[i].addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start,int before, int count) {// TODO Auto-generated method stub}@Overridepublic void beforeTextChanged(CharSequence s, int start,int count, int after) {// TODO Auto-generated method stub}@Overridepublic void afterTextChanged(Editable s) {// TODO Auto-generated method stubint nextIndex = curIndex + 1;//当输入到最后一个EditText时关闭PopupWindowif (nextIndex >= texts.length) {dismiss();return;}texts[nextIndex].requestFocus();}});}btn_close = (ImageButton) view.findViewById(R.id.btn_close);btn_close.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {// TODO Auto-generated method stubdismiss();}});this.setOnDismissListener(onDismissListener);}private OnDismissListener onDismissListener = new OnDismissListener() {public void onDismiss() {// TODO Auto-generated method stubif (onCompleteListener != null) {String[] text = new String[texts.length];for (int i = 0; i < texts.length; i++) {text[i] = texts[i].getText().toString();}onCompleteListener.onComplete(text);}// 清空&归位for (int i = 0; i < texts.length; i++) {texts[i].setText("");}texts[0].requestFocus();}};private OnCompleteListener onCompleteListener;public void setOnCompleteListener(OnCompleteListener onCompleteListener) {this.onCompleteListener = onCompleteListener;}public interface OnCompleteListener {public void onComplete(String[] texts);}}


在Activity中的用法就简单了:
private PasswordPopupWindow popupWindow;if (popupWindow == null) {LayoutInflater mLayoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);View popup_view = mLayoutInflater.inflate(R.layout.popup_window_password,null);popupWindow = new PasswordPopupWindow(context, popup_view);//popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_FROM_FOCUSABLE);popupWindow.showAtLocation(container, Gravity.TOP, 0, 0);popupWindow.setOnCompleteListener(new PasswordPopupWindow.OnCompleteListener() {@Overridepublic void onComplete(String[] texts) {// TODO Auto-generated method stubStringBuffer sb = new StringBuffer();for (int i = 0; i < texts.length; i++) {sb.append(texts[i]);}String p=sb.toString();if(p.length()==texts.length){//doSomethingYouWant();}}});} else {if (!popupWindow.isShowing()) {popupWindow.showAtLocation(container, Gravity.TOP, 0, 0);}}// 强制显示输入法toggleSoftInput(context);


如果弹出PasswordPopupWindow后没有弹出输入法,则强制显示输入法:
/** * 如果输入法打开则关闭,如果没打开则打开 *  * @param context */protected void toggleSoftInput(Context context) {InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);inputMethodManager.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);}


PasswordPopupWindow的布局文件popup_window_password.xml如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:gravity="center_vertical"    android:orientation="vertical"     android:background="@color/gray1"    >    <ImageButton        android:id="@+id/btn_close"        android:layout_width="60dp"        android:layout_height="60dp"        android:background="@android:color/transparent"        android:src="@drawable/bg_btn_close"        android:scaleType="center"        android:layout_gravity="top|right"        />            <LinearLayout         android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="horizontal"   android:gravity="center"        >        <EditText             android:id="@+id/et_0"            android:layout_width="wrap_content"    android:layout_height="wrap_content"     android:inputType="textPassword"    android:singleLine="true"    android:minWidth="60dp"    android:minHeight="60dp"    android:maxLength="1"    android:layout_marginLeft="10dp"    android:layout_marginRight="10dp"    android:gravity="center"    android:textSize="@dimen/font_xxxbig"            />        <EditText             android:id="@+id/et_1"            android:layout_width="wrap_content"    android:layout_height="wrap_content"     android:inputType="textPassword"    android:singleLine="true"    android:minWidth="60dp"    android:minHeight="60dp"    android:maxLength="1"    android:layout_marginLeft="10dp"    android:layout_marginRight="10dp"    android:gravity="center"    android:textSize="@dimen/font_xxxbig"            />        <EditText             android:id="@+id/et_2"            android:layout_width="wrap_content"    android:layout_height="wrap_content"     android:inputType="textPassword"    android:singleLine="true"    android:minWidth="60dp"    android:minHeight="60dp"    android:maxLength="1"    android:layout_marginLeft="10dp"    android:layout_marginRight="10dp"    android:gravity="center"    android:textSize="@dimen/font_xxxbig"            />        <EditText             android:id="@+id/et_3"            android:layout_width="wrap_content"    android:layout_height="wrap_content"     android:inputType="textPassword"    android:singleLine="true"    android:minWidth="60dp"    android:minHeight="60dp"    android:maxLength="1"    android:layout_marginLeft="10dp"    android:layout_marginRight="10dp"    android:gravity="center"    android:textSize="@dimen/font_xxxbig"            />    </LinearLayout><TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="请输入操作密码(该操作由服务员完成)"        android:textColor="@color/white"        android:textSize="@dimen/font_middle"        android:singleLine="true"        android:layout_margin="20dp"        android:layout_gravity="center_horizontal"        /></LinearLayout>


动画文件:
<style name="PopupAnimationFromTop" parent="android:Animation"  mce_bogus="1" >        <item name="android:windowEnterAnimation">@anim/anim_top_in</item>        <item name="android:windowExitAnimation">@anim/anim_top_out</item>    </style>


anim_top_in.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="200" android:fillAfter="true"android:interpolator="@android:anim/bounce_interpolator"/></set>

anim_top_out.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromYDelta="0" android:toYDelta="-100%p" android:duration="200"android:fillAfter="true"android:interpolator="@android:anim/bounce_interpolator"/></set>

更多相关文章

  1. Android(安卓)view更改背景资源,padding消失的问题
  2. 简析Android多种AlertDialog对话框效果
  3. Android控件 TimePicker
  4. Android-NDK入门续
  5. andrioid——checkbox勾选按钮自定义样式
  6. Android设置背景图片平铺
  7. Android(安卓)webView打不开一些网页的解决办法
  8. color用法大全--Android布局背景颜色设置
  9. 设置 quick-cocos2d-x 在 Mac 下的编译环境

随机推荐

  1. 阿里云物联网平,Android台接入问题(couldn'
  2. Android文件选择器的实例分享
  3. Android(安卓)Adapter 源码笔记(1)
  4. android操作XML的几种方式
  5. Android读写XML(下)——创建XML文档
  6. Android(安卓)studio 中创建AIDL Service
  7. Android内存优化
  8. 详解android:scaleType属性
  9. 使用Android(安卓)BindingAdapter与Inver
  10. android webview 软键盘覆盖 输入框的 问