【Android】通过PopupWindow实现浏览器风格的下拉菜单

先上图:



main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent" android:gravity="center_horizontal">
	<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="@string/hello" />
	<TextView android:id="@+id/btn" android:layout_width="200dip"
		android:singleLine="true" android:textColor="@android:color/black"
		android:background="@android:color/white" android:layout_height="25dip"
		android:text="下拉。。。" android:gravity="left" android:drawableRight="@drawable/spinner_sanjiao"
		android:focusable="false" />
</LinearLayout>


popwindow.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="wrap_content"
	android:layout_height="wrap_content">
	<ScrollView android:layout_width="fill_parent"
		android:scrollbarFadeDuration="0" android:layout_height="80dip"
		android:scrollbarAlwaysDrawVerticalTrack="true" android:background="@android:color/white">

		<RadioGroup android:id="@+id/rg" android:layout_width="fill_parent"
			android:layout_height="wrap_content">

			<RadioButton android:id="@+id/b11" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="中国" />

			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农sdfsdfsdfsdfsdfsdfsdddd大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />

			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />


			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />
			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />
			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />
			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />
			<RadioButton android:id="@+id/b22" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="长沙" />

			<RadioButton android:id="@+id/b33" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="湖南农大" />


			<RadioButton android:id="@+id/b44" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="犀利" />

			<RadioButton android:id="@+id/b55" android:layout_width="fill_parent"
				android:textColor="#000000" android:background="#FFFFFF"
				android:layout_height="wrap_content" android:button="@null"
				android:text="尼玛" />


		</RadioGroup>
	</ScrollView>

</LinearLayout>



接下来是Activity:

package com.deng.ui;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.PopupWindow;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;

public class PopWindow_DemoActivity extends Activity implements
		OnCheckedChangeListener {
	TextView tv;
	PopupWindow pupup;
	RadioGroup rg;
	View vv;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		tv = (TextView) findViewById(R.id.btn);
		tv.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				System.out.println("cccc...");
				if (pupup != null && pupup.isShowing()) {
					dismissPop();
					return;
				}
				showPopWindow();
			}
		});
	}

	public void showPopWindow() {
		LayoutInflater in = (LayoutInflater) PopWindow_DemoActivity.this
				.getSystemService(LAYOUT_INFLATER_SERVICE);
		vv = in.inflate(R.layout.popwindow, null);
		rg = (RadioGroup) vv.findViewById(R.id.rg);
		rg.setOnCheckedChangeListener(this);
		int[] location = new int[2];
		tv.getLocationOnScreen(location);
		pupup = new PopupWindow(vv, tv.getWidth(), LayoutParams.WRAP_CONTENT);
		pupup.showAtLocation(findViewById(R.id.btn), Gravity.NO_GRAVITY,
				location[0], location[1] + tv.getHeight());
	}

	public void dismissPop() {
		pupup.dismiss();
	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		// TODO Auto-generated method stub
		RadioButton rb = (RadioButton) vv.findViewById(checkedId);
		tv.setText(rb.getText());
		dismissPop();
	}

}




小结:

1.ScrollView要设置 android:background="@android:color/white",不然默认的灰色渐变会与被遮盖的控件产生白色重影。

2.让PopupWindow显示在事件控件的下方,用如下代码:

		pupup = new PopupWindow(vv, tv.getWidth(), LayoutParams.WRAP_CONTENT);
		pupup.showAtLocation(findViewById(R.id.btn), Gravity.NO_GRAVITY,
				location[0], location[1] + tv.getHeight());


3.下拉事件产生源用了TextView,然后在TextView的右方上了一个三角形的图: android:drawableRight="@drawable/spinner_sanjiao"

4.不在当前layout的控件要通过LayoutInflater获得View后,再通过该View找到,而不是直接findViewById,如: RadioButton rb = (RadioButton) vv.findViewById(checkedId);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值