android EditText取消焦点且退出软键盘

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_38201918/article/details/70135815

android EditText取消焦点且退出软键盘

最近发现,如果在一个activity中直接加入EditText的话,每次打开这个activity的时候,就会自动打开软键盘,并且点哪里都取消不了。这会给用户一种特别糟糕的体验。
为了解决这种方法,想了一个解决的思路,就是点击背景就取消焦点并且退出软键盘,由于这个方法应该在所有拥有EditText的地方使用,所以就写成了一个工具类,用来调用

package com.baibian.tool;


import android.app.Activity;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;

import java.util.List;

/**
 * 这个工具类用来处理
 */
public class UI_Tools {
    private List<ViewGroup> listViewGroup;
    private List<EditText> listEditText;
    public int i = 0;

    public UI_Tools() {

    }

    /**
     * 这个方法用来使得EditText,,点击其他地方的时候,取消焦点并且退出软键盘。。在有EditView的地方都应该调用这个方法。
     * 传入的三个参数,第一个是活动,第二个是取消焦点要点击的地方,比如背景layout,listview之类的,第三个参数是其中一个edittext,只需要传入一个就可以达到效果
     */
    public void CancelFocus(final Activity activity, final List<ViewGroup> listViewGroup, final EditText edittext) {
        System.out.print(listViewGroup.size());
        for (; i < listViewGroup.size(); i++) {
            listViewGroup.get(i)
                    .setFocusable(true);
            listViewGroup.get(i)
                    .setFocusableInTouchMode(true);
            listViewGroup.get(i)
                    .setFocusable(true);
            listViewGroup.get(i)
                    .setFocusableInTouchMode(true);
            listViewGroup.get(i)
                    .requestFocus();
            listViewGroup.get(i)
                    .setOnTouchListener(new View.OnTouchListener() {
                        public boolean onTouch(View v, MotionEvent event) {
                            // TODO Auto-generated method stub
                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);

                            imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);//这行代码隐藏软键盘
                            return false;
                        }
                    });

        }
    }
    //一个布局的取消焦点
    public void CancelFocusOne(final Activity activity, final ViewGroup viewGroup, final EditText edittext) {

            viewGroup
                    .setFocusable(true);
        viewGroup                    .setFocusableInTouchMode(true);
        viewGroup                    .setFocusable(true);
        viewGroup                    .setFocusableInTouchMode(true);
        viewGroup                    .requestFocus();
        viewGroup                    .setOnTouchListener(new View.OnTouchListener() {

                        public boolean onTouch(View v, MotionEvent event) {
                            // TODO Auto-generated method stub

                            InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.INPUT_METHOD_SERVICE);
                            imm.hideSoftInputFromWindow(edittext.getWindowToken(), 0);//这行代码隐藏软键盘
                            return false;
                        }
                    });


    }
}

调用的关键代码:

 UI_Tools ui_tools = new UI_Tools();
        ui_tools.CancelFocusOne(this, edit_information_all_layout, user_name_edittext);

新手学习作品,如果改进的地方,希望大神指出,谢谢。

猜你喜欢

转载自blog.csdn.net/github_38201918/article/details/70135815