我正在使用弹出窗口显示一些信息,并有一个允许更改信息的编辑按钮。我正在加载所有textview,buttons和edittext字段,并根据需要隐藏/显示它们。 edittext字段不允许我编辑它们。我已经尝试了以下关于将焦点设置为true的建议,但这不起作用。还有其他建议吗?
试过这个:EditText On A Popup Window
编辑:以下是我的代码的一部分。我刚刚包含了用于初始化edittext并显示弹出内容的部分,因为其他一切都在工作,而不是edittext。我正在使用tablelayout,当用户单击一行时,将显示弹出窗口。请记住,我仍然是Java和Android的新手!
编辑#2:当选择edittext时,软键盘没有显示,但现在它将显示我是否解除弹出一次然后再次调用它。然后我尝试强制显示软键盘,它显示弹出窗口(另一个问题)。我能够选择数字1,因为它几乎没有显示在弹出窗口后面,但它似乎也没有工作。修复方法与此相同:关闭弹出窗口并调用它。 所以我剩下的问题是能够输入edittext而不必一次关闭弹出窗口并回想起来。因此,我正在改变这个问题的标题。
row1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
final EditText pwETBrand = (EditText) vPopUp.findViewById(R.id.et_editbrand);
if (!infoClick) {
infoClick = true;
// Popup elements initialized earlier
pwInfo.showAtLocation(llInfo, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0);
pwInfo.update(0, 0, llMain.getWidth()-50, llMain.getHeight()-100);
pwInfo.setFocusable(true);
...
// Hide some elements initially until "EDIT" button is pressed
pwETBrand.setVisibility(View.INVISIBLE);
...
// When EDIT button is pressed, hide default elements, and show edit elements
pwEdit.setOnClickListener(new OnClickListener() {
public void onClick(View v2) {
pwETBrand.setVisivility(View.VISIBLE);
// Other element settings go here
pwInfo.setFocusable(true);
}
)};
...
}
}
答案 0 :(得分:2)
我已经实施了一个解决方案,但它可能不是最好的解决方案。我在类初始化时设置了一个布尔字段,用于检查是否曾调用过弹出窗口。如果尚未调用,则会立即关闭弹出窗口并重新打开它,因为我的问题是在弹出窗口初始化中。
pwInfo.showAtLocation(llInfo, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0);
pwInfo.update(0, 0, llMain.getWidth()-50, llMain.getHeight()-100);
pwInfo.setFocusable(true);
if (pwFirst) {
pwFirst = false;
pwInfo.dismiss();
pwInfo.showAtLocation(llInfo, Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL, 0, 0);
pwInfo.update(0, 0, llMain.getWidth()-50, llMain.getHeight()-100);
pwInfo.setFocusable(true);
}
不是最好的解决方案,但它确实有效。
答案 1 :(得分:2)
试试这个,
final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);
适合我。
答案 2 :(得分:1)
使用以下链接的代码,它可能对您有帮助。
答案 3 :(得分:1)
每当您创建PopupWindow
时,您必须将true
放在focusable
中:
PopupWindow(View contentView, int width, int height, boolean focusable)
final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,true);
祝你好运