快速实现popuwidow的下拉操作
来源:互联网 发布:淘宝首页热点 编辑:程序博客网 时间:2024/05/16 06:50
IT界的各位大神好,今天我来给大家说一下popuwidow下拉的一个简单操做实现,写的好的 话就借鉴,不喜勿喷!!!
这是在activity中实现效果的代码
package com.example.administrator.xml_popuwindow;import android.graphics.Color;import android.graphics.drawable.ColorDrawable;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.widget.AdapterView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.SimpleAdapter;import android.widget.TextView;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import butterknife.Bind;import butterknife.ButterKnife;import butterknife.OnClick;/** * 环境的搭建: * 1.添加butternifer依赖,取消actionbar,使用toolbar代替 * * popuwidow下拉列表,属于组合式控件 * 2.完成整体布局,初始化控件,设置点击事件 * 3.初始化popuwidow索要显示的数据 * 4.初始化popuwidow控件的设置 * 5.popuwidow与listview相关联 * 6.三个popuwidow所依附的LinearLayout,根据点击事件,做对应的逻辑处理(改变颜色,显示效果) * */public class MainActivity extends AppCompatActivity { @Bind(R.id.supplier_list_product_tv) TextView mProductTv; // 可以修改名称 @Bind(R.id.supplier_list_product) LinearLayout mProduct; @Bind(R.id.supplier_list_sort_tv) TextView mSortTv; // 可以修改名称 @Bind(R.id.supplier_list_sort) LinearLayout mSort; @Bind(R.id.supplier_list_activity_tv) TextView mActivityTv; // 可以修改名称 @Bind(R.id.supplier_list_activity) LinearLayout mActivity; @Bind(R.id.supplier_list_lv) ListView mSupplierListLv; private ArrayList<Map<String, String>> menuData1; private ArrayList<Map<String, String>> menuData2; private ArrayList<Map<String, String>> menuData3; private PopupWindow mpopuMenu; private ListView mpoplistview; private SimpleAdapter mMenuAdapter; private SimpleAdapter mMenuAdapter2; private SimpleAdapter mMenuAdapter3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //初始化popuwidow所要显示的数据 initData(); //初始化popuwidow控件 initPopMenu(); } //初始化数据根据popuwidow所需,一个三个,所以我要封装好三个数据 private void initData() { //创建一个存放popuwidow加载数据的大盒子,map集合 menuData1 = new ArrayList<>(); //存放String字符串数组 String[] menuStr1 = new String[]{"全部", "粮油", "衣服", "图书", "电子产品", "酒水饮料", "水果"}; //创建一个小盒子,放编号和值 Map<String,String> map1; for (int x = 0; x < menuStr1.length; x++) { map1 = new HashMap<String, String>(); map1.put("name",menuStr1[x]); menuData1.add(map1); } //创建一个存放popuwidow加载数据的大盒子,map集合 menuData2 = new ArrayList<>(); //存放String字符串数组 String[] menuStr2 = new String[]{"综合排序", "配送费最低"}; //创建一个小盒子,放编号和值 Map<String,String> map2; for (int i = 0; i < menuStr2.length; i++) { map2 = new HashMap<String, String>(); map2.put("name",menuStr2[i]); menuData2.add(map2); } //创建一个存放popuwidow加载数据的大盒子,map集合 menuData3 = new ArrayList<>(); //存放String字符串数组 String[] menuStr3 = new String[]{"优惠活动", "特价活动", "免配送费", "可在线支付"}; //创建一个小盒子,放编号和值 Map<String,String> map3; for (int i = 0; i < menuStr3.length; i++) { map3 = new HashMap<String, String>(); map3.put("name",menuStr3[i]); menuData3.add(map3); } } //初始化popuwidow private void initPopMenu() { //包裹listview布局的xml文件转换为view对象\ View popview = LayoutInflater.from(this).inflate(R.layout.popuwidow_item, null); //创建popuwidow对象,参数popuwidow要显示的布局,参数2,3定义popuwidow宽和高 mpopuMenu = new PopupWindow(popview, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); //设置popuwidow外部可以点击 mpopuMenu.setOutsideTouchable(true); //设置popuwidow里面listview有焦点 mpopuMenu.setFocusable(true); //如果想让popuwidow有动画效果,必须要有这行代码 mpopuMenu.setBackgroundDrawable(new ColorDrawable()); //设置结束时的监听 mpopuMenu.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { //设置TextView的颜色,把所有LinearLayout的文本颜色该为灰色 mProductTv.setTextColor(Color.parseColor("#5a5959")); mSortTv.setTextColor(Color.parseColor("#5a5959")); mActivityTv.setTextColor(Color.parseColor("#5a5959")); } }); //设置点击popuwidow以外的地方,使得popuwidow消失 LinearLayout list_bottom = (LinearLayout) popview.findViewById(R.id.popwin_supplier_list_bottom); list_bottom.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //当点击到灰色区域时,popuwidow会消失 mpopuMenu.dismiss(); } }); //创建simlepleadapter,一个listview安卓原生封装的适配器 mMenuAdapter = new SimpleAdapter(this, menuData1, R.layout.item_listview_popwin, new String[]{"name"}, new int[]{R.id.listview_popwind_tv}); mMenuAdapter2 = new SimpleAdapter(this, menuData2, R.layout.item_listview_popwin, new String[]{"name"}, new int[]{R.id.listview_popwind_tv}); mMenuAdapter3 = new SimpleAdapter(this, menuData3, R.layout.item_listview_popwin, new String[]{"name"}, new int[]{R.id.listview_popwind_tv}); //先获取listview的对象 mpoplistview = (ListView) popview.findViewById(R.id.popwin_supplier_list_lv); mpoplistview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { //首先让popuwidow消失 mpopuMenu.dismiss(); switch (menuidex){ case 0: String currentProduct = menuData1.get(i).get("name"); mProductTv.setText(currentProduct); break; case 1: String currentsort = menuData2.get(i).get("name"); mSortTv.setText(currentsort); break; case 2: String currentActivity = menuData3.get(i).get("name"); mActivityTv.setText(currentActivity); break; } } }); } //设置一个标记,方便对点击不同LinearLayout做对应事件 private int menuidex = 0; /** * 设置popuwidow结束时点击事件 * @param view */ @OnClick({R.id.supplier_list_product, R.id.supplier_list_sort, R.id.supplier_list_activity}) public void onClick(View view) { switch (view.getId()) { //第一个popuwidow所执行的点击后的逻辑 case R.id.supplier_list_product: //设置点击textview点击颜色 mProductTv.setTextColor(Color.parseColor("#39ac69")); //设置popuwidow里的listview适配器 mpoplistview.setAdapter(mMenuAdapter); //让popuwidow显示出来 参数:1.view对象,决定了popuwidow在那个控件下显示 参数2.,3决定 //popuwidow的坐标,X轴Y轴; mpopuMenu.showAsDropDown(mProduct,0,2); menuidex = 0; break; case R.id.supplier_list_sort: //设置点击textview点击颜色 mSortTv.setTextColor(Color.parseColor("#39ac69")); //设置popuwidow里的listview适配器 mpoplistview.setAdapter(mMenuAdapter2); //让popuwidow显示出来 参数:1.view对象,决定了popuwidow在那个控件下显示 参数2.,3决定 //popuwidow的坐标,X轴Y轴; mpopuMenu.showAsDropDown(mProduct,0,2); menuidex = 1; break; case R.id.supplier_list_activity: //设置点击textview点击颜色 mActivityTv.setTextColor(Color.parseColor("#39ac69")); //设置popuwidow里的listview适配器 mpoplistview.setAdapter(mMenuAdapter3); //让popuwidow显示出来 参数:1.view对象,决定了popuwidow在那个控件下显示 参数2.,3决定 //popuwidow的坐标,X轴Y轴; mpopuMenu.showAsDropDown(mProduct,0,2); menuidex = 2; break; } }}
main_activity的主布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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" android:orientation="vertical" tools:context="com.example.administrator.xml_popuwindow.MainActivity"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="45dp" android:background="#3A97FF" > <TextView android:textSize="25sp" android:text="周围" android:layout_gravity="center" android:textColor="#F7F7F8" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </android.support.v7.widget.Toolbar> <!--从这里开始,就是自定义多条件筛选菜单控件的布局核心所在--> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#CD0601" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:background="#F8F8F9" android:orientation="horizontal" > <LinearLayout android:id="@+id/supplier_list_product" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/supplier_list_product_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全部" android:textSize="14dp" /> <ImageView android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/xxx"/> </LinearLayout> <LinearLayout android:id="@+id/supplier_list_sort" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/supplier_list_sort_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="综合排序" android:textSize="14dp" /> <ImageView android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/xxx"/> </LinearLayout> <LinearLayout android:id="@+id/supplier_list_activity" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="horizontal" > <TextView android:id="@+id/supplier_list_activity_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="优惠活动" android:textSize="14dp" /> <ImageView android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/xxx"/> </LinearLayout> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#CD0601" /> <ListView android:id="@+id/supplier_list_lv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:cacheColorHint="#00000000" android:divider="#f0f0f0" android:dividerHeight="10dp" android:fadingEdge="none" android:listSelector="#00000000" android:scrollbarStyle="outsideOverlay" android:scrollingCache="false" > </ListView></LinearLayout>
这个是item_listview布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/listview_popwind_tv" android:layout_width="match_parent" android:layout_height="45dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:gravity="center_vertical" android:text="地点" android:textColor="#5a5959" android:textSize="18dp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:background="#E2E2E2" /></LinearLayout>//////////////////////////////////////////////////////////////////////////这个xml是popuwidow_item的布局;<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/popwin_supplier_list_lv" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:divider="#0000" android:dividerHeight="0dp" android:fadingEdge="none" android:listSelector="#00000000" android:scrollbarStyle="outsideOverlay" android:scrollbars="none" android:scrollingCache="false" > </ListView> <LinearLayout android:id="@+id/popwin_supplier_list_bottom" android:layout_width="match_parent" android:layout_weight="1" android:layout_height="0dp" android:orientation="vertical" > </LinearLayout></LinearLayout>
阅读全文
0 0
- 快速实现popuwidow的下拉操作
- 快速实现 ListView下拉,图片放大刷新操作
- 快速实现 ListView下拉,图片放大刷新操作
- 快速实现 ListView下拉,图片放大刷新操作
- 快速实现 ListView下拉,图片放大刷新操作
- android 下拉刷新 快速实现
- 自定义Popuwidow
- php下拉选项的批量操作的实现代码
- php下拉选项的批量操作的实现代码
- django 快速实现session的操作
- 快速使用开源库实现下拉刷新----PullRefreshLayout
- 下拉刷新的实现
- 下拉菜单的实现
- 下拉菜单的实现
- android PopuWidow 使用总结
- 下拉列表的相关操作
- js操作xml实现下拉框联动
- struts2标签实现下拉列表级联操作
- Linux中恢复仍在活动进程中的已删除文件!
- HDU-4462(状态压缩,枚举)
- 两个无序数组求公共交集
- 华硕灵耀U5000笔记本重装win10系统步骤
- 【Android】AsecInstallArgs对象的创建
- 快速实现popuwidow的下拉操作
- C++ where(true)与 switch结合使用实现在某种情况下的循环执行
- 三级联动效果
- JAVA的值传递与参数传递
- 离散对数:这个好难
- Spring框架使用 错误:Does the parameter type of the setter match the return type of the getter?
- bz入门oj 1132: 正方形计数
- JavaScript匹配ip地址
- java 多线程访问临界资源时的数据安全问题(synchronized)