通过popwindows 实现简单的选择器
主界面java代码
import android.content.Context;
import android.graphics.drawable.BitmapDrawable;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
//实现简单选择功能
public class MainActivity extends AppCompatActivity {
private List countryDataList = new ArrayList<>();
private Button btSelectCountry;
private Button btSelectTime;
private PopupWindow mPopupWindow;
private void initCountryData() {
String[] stringArray = getResources().getStringArray(R.array.arr_choose_country_item_all);
countryDataList.addAll(Arrays.asList(stringArray));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initCountryData();
btSelectCountry = (Button) findViewById(R.id.bt_select_country);
btSelectTime = (Button) findViewById(R.id.bt_select_time);
btSelectCountry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectCountry(btSelectCountry);
}
});
btSelectTime.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectTime();
}
});
}
private void selectTime() {
}
private void selectCountry(View view) {
LinearLayout linearLayout = (LinearLayout) getLayoutInflater().inflate(R.layout.window_popup, null);
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
int height = wm.getDefaultDisplay().getHeight();
mPopupWindow = new PopupWindow(linearLayout, ViewGroup.LayoutParams.MATCH_PARENT,
height / 2);//条目过少时,则设置为包裹内容高度
mPopupWindow.setFocusable(true);//点击空白处 取消
mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
//弹入弹出动画
mPopupWindow.setAnimationStyle(R.style.Popupwindow);
int[] location = new int[2];
view.getLocationOnScreen(location);//控件在其整个屏幕上的坐标位置
mPopupWindow.showAtLocation(view, Gravity.LEFT | Gravity.BOTTOM, 0, -location[1]);
setButtonListeners(linearLayout);
}
private void setButtonListeners(LinearLayout linearLayout) {
RecyclerView recyclerView = (RecyclerView) linearLayout.findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
HomeAdapter adapter = new HomeAdapter(this, countryDataList);
recyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(new HomeAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
btSelectCountry.setText(countryDataList.get(position));
mPopupWindow.dismiss();
}
@Override
public void onItemLongClick(View view, int position) {
}
});
}
}
PopupWindow对应的xml window_popup
主界面布局文件
列表适配器 HomeAdapter
package com.hichina.administrator.pickerviewdemo;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
/**
* Created by Administrator on 2018/8/30.
*/
public class HomeAdapter extends RecyclerView.Adapter {
private Context context;
private List mDatas;
public HomeAdapter(Context context, List mDatas) {
this.context = context;
this.mDatas = mDatas;
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.window_popup_item, parent,
false));
return holder;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
holder.country.setText(mDatas.get(position));
// 如果设置了回调,则设置点击事件
if (mOnItemClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getLayoutPosition();
mOnItemClickListener.onItemClick(holder.itemView, pos);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
int pos = holder.getLayoutPosition();
mOnItemClickListener.onItemLongClick(holder.itemView, pos);
return false;
}
});
}
}
@Override
public int getItemCount() {
return mDatas.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView country;
public MyViewHolder(View view) {
super(view);
country = (TextView) view.findViewById(R.id.country);
}
}
//点击事件接口
public interface OnItemClickListener {
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
}
}
适配器 xm
style
动画资源 window_out, window_back
out:
back:
国家列表数组 资源 部分
- ANDORRA 安道尔
- UNITED ARAB EMIRATES 阿拉伯联合酋长国
- AFGHANISTAN 阿富汗
- ANTIGUA AND BARBUDA 安提瓜及巴布达
- ANGUILLA 安圭拉岛
- ALBANIA 阿尔巴尼亚
- ARMENIA 亚美尼亚
- NETHERLANDS ANTILLES 荷属安的列斯群岛
- ANGOLA 安哥拉
- ARGENTINA 阿根廷
- AMERICAN SAMOA 美属萨摩亚群岛
- AUSTRIA 奥地利
- AUSTRALIA 澳大利亚
- ARUBA 阿鲁巴岛
- AZERBAIJAN 阿塞拜疆(独联体)
- BOSNIA AND HERZEGOVINA 波斯尼亚-黑塞哥维那共和国
- BARBADOS 巴巴多斯
- BANGLADESH 孟加拉国
- BELGIUM 比利时
- BURKINA FASO 布基纳法索
- BULGARIA 保加利亚
- BAHRAIN 巴林
- BURUNDI 布隆迪
- BENIN 贝宁
- BERMUDA 百慕大
- BRUNEI 文莱
- BOLIVIA 波利维亚
- BRAZIL 巴西
- BAHAMAS 巴哈马
- BHUTAN 不丹
- BOUVET ISLAND 布维岛
- BOTSWANA 博茨瓦纳
- BELARUS 白俄罗斯(独联体)
- BELIZE 伯利兹
- CANADA 加拿大
- COCOS(KEELING)ISLANDS 科科斯群岛
- CONGO REPUBLIC 刚果民主共和国
- CENTRAL REPUBLIC 中非共和国
- CONGO 刚果
- SWITZERLAND 瑞士
- COTE D-LVOIRE(IVORY) 科特迪瓦(象牙海岸)
- COOK ISLANDS 库克群岛
- CHILE 智利
- CAMEROON 喀麦隆
- CHINA 中国
- COLOMBIA 哥伦比亚
- COSTA RICA 哥斯达黎加
- CUBA 古巴
- CAPE VERDE 佛得角群岛
- CHRISTMAS ISLAND 圣诞岛
- CYPRUS 塞浦路斯
- CZECH REPUBLIC 捷克共和国
- GERMANY 德国
- DJIBOUTI 吉布提
- DENMARK 丹麦
- DOMINICA 多米尼克
- DOMINICAN REPUBLIC 多米尼加共合国
- ALGERIA 阿尔及利亚
- ECUADOR 厄瓜多尔
- ESTONIA 爱沙尼亚
- EGYPT 埃及
- WESTERN SAHARA 西撒哈拉
- ERITREA 厄里特立亚
- SPAIN 西班牙
- ETHIOPIA 埃塞俄比亚
- FINLAND 芬兰
- FIJI 斐济
- FALKLAND ISLAND 福克兰群岛
- MICRONESIA 密克罗尼西亚
- FAROE ISLANDS 法鲁群岛
- FRANCE 法国
- FRANCE, METROPOLITAN 法属美特罗波利坦
- GABON 加蓬
- UNITED KINGDOM 英国
- GRENADA 格林纳达
- GEORGIA 格鲁吉亚
- FRENCH GUIANA 法属圭亚那
- GUERNSEY 根西岛
- GHANA 加纳
- GIBRALTAR 直布罗陀
- GREENLAND 格陵兰
- GAMBIA 冈比亚
- GUINEA 几内亚
- GUADELOUPE 瓜德罗普
- EQUATORIAL GUINEA 赤道几内亚
- GREECE 希腊
- SOUTH GEORGIA AND THE SOUTH SANDWICH ISL 南乔治亚岛和南桑威奇群岛
- GUATEMALA 危地马拉
- GUAM 关岛
- GUINEA BISSAU 几内亚比绍
- GUYANA (BRITISH) 圭亚那
- HONG KONG 香港
- HEARD ISLAND AND MCDONALD ISLANDS 赫德岛和麦克唐纳岛
- HONDURAS 洪都拉斯
- CROATIA 克罗地亚
- HAITI 海地
- HUNGARY 匈牙利
- CANARY ISLANDS 加那利群岛
- INDONESIA 印度尼西亚
- IRELAND 爱尔兰
- ISRAEL 以色列
- INDIA 印度
- BRITISH INDIAN OCEAN TERRITORY 英属印度洋地区
- IRAQ 伊拉克
- IRAN (ISLAMIC REPUBLIC OF) 伊朗
- ICELAND 冰岛
- ITALY 意大利
- JERSEY 泽西岛(英属)
- JAMAICA 牙买加
- JORDAN 约旦
- JAPAN 日本
- KENYA 肯尼亚
- KYRGYZSTAN 吉尔吉斯斯坦
- CAMBODIA 柬埔寨
- KIRIBATI REPUBILC 基利巴斯共和国
- COMOROS 科摩罗
- SAINT KITTS 圣基茨
- NORTH KOREA 朝鲜
- SOUTH KOREA 韩国
- KOSOVO 科索沃
- KUWAIT 科威特
- CAYMAN ISLANDS 开曼群岛
- KAZAKHSTAN 哈萨克斯坦
- LAOS 老挝
- LEBANON 黎巴嫩
- ST. LUCIA 圣卢西亚
- LIECHTENSTEIN 列支敦士登
- SRI LANKA 斯里兰卡
- LIBERIA 利比里亚
- LESOTHO 莱索托
- LITHUANIA 立陶宛
- LUXEMBOURG 卢森堡
- LATVIA 拉脱维亚
- LIBYA 利比亚
- MOROCCO 摩洛哥
- MONACO 摩纳哥
- MOLDOVA 摩尔多瓦
- MONTENEGRO 黑山共和国
- MADAGASCAR 马达加斯加
- MARSHALL ISLANDS 马绍尔群岛
- MACEDONIA 马其顿
- MALI 马里
- MYANMAR 缅甸
- MONGOLIA 蒙古
- MACAU 澳门
- SAIPAN 塞班岛
- MARTINIQUE 马提尼克岛
- MAURITANIA 毛里塔尼亚
- MONTSERRAT 蒙特塞拉岛
- MALTA 马尔他
- MAURITIUS 毛里求斯
- MALDIVES 马尔代夫
- MALAWI 马拉维
- MEXICO 墨西哥
- MALAYSIA 马来西亚
- MOZAMBIQUE 莫桑比克
- NAMIBIA 纳米比亚
- NEW CALEDONIA 新喀里多尼亚
- NIGER 尼日尔
- NORFOLK ISLAND 诺褔克岛
- NIGERIA 尼日利亚
- NICARAGUA 尼加拉瓜
- NETHERLANDS 荷兰
- NORWAY 挪威
- NEPAL 尼泊尔
- NAURU REPUBLIC 瑙鲁共和国
- NIUE 纽埃岛
- NEW ZEALAND 新西兰
- OMAN 阿曼
- PANAMA 巴拿马
- PERU 秘鲁
- FRENCH POLYNESIA 塔希堤岛(法属波利尼西亚)
- PAPUA NEW GUINEA 巴布亚新几内亚
- PHILIPPINES 菲律宾
- PAKISTAN 巴基斯坦
- POLAND 波兰
- SAINT PIERRE AND MIQUELON 圣皮埃尔和密克隆群岛
- PITCAIRN ISLANDS 皮特凯恩群岛
- PUERTO RICO 波多黎各
- PORTUGAL 葡萄牙
- PALAU 帕劳
- PARAGUAY 巴拉圭
- QATAR 卡塔尔
- REUNION ISLAND 留尼汪岛
- ROMANIA 罗马尼亚
- SERBIA, REPUBLIC OF 塞尔维亚共和国
- RUSSIA 俄罗斯
- RWANDA 卢旺达
- SAUDI ARABIA 沙特阿拉伯
- SOLOMON ISLANDS 所罗门群岛
- SEYCHELLES 塞舌尔
- SUDAN 苏丹
- SWEDEN 瑞典
- SINGAPORE 新加坡
- ST HELENA 圣赫勒拿岛
- SLOVENIA 斯洛文尼亚
- SVALBARD AND JAN MAYEN 斯瓦尔巴岛和扬马延岛
- SLOVAKIA REPUBLIC 斯洛伐克共和国
- SIERRA LEONE 塞拉里昂
- SAN MARINO 圣马力诺
- SENEGAL 塞内加尔
- SOMALIA 索马里
- SURINAME 苏里南
- SAO TOME AND PRINCIPE 圣多美和普林西比
- EL SALVADOR 萨尔瓦多
- SYRIA 叙利亚
- SWAZILAND 斯威士兰
- TRISTAN DA CUNBA 特里斯坦
- TURKS AND CAICOS ISLANDS 特克斯和凯科斯群岛
- CHAD 乍得
- FRENCH SOUTHERN TERRITORIES 法属南部领土
- TOGO 多哥
- THAILAND 泰国
- TAJIKISTAN 塔吉克斯坦
- TOKELAU 托克劳
- EAST TIMOR 东帝汶
- TURKMENISTAN 土库曼斯坦
- TUNISIA 突尼斯
- TONGA 汤加
- TURKEY 土耳其
- TRINIDAD AND TOBAGO 特立尼达和多巴哥
- TUVALU 图瓦卢
- TAIWAN 台湾
- TANZANIA 坦桑尼亚
- UKRAINE 乌克兰
- UGANDA 乌干达
- GLOBAL 全球
- UNITED STATES MINOR OUTLYING ISLANDS 美国本土外小岛屿
- UNITED STATES 美国
- URUGUAY 乌拉圭
- UZBEKISTAN 乌兹别克斯坦