通过popwindows 实现简单的选择器

通过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 乌兹别克斯坦
        
    


你可能感兴趣的:(通过popwindows 实现简单的选择器)