android中popupwindow布局的一些小问题

    接触android也有几个月了,这几天用到比较多的popupwindow,把一些遇到的问题和自己的解决方法写出来。

    关于popupwindow里的控件自适应长宽,使的界面在不同的手机上看起来都比较美观:

    布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/background_quality"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text_popup"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="10dip"
        android:paddingBottom="5dip"
        android:text="这是一个popupwindow:"
        android:textColor="#0000AA"
        android:textSize="15dip" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginRight="10dip"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名:"
            android:textColor="#0000AA" />

         <EditText
            android:layout_width="140dip"
            android:layout_height="wrap_content"
            android:maxLength="3"
            android:text="某某某"
            android:inputType="number" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学号:"
            android:textColor="#0000AA" />
        
         <EditText
            android:layout_width="140dip"
            android:layout_height="wrap_content"
            android:maxLength="10"
            android:text="5801207021"
            android:inputType="number" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="地址:"
            android:textColor="#0000AA" />

        <EditText
            android:layout_width="140dip"
            android:layout_height="wrap_content"
            android:text="China..." />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性别:"
            android:textColor="#0000AA" />

        <EditText
            android:layout_width="140dip"
            android:layout_height="wrap_content"
            android:text="男"
            android:selectAllOnFocus="true" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dip"
        android:layout_marginLeft="10dip" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="凑数:"
            android:textColor="#0000AA"
            android:visibility="invisible" />

        <Button
            android:id="@+id/btn_Control_Ok"
            android:layout_width="140dip"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="确认修改"
            android:textColor="#0000AA" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="凑数:"
            android:textColor="#0000AA"
            android:visibility="invisible" />

        <Button
            android:id="@+id/btn_Control_Cancel"
            android:layout_width="140dip"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="关闭"
            android:textColor="#0000AA" />
    </LinearLayout>

</LinearLayout>


效果:

    这里的各种控件都比较整齐,而且在其他的不同分辨率手机上的效果也是差不多的。这样的布局只要是应用wrap_content这个属性,将自己的一些button、textview等控件放在layout的时候,确定好自己的控件大小,完全可以使layout自由wrap_content,而不用太关心其的大小。而在生成popupwindow的时候,也是直接设置为wrap_content。

activity代码:

//Layout
		LayoutInflater layoutInflater = (LayoutInflater) MainActivity.this.getSystemService(LAYOUT_INFLATER_SERVICE);
		View myView = layoutInflater.inflate(R.layout.mypopupwindow, null);
		//设置Layout时的大小,这里是自适应
		myPopupWindow = new PopupWindow(myView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
		btn_PopOK = (Button) myView.findViewById(R.id.btn_Control_Ok);
		btn_PopCancel = (Button) myView.findViewById(R.id.btn_Control_Cancel);

		btn_ShowpWindow = (Button) findViewById(R.id.btn_popupwindow);
		btn_ShowpWindow.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				// TODO Auto-generated method stub
				myPopupWindow.setFocusable(true);//获得焦点,如果不获得焦点,则有一些控件比如edittext是不会有输入法弹出的
				// myPopupWindow.setBackgroundDrawable(new PaintDrawable());//设置背景,加了这句,点击边上popupwindow会消失,不知道为什么android中就算的xml中设置了背景,这里要再设置一次,才能达到点击边上popupwindow消失的效果
				myPopupWindow.showAtLocation(relativeLayout, Gravity.CENTER, 0, 0);

			}
		});

 有时候,你会在弹出View的时候按键变成选中状态,而点击了popupwindow外部区域其消失后,想按键恢复原来状态,就需要给popupwindow添加一个消失响应事件,这时可以重写 popupwindow.setOnDismissListener()这个方法:

pWindow_Jiaoju.setFocusable(true);
		pWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.background));
		pWindow.setOutsideTouchable(true);//有上面这几句,可以达到点击pWindow消失的效果
		pWindow.showAtLocation(parent, Gravity.CENTER, 0, 0);
		pWindow.setOnDismissListener(new OnDismissListener()
		{
			@Override
			public void onDismiss()
			{
				// TODO Auto-generated method stub
				//...code...	                                                                             }
		});


 

 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值