这是一个商品详细页面我想点击“参数”弹出来一个页面展示商品的全部参数,但是现在我写的这个PopupWindow的显示位置有些问题我点击“参数”就会在参数下面弹出一个页面或“参数”上面弹出一个页面。我想在最下面弹出来一个页面就是想把弹出页面的位置设置成最下面弹出来的效果在购物车下面弹出来。
private void showPopupWindow(){
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popup_window, null);
PopupWindow popupWindow = new PopupWindow(contentView,
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT,true);
ImageView imageViewOne = (ImageView)contentView.findViewById(R.id.image_1);
ImageView imageViewTwo = (ImageView)contentView.findViewById(R.id.image_2);
ImageView imageViewThree = (ImageView)contentView.findViewById(R.id.image_3);
ImageView imageViewFour = (ImageView)contentView.findViewById(R.id.image_4);
ImageView imageViewFive = (ImageView)contentView.findViewById(R.id.image_5);
ImageView imageViewSix = (ImageView)contentView.findViewById(R.id.image_6);
ImageView imageViewSeven = (ImageView)contentView.findViewById(R.id.image_7);
ImageView imageViewEight = (ImageView)contentView.findViewById(R.id.image_8);
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main,null);
popupWindow.showAtLocation(view, Gravity.BOTTOM,0,getLayoutHeight());
}
说明:第一步先创建view对象来绑定xml布局,接着创建PopupWindow实例。对于接下来的控件的加载注册与碎片很相似,都是依附于开头提到的view对象。
最后两行代码是将要展示的Popup Window设定展示的位置。如若想让展示的控件点击有效果,只需设置监听即可:
private void showPopupWindow(){
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popup_window, null);
popupWindow = new PopupWindow(contentView,
WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT,true);
ImageView imageViewOne = (ImageView)contentView.findViewById(R.id.image_1);
ImageView imageViewTwo = (ImageView)contentView.findViewById(R.id.image_2);
ImageView imageViewThree = (ImageView)contentView.findViewById(R.id.image_3);
ImageView imageViewFour = (ImageView)contentView.findViewById(R.id.image_4);
ImageView imageViewFive = (ImageView)contentView.findViewById(R.id.image_5);
ImageView imageViewSix = (ImageView)contentView.findViewById(R.id.image_6);
ImageView imageViewSeven = (ImageView)contentView.findViewById(R.id.image_7);
ImageView imageViewEight = (ImageView)contentView.findViewById(R.id.image_8);
imageViewOne.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
imageViewTwo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
imageViewThree.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
imageViewFour.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
imageViewFive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
showSecondPopupWindow();
popupWindow.dismiss();
}
});
imageViewSix.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
imageViewSeven.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
imageViewEight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this,"MB_OK.",Toast.LENGTH_SHORT).show();
}
});
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_main,null);
popupWindow.showAtLocation(view, Gravity.BOTTOM,0,getLayoutHeight());
}
回答:
为了让ChatGPT能够更好地理解您的问题,我稍微修改了一下问题标题和问题内容:
问题标题:如何设置PopupWindow弹出页面的位置到指定控件的下方?
问题内容:我正在开发一个商品详细页面,当用户点击“参数”时,我想弹出一个页面,展示商品的全部参数。但是,我写的PopupWindow的显示位置有些问题——它有时会在参数下面弹出一个页面,有时候会在参数上面弹出一个页面。我希望它在购物车下方弹出。请问应该如何实现这个最终的显示效果呢?
具体解决方案如下:
PopupWindow popupWindow = new PopupWindow(context);
popupWindow.setWidth(width);
popupWindow.setHeight(height);
popupWindow.setContentView(contentView);
这里的width和height是PopupWindow的宽度和高度,contentView是PopupWindow里面要展示的内容。
比如你可以用以下代码获取购物车控件在屏幕上的位置:
int[] cartLocation = new int[2];
cartView.getLocationOnScreen(cartLocation);
int cartX = cartLocation[0];
int cartY = cartLocation[1];
这里的cartView是购物车的控件对象。
你可以根据购物车控件的位置和PopupWindow的大小,计算出最终的位置。比如你可以用以下代码计算PopupWindow的位置:
int popupX = cartX + cartView.getWidth() / 2 - popupWindow.getWidth() / 2;
int popupY = cartY + cartView.getHeight();
这里的popupX和popupY就是PopupWindow应该出现的位置。
最后,你可以用以下代码设置PopupWindow的位置并显示出来:
popupWindow.showAtLocation(parentView, Gravity.NO_GRAVITY, popupX, popupY);
这里的parentView是PopupWindow的父控件对象,Gravity.NO_GRAVITY表示PopupWindow不依赖于任何Gravity设置,通过popupX和popupY来指定位置。
完整的代码如下:
PopupWindow popupWindow = new PopupWindow(context);
popupWindow.setWidth(width);
popupWindow.setHeight(height);
popupWindow.setContentView(contentView);
int[] cartLocation = new int[2];
cartView.getLocationOnScreen(cartLocation);
int cartX = cartLocation[0];
int cartY = cartLocation[1];
int popupX = cartX + cartView.getWidth() / 2 - popupWindow.getWidth() / 2;
int popupY = cartY + cartView.getHeight();
popupWindow.showAtLocation(parentView, Gravity.NO_GRAVITY, popupX, popupY);
希望这个解答能够帮助到您!