Amr*_*rut 6 android android-widget android-intent android-layout
我坚持使用弹出窗口定位。我在单击按钮时显示我的弹出窗口。我希望它应该根据可用空间定位。此外,如果我的按钮在中心,它应该在按钮下方。下面是我的代码。请让我知道我错在哪里。谢谢你。
mBtnPopUp.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
ListView mListView = (ListView) mPopUpView.findViewById(R.id.pop_up_list_view);
mListView.setAdapter(mPopupListAdapter);
Drawable drawable = getResources().getDrawable(android.R.drawable.alert_light_frame);
mPopupWindow.setBackgroundDrawable(drawable);
// mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
showLikeQuickAction(0, 0);
mPopupWindow.showAsDropDown(mBtnPopUp);
}
});
mPopupWindow.setOutsideTouchable(true);
public void showLikeQuickAction(int xOffset, int yOffset)
{
int[] location = new int[2];
mBtnPopUp.getLocationOnScreen(location);
Rect anchorRect = new Rect(location[0], location[1], location[0] + mBtnPopUp.getWidth(), location[1] + mBtnPopUp.getHeight());
mBtnPopUp.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
int rootWidth = mBtnPopUp.getMeasuredWidth();
int rootHeight = mBtnPopUp.getMeasuredHeight();
@SuppressWarnings("deprecation")
int screenWidth = mWindowManager.getDefaultDisplay().getWidth();
int xPos = screenWidth - rootWidth + xOffset;
int yPos = anchorRect.top - rootHeight + yOffset;
if(rootWidth > anchorRect.right - anchorRect.left)
{
// right
xPos = anchorRect.right - rootWidth;
}
else
{
// left
xPos = anchorRect.left + 15;
}
if(xPos + rootWidth > screenWidth)
xPos = screenWidth - rootWidth - 20;
// display on bottom
if(rootHeight > anchorRect.top)
{
yPos = anchorRect.bottom + yOffset;
// mPopupWindow.setAnimationStyle(R.style.Animations_GrowFromTop);
}
mPopupWindow.showAtLocation(mBtnPopUp, Gravity.NO_GRAVITY, xPos, yPos);
}
Run Code Online (Sandbox Code Playgroud)
谢谢..
public void downloadBtnSelected(View anchor) {
final ListPopupWindow lpw = new ListPopupWindow(this);
String[] data = { ".png", ".pdf", ".jpg", ".jpeg" };
PopupAdapter pa = new PopupAdapter(data, this);
lpw.setAdapter(pa);
//setting up an anchor view
lpw.setAnchorView(anchor);
//Setting measure specifications. I'v used this mesure specs to display my
//ListView as wide as my anchor view is
lpw.setHeight(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT);
lpw.setWidth(anchor.getRight() - anchor.getLeft());
// Background is needed. You can use your own drawable or make a 9patch.
// I'v used a custom btn drawable. looks nice.
lpw.setBackgroundDrawable(this.getResources().getDrawable(android.R.drawable.btn_default));
// Offset between anchor view and popupWindow
lpw.setVerticalOffset(3);
lpw.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Our action.....
lpw.dismiss();
}
});
lpw.show();
}
Run Code Online (Sandbox Code Playgroud)
以及带有 onClickListener 的按钮来调用此方法:
Button btn = new Button(this);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
downloadBtnSelected(v);
}
});
Run Code Online (Sandbox Code Playgroud)
此代码可让您在 btn 下方显示一个弹出窗口,弹出窗口的宽度将与按钮的宽度相同。如果你想填充屏幕宽度 - 设置 width=LinearLayout.MATCH_PARENT 弹出菜单将显示在锚视图下方(如果有空间),如果下面没有空间则显示在锚视图之外
归档时间: |
|
查看次数: |
21913 次 |
最近记录: |