我想用以下条件创建1个编辑文本: - 用户无法正常关注此控件。 - 当用户单击此控件时,将显示soft-keyborad,用户可以输入此控件 - 当用户在此软键盘上或在设备上按回车键时,它会关闭并返回到正常视图,而控制不是焦点。
我尝试了下面的代码,但没有工作:( 启动时,控制不是焦点:确定
单击控件时,在第一次单击时,控件是焦点,但不显示soft-keyborad
在第二次单击中,显示soft-keyborad
当按下后退按钮设备时,带回控制的屏幕仍然是焦点:不正常
public void onCreate(Bundle savedInstanceState)
{
final EditText txtSearch = (EditText)this.findViewById(R.id.p60004_txt_search_str);
txtSearch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
txtSearch.setFocusable(true);//(false);
txtSearch.setFocusableInTouchMode(true);
txtSearch.requestFocus();
}
});
txtSearch.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER))
{
String strSearch = txtSearch.getText().toString();
if (strSearch != null && strSearch != ""){
searchFriend(UserAPIConstants.FRIEND_SEARCH_TYPE_SC, strSearch);
}
hideSoftKeyboard(v);
txtSearch.setFocusable(false);
txtSearch.setFocusableInTouchMode(false);
}
return false;
}
});
public void hideSoftKeyboard (View view) {
InputMethodManager imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
答案 0 :(得分:1)
在具有edittext的xml中,为布局节点
放置这些值 android:focusable="true"
android:focusableInTouchMode="true"
并且不要为编辑文本添加任何可聚焦或可聚焦的触摸模式属性..
然后在onKey方法的代码中删除这些行..
txtSearch.setFocusable(false);
txtSearch.setFocusableInTouchMode(false);
并放
txtSearch.clearFocus();
你应该覆盖这个方法
onBackPressed()
像这样......
@Override
public void onBackPressed() {
txtSearch.clearFocus();
//hide the soft keyboard..
}
答案 1 :(得分:0)
尝试评论
hidekeyboard(v);
以及Alex Lockwood建议的变化。
答案 2 :(得分:0)
在onClick()
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);
关闭键盘使用
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);