Android 单击或触摸其他视图时,清除编辑文本焦点并隐藏键盘

Android 单击或触摸其他视图时,清除编辑文本焦点并隐藏键盘,android,android-edittext,Android,Android Edittext,我试图隐藏键盘并清除光标(也无法键入内容) 我正在制作一个包含edittext、FrameLayout(它只是一个容器)和textView(具有clickListener)的应用程序。当我在edittext中输入内容,然后触摸或单击其他视图时,我希望隐藏键盘(如图所示)并清除edittext上的焦点(出现光标) 这是我的密码 MainActivity.java import android.support.v7.app.AppCompatActivity; import android.os.B

我试图隐藏键盘并清除光标(也无法键入内容)

我正在制作一个包含edittext、FrameLayout(它只是一个容器)和textView(具有clickListener)的应用程序。当我在edittext中输入内容,然后触摸或单击其他视图时,我希望隐藏键盘(如图所示)并清除edittext上的焦点(出现光标)

这是我的密码

MainActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    RelativeLayout mainLayout;

    EditText editText;
    FrameLayout container;
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (EditText)findViewById(R.id.editText);
        editText.setFocusableInTouchMode(true);
        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                Log.d("onFocusChange", "b #" + b);
                // i can only get true, i can't get false value. how can i get false value.
                // i want to use this method so hard!
            }
        });


        textView = (TextView)findViewById(R.id.textView);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // hide Keyboard and editText's focus will be false(also cursor is going to hide).
            }
        });

        container = (FrameLayout)findViewById(R.id.container);
        container.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                // hide Keyboard and editText's focus will be false(also cursor is going to hide).
                return true;
            }
        });
    }
}

activity_main.xml(这只是包含EditText、frameLayout和TextView的简单布局)


最后一件事,AndroidManifest.xml


我只是插入代码:

editText=(editText)findViewById(R.id.editText)处添加
final

试试这个

textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

        }
});


我希望这对您有所帮助

editText=(editText)findViewById(R.id.editText)添加
final
at

试试这个

textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

        }
});


我希望这对您有所帮助

您必须收听editText的onFocusChange

代码可以是这样的

 editText.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (v.getId() == R.id.editText && !hasFocus) {
                    InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                }
            }
        });

即使您使用fragment刷卡,此代码也可以工作。(对于fragment,将mContext更改为getActivity())

您必须收听editText的onFocusChange

代码可以是这样的

 editText.setOnFocusChangeListener(new OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (v.getId() == R.id.editText && !hasFocus) {
                    InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                }
            }
        });

即使您使用fragment刷卡,此代码也可以工作。(对于fragment,将mContext更改为getActivity())

textView.setFocusableInTouchMode(true);textView.requestFocus();在textview中添加上述2个条件单击Listener它可以工作!。(我可以从editText的focusChangeListener获取false值),但是,container.setFocusableInTouchMode(true);container.requestFocus();它不起作用。确定,然后使用container.onclicklistener,然后检查我欣赏您的解决方案。textView.setFocusableInTouchMode(true);textView.requestFocus();在textview中添加上述2个条件单击Listener它可以工作!。(我可以从editText的focusChangeListener获取false值),但是,container.setFocusableInTouchMode(true);container.requestFocus();好吧,然后使用container.onclicklistener,然后检查我感谢您的解决方案。哦,我需要这段代码,处理片段。嗯!:Doh,我需要这段代码,处理片段。嗯!:D