使用TextView和PopupWindow实现下拉菜单效果,item等高

网上那么多写PopupWindow示例的,写简单点不行么?

使用TextView和PopupWindow实现下拉菜单效果,item等高_第1张图片


为了达到上图效果,我们首先要做几项工作:

使用TextView和PopupWindow实现下拉菜单效果,item等高_第2张图片

1 定义个圆角背景;ques_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <!-- 设置圆角半径  还可分别详细设置上下左右4个圆角-->
    <corners android:radius="5dp"/>
    <!-- 内部颜色  -->
	<solid android:color="@android:color/white"/>
	<!-- 边框宽度 边框颜色 -->
	<stroke android:width="1dp" android:color="@android:color/darker_gray"/>
</shape>


2 建立个ListView所在的layout,给PopWindow作填充;pop_list.xml

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

    <ListView
        android:id="@+id/pop_lv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:listSelector="@android:color/holo_blue_dark"
        android:background="@drawable/ques_bg" />

</LinearLayout>


3 建立个含有TaxtView布局的layout: list_content.xml,给listView作填充,当然懒省事也可以直接用android.R.layout.android.R.layout.simple_list_item_1;list_content.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/list_content_tv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="10dp" />
 
 

4  当然最后还需要个主界面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:orientation="horizontal" >

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.1"
             />

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="0.9"
            android:padding="10dp"
            android:text="@string/ques_1"  />

        <TextView
            android:id="@+id/tv_with_pop"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="3.1"
            android:padding="10dp"
            android:text="@string/first" 
            android:background="@drawable/ques_bg" />

        <View
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.1" />
    </LinearLayout>

</RelativeLayout>

接着开始堆代码

package com.example.popwindow;

import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;

public class MainActivity extends Activity
{
	// 列表数据
	private String[] popContents = new String[] { "第一个密保问题", "第二个密保问题",
			"第三个密保问题", "第四个密保问题", };

	// 点击此文本出现下拉popWindow
	private TextView mTextView;

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mTextView = (TextView) findViewById(R.id.tv_with_pop);
		// 初始化显示
		mTextView.setText(popContents[0]);
	}

	@Override
	protected void onStart()
	{
		super.onStart();

		//获取屏幕宽度
		DisplayMetrics metrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(metrics);

		//设置popupWindow的宽度,这几个数字是根据布局中的textView权重得出的4.2表示这一行的总权重,3.1表示textView的权重
		int with = (int) ((metrics.widthPixels / 4.2) * 3.1);

		// 找到需要填充到pop的布局
		View view = LayoutInflater.from(this).inflate(R.layout.pop_list, null);
		// 根据此布局建立pop
		final PopupWindow popupWindow = new PopupWindow(view);
		// <<<<<<<<<<<<<<<<<<<极其重要>>>>>>>>>>>>>>>>>>>>>
		popupWindow.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
		// popupWindow.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);
		popupWindow.setWidth(with);

		//这样设置pop才可以缩回去
		popupWindow.setBackgroundDrawable(new BitmapDrawable());
		popupWindow.setOutsideTouchable(true);
		popupWindow.setFocusable(true);

		// 填充此布局上的列表
		ListView listView = (ListView) view.findViewById(R.id.pop_lv);
		ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
				R.layout.list_content, popContents);
		listView.setAdapter(adapter);

		// 当listView受到点击时替换mTextView当前显示文本
		listView.setOnItemClickListener(new OnItemClickListener()
		{
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3)
			{
				mTextView.setText(popContents[arg2]);
				popupWindow.dismiss();
			}
		});
		// 当mTextView受到点击时显示pop
		mTextView.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				popupWindow.showAsDropDown(v);
			}
		});
	}

}

搞定,收工。



你可能感兴趣的:(使用TextView和PopupWindow实现下拉菜单效果,item等高)