学习笔记 popupwindow

 

疯狂android上弄来的代码

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View root = this.getLayoutInflater().inflate(R.layout.popupwindow, null);
        final PopupWindow popup = new PopupWindow(root,100,100);
        TextView txt = (TextView) findViewById(R.id.txt);
        Button btn = (Button) findViewById(R.id.btn);
        
        btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				popup.showAsDropDown(v);
				//popup.showAtLocation(findViewById(R.id.btn), Gravity.CENTER_HORIZONTAL, 0, 0);
				//popup.showAtLocation(findViewById(R.id.btn), Gravity.TOP, 0, 0);
			}
		});
        
        root.findViewById(R.id.txtBtn).setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				popup.dismiss();
				
			}
		});
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}


 

popupwindow的显示方法:showasdropdown()和showatlocation(),两种选一种就能正常显示,要关闭时只要调用dismiss()方法好了。

showAsDropDown(View anchor),这里的参数是作为popupwindow位置参考用的。也就是说,设置的popupwindow在这个anchor的下面。

而另一种方法showAtLocation(View parent, int gravity, int x, int y),第一个参数其实是随便任何一个view都可以...他会调用自身方法showAtLocation(IBinder token, int gravity, int x, int y),而parent呢只要能调用View下的public IBinder getWindowToken()方法得到一个IBinder的实例就好了。第二个是对齐方式,第三、四个是坐标偏移量。

因为今天不小心把第一个参数打错了,还得到了原本想要的结果,就蛋疼了一下,没想到传什么进去都是可以的...哦no!好像其他类也有类似的情况,之前竟然都没注意。学习之!!

嗯,popupwindow还需要设置得到自己的view。方法是

View root = this.getLayoutInflater().inflate(R.layout.popupwindow, null);
        final PopupWindow popup = new PopupWindow(root,100,100);


又来了,getLayoutInflater()!得到后调用它下面的inflate方法构造出一个view来让popupwindow加载。

好样的!我在他的源码里面没有找到能输入xml文件作参数自己设定的,为毛不给个方便绿色通道让我少点事情呢真是...

我原来写的地方点击打开链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值