我正在创建一个popupWindow
,但在我调用它时Fragment
没有显示。{
这是我的popupWindow代码:
LayoutInflater layoutInflater =
(LayoutInflater)getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow = new PopupWindow(
popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);
btnDismiss.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
popupWindow.dismiss();
}});
popupWindow.showAsDropDown(getView());
//popupWindow.showAsDropDown(btnOpenPopup, 50, -30);
//popupWindow.showAsDropDown(getCurrentFocus());
popupView.setOnTouchListener(new OnTouchListener() {
int orgX, orgY;
int offsetX, offsetY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
orgX = (int) event.getX();
orgY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:
offsetX = (int)event.getRawX() - orgX;
offsetY = (int)event.getRawY() - orgY;
popupWindow.update(offsetX, offsetY, -1, -1, true);
break;
}
return true;
}});
答案 0 :(得分:4)
以下代码可能符合您的规范。从分配给View的OnClickListener的onClick(View v)内部调用此方法:
public void showPopup(View anchorView) {
View popupView = getLayoutInflater().inflate(R.layout.popup_layout, null);
PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// Example: If you have a TextView inside `popup_layout.xml`
TextView tv = (TextView) popupView.findViewById(R.id.tv);
tv.setText(....);
// Initialize more widgets from `popup_layout.xml`
....
....
// If the PopupWindow should be focusable
popupWindow.setFocusable(true);
// If you need the PopupWindow to dismiss when when touched outside
popupWindow.setBackgroundDrawable(new ColorDrawable());
int location[] = new int[2];
// Get the View's(the one that was clicked in the Fragment) location
anchorView.getLocationOnScreen(location);
// Using location, the PopupWindow will be displayed right under anchorView
popupWindow.showAtLocation(anchorView, Gravity.NO_GRAVITY,
location[0], location[1] + anchorView.getHeight());
}
这里的anchorView是来自onClick(视图v)的v。
答案 1 :(得分:1)
使用以下代码显示弹出窗口。它将适合您。
View popupView = layoutInflater.inflate(R.layout.popup, null);
final PopupWindow popupWindow = new PopupWindow(
popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popupWindow.showAtLocation(popupView , Gravity.CENTER, 0, 0);
答案 2 :(得分:1)
final PopupWindow popupWindow = new PopupWindow(
popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
检查您使用的LayoutParams是否与视图的父级匹配。
例如如果父级是LinearLayout,请使用LinearLayout.LayoutParams.WRAP_CONTENT
答案 3 :(得分:1)
以下是显示和隐藏弹出窗口的示例代码。
TextView popupWindowTextView = new TextView(getActivity());
Button popupWindowButton = new Button(getActivity());
LinearLayout layout = new LinearLayout(getActivity());
popupWindowButton.setText("OK");
popupWindowTextView.setText("Popup Window. Click on OK to dismiss.");
popupWindowTextView.setPadding(0, 0, 0, 20);
layout.setOrientation(1);
layout.addView(popupWindowTextView);
layout.addView(popupWindowButton);
int popupWindowWidth = 200;
int popupWindowHeight = 150;
final PopupWindow popupWindow = new PopupWindow(context);
popupWindow.setContentView(layout);
popupWindow.setWidth(popupWidth);
popupWindow.setHeight(popupHeight);
popupWindow.setFocusable(true);
popupWindow.showAtLocation(layout, Gravity.NO_GRAVITY, popupWindowWidth, popupWindowHeight);
popupWindowButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
popupWindow.dismiss();
}
});
答案 4 :(得分:0)
R.layout.popup
的根应该有
android:layout_width="wrap_content"
android:layout_height="wrap_content"
答案 5 :(得分:0)
只需在update
之后立即使用showAsDropDown
,如下所示:
pop.showAsDropDown(anchor);
pop.update(0,0, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);