我有一个ListView
,每一行都有一个TextView
,点击该行后,我想要一个PopupWindow
带有 的EditText
弹出该行。然后,用户输入的文本应显示TextView
在行中。
当我单击一行时,TextView
确实会出现,但我没有得到屏幕键盘。但是我使用的是模拟器,我在键盘上输入的任何内容都会出现在EditText
. 但我也需要屏幕键盘来明显地出现。此外,由于 EditText 似乎从来没有焦点,我永远无法摆脱它,因为我PopupWindow
在EditText
失去焦点时忽略了它。
我也看过this、this和其他一些答案。他们都说setFocusable(true)
应该为PopupWindow
. 这没有用。其他答案说关闭并再次显示弹出窗口或为弹出窗口设置背景,或显式调用InputMethodManager inputMgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
并显示软输入,尝试了所有,没有工作。
这是我的 onListItemClick 代码:
private class SearchItemClickListener implements
ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Log.d("listItemClick", "received lsit click");
final TextView selectTV=(TextView)view.findViewById(R.id.filter_name);
final StringPair selectItem=mSearchFilters.get(position);
final PopupWindow mPopupWindow;
Log.d("listItemClick", "got to else");
LinearLayout layout=new LinearLayout(mContext);
final EditText et=new EditText(mContext);
et.setWidth(LayoutParams.MATCH_PARENT);
et.setTextColor(Color.BLACK);
et.setSingleLine();
et.setBackgroundResource(android.R.drawable.editbox_background_normal);;
layout.addView(et);
mPopupWindow=new PopupWindow(layout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
et.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus){
selectTV.setText(et.getText().toString());
selectItem.second=et.getText().toString();
mPopupWindow.dismiss();
}
}
});
mPopupWindow.setFocusable(true);
mPopupWindow.update();
mPopupWindow.showAsDropDown(view);
mPopupWindow.dismiss();
mPopupWindow.showAsDropDown(view);
Log.d("listItemClick", "showed popup");
}
}
PS在旁注中,EditText 宽度非常小,似乎只能包含 4-5 个字符,我如何让它成为完整的屏幕宽度?将宽度设置为 MATCH_PARENT 不起作用。
这是一张图片,小的编辑文本,没有键盘: