我尝试隐藏键盘并清除光标(也无法输入内容)。
我正在使用edittext,FrameLayout(它只是容器)和textView(具有clickListener)创建应用程序。当我在edittext中输入内容然后触摸或单击其他视图时,我想隐藏键盘(显示)并清晰地关注edittext(显示光标)。
这是我的代码。
MainAcitivity.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的简单布局)
<RelativeLayout
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"
tools:context=".MainActivity"
android:focusable="true"
android:focusableInTouchMode="true" >
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@+id/container"
android:background="@android:color/holo_blue_bright"
android:layout_above="@+id/textView"
android:layout_below="@+id/editText"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<TextView
android:id="@+id/textView"
android:gravity="center"
android:layout_alignParentBottom="true"
android:text="textView : layout_alignParentBottom = true"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
最后一件事,AndroidManifest.xml
我只是插入代码:<activity ... android:windowSoftInputMode="adjustResize"> ... </activity>
答案 0 :(得分:1)
在final
editText = (EditText)findViewById(R.id.editText);
试试这个
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.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if (!b) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
}
});
我希望这对你有所帮助
答案 1 :(得分:1)
你必须使用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);
}
}
});
即使您使用片段滑动,此代码仍然有效。(对于片段,将mContext更改为getActivity());