android popupwindow showAsDropDown 为何offsetx无效,offsety有效
怪我咯
怪我咯 2017-04-17 13:05:16
[Android讨论组]

这是我的代码:

public class CustomPopUpWindowOfAdd extends PopupWindow {
    private Context mContext;
    private PopupWindow popupWindow;
    private RelativeLayout anchorView;
    @InjectView(R.id.store_rippleView)
    LayoutRipple store_ripple;
    @InjectView(R.id.scan_rippleView)
    LayoutRipple scan_ripple;
    @InjectView(R.id.manually_rippleView)
    LayoutRipple manually_ripple;


    public CustomPopUpWindowOfAdd(Context context, RelativeLayout  anchorView){
        super(context);
        this.mContext = context;
        this.anchorView = anchorView;
       View view = LayoutInflater.from(mContext).inflate(R.layout.add_menu, null);
        setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.menu_shape));
       setContentView(view);
        setFocusable(true);
        setTouchInterceptor(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
                    dismiss();
                    return true;
                }
                return false;
            }
        });
       ButterKnife.inject(this,view);
        initViewAction();
//       popupWindow = new PopupWindow(view);
    }
    private void initViewAction(){
        store_ripple.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AVAnalytics.onEvent(mContext, "openStore");
//
                mContext.startActivity(new Intent(mContext, WebAppStoreActivity.class));
                dismiss();
            }
        });
        scan_ripple.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mContext.startActivity(new Intent(mContext, BarCodeScanActivity.class));
                dismiss();
            }
        });
        manually_ripple.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               mContext.startActivity(new Intent(mContext, ManuallyAddActivity.class));
                dismiss();
            }
        });
    }
    public void show(){
        LogUtil.i("show window");
        int offsetX = Utils.dpToPx(-148,mContext.getResources());
        int offsetY = Utils.dpToPx(-48,mContext.getResources());
        showAsDropDown(anchorView, offsetX, offsetY);
    }


}

无论我offsetX设置什么值,他显示都是靠右边屏幕

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(1)
高洛峰

很简单,showAsDropDown显示的点是以anchorView左下角点为参照点.
改为

showAsDropDown(anchorView,-anchorView.getWidth()-offsetX,-offsetY);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号