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