popuwindow的使用方法

popuwindow的使用方法
//popwindow下拉列表,属于组合式控件
/*
1.首先添加butterknife的依赖,取消掉ActionBar,使用toolbar代替
2.完成整体的布局,初始化控件,设置点击事件
3.初始化popwindow所要显示的数据
4.初始化popwindow控件的设置
5.popwindow与listview相关联
6.三个popwindow所依附的linearlayout,根据点击事件,做对应逻辑处理(改变textview的颜色,显示效果)
*/
MainActivity主方法
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 mPopMenu ;
private ListView mpoplistview ;
private SimpleAdapter mMenuAdapter1 ;
private SimpleAdapter mMenuAdapter2 ;
private SimpleAdapter mMenuAdapter3 ;


@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout. activity_main );
ButterKnife. bind ( this );
//初始化popwindow所要显示的数据
initData();
//初始化popwindow控件
initPopMenu();
}
//初始化popwindow
private void initPopMenu() {
//把包裹listview布局的xml文件转换为view对象
View popview = LayoutInflater. from ( this ).inflate(R.layout. popwin_list , null );
//创建popwindow对象,参数1 popwindow要显示的布局 参数2 3 定义popwindow宽和高
mPopMenu = new PopupWindow(popview, LinearLayout.LayoutParams. MATCH_PARENT , LinearLayout.LayoutParams. MATCH_PARENT );
//设置popwindow外部可以点击
mPopMenu .setOutsideTouchable( true );
//设置popwindow里面的listview有焦点
mPopMenu .setFocusable( true );
//如果想让popwindow有动画效果,就必须有这行代码
mPopMenu .setBackgroundDrawable( new ColorDrawable());
//设置popwindow结束时的监听
mPopMenu .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" ));
}
});
//设置点击popwindow以外的地方,使popwindow消失
LinearLayout list_bottom = (LinearLayout) popview.findViewById(R.id. popwin_supplier_list_bottom );
list_bottom.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
//当点击到灰色区域时 popwindow消失
mPopMenu .dismiss();
}
});
//获取listview对象
mpoplistview = (ListView) popview.findViewById(R.id. popwin_supplier_list_lv );
//创建simpleadapter,一个listview安卓原生封装的适配器
mMenuAdapter1 = new SimpleAdapter( this , menuData1 , R.layout. item_listview_popwindow , new String[]{ "name" }, new int []{R.id. listview_popwind_tv });
mMenuAdapter2 = new SimpleAdapter( this , menuData2 , R.layout. item_listview_popwindow , new String[]{ "name" }, new int []{R.id. listview_popwind_tv });
mMenuAdapter3 = new SimpleAdapter( this , menuData3 , R.layout. item_listview_popwindow , new String[]{ "name" }, new int []{R.id. listview_popwind_tv });
//设置popwindow里的listview点击事件,当点击listview里的一个item时,把这个item数据显示到最上方
mpoplistview .setOnItemClickListener( new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//首先让popwindow消失
mPopMenu .dismiss();
switch ( menuIndex ){
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 menuIndex = 0 ;
//初始化数据,popwindow所需,一共有三个,所以我要封装好三个数据,这里是假数据,真实数据从网上获取
private void initData() {
//创建一个存放popwindow加载数据的大盒子,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);
}
//创建一个存放popwindow加载数据的大盒子,map集合(键,值)
menuData2 = new ArrayList<>();
//存放String的字符串数组
String[] menuStr2 = new String[]{ "综合排序" , "配送费最低" };
//创建一个小盒子,放编号和值
Map<String,String> map2;
for ( int x= 0 ;x<menuStr2. length ;x++){
map2= new HashMap<String, String>();
map2.put( "name" ,menuStr2[x]);
menuData2 .add(map2);
}
//创建一个存放popwindow加载数据的大盒子,map集合(键,值)
menuData3 = new ArrayList<>();
//存放String的字符串数组
String[] menuStr3 = new String[]{ "优惠活动" , "特价活动" , "免配送费" ,
"可在线支付" };
//创建一个小盒子,放编号和值
Map<String,String> map3;
for ( int x= 0 ;x<menuStr3. length ;x++){
map3= new HashMap<String, String>();
map3.put( "name" ,menuStr3[x]);
menuData3 .add(map3);
}
//测试是否有问题
String name = menuData3 .get( 0 ).get( "name" );
System. out .println( "name----" +name);
}

@OnClick ({R.id. supplier_list_product , R.id. supplier_list_sort , R.id. supplier_list_activity })
public void onClick(View view) {
switch (view.getId()) {
//第一个popwindow所执行的点击后的逻辑
case R.id. supplier_list_product :
//设置其textview点击是红色
mProductTv .setTextColor(Color. RED );
//设置popwindow里的lisyview适配器
mpoplistview .setAdapter( mMenuAdapter1 );
//让popwindow显示出来 参数1.view对象 决定了popwindow在哪个控件下显示
//参数2 3 决定了popwindow的坐标 x轴 y轴
mPopMenu .showAsDropDown( mProduct , 0 , 2 );
menuIndex = 0 ;
break ;
case R.id. supplier_list_sort :
mSortTv .setTextColor(Color. RED );
mpoplistview .setAdapter( mMenuAdapter2 );
mPopMenu .showAsDropDown( mProduct , 0 , 2 );
menuIndex = 1 ;
break ;
case R.id. supplier_list_activity :
mActivityTv .setTextColor(Color. RED );
mpoplistview .setAdapter( mMenuAdapter3 );
mPopMenu .showAsDropDown( mProduct , 0 , 2 );
menuIndex = 2 ;
break ;
}
}

}
activity_main布局
<? 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" >
< android.support.v7.widget.Toolbar
android :background= "@color/colorAccent"
android :layout_width= "match_parent"
android :layout_height= "45dp" >
< TextView
android :textSize= "20sp"
android :text= "周边"
android :layout_gravity= "center_horizontal"
android :textColor= "@color/white"
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= "#E2E2E2"
/>

< LinearLayout
android :layout_width= "match_parent"
android :layout_height= "40dp"
android :background= "@color/white"
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/t1" />
</ 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/t1" />
</ 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/t1" />
</ LinearLayout >
</ LinearLayout >


< View
android :layout_width= "match_parent"
android :layout_height= "1dp"
android :background= "#E2E2E2"
/>

< 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_popwindow布局
<? 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= "wrap_content"
android :background= "#ffffff"
android :orientation= "vertical" >

< 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 >
popwin_list
<? 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 :background= "#5000"
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值