1、效果所示 ,选中也可切换条目字体
2、java代码
package com.example.administrator.lefangtong.customview; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.PopupWindow; import android.widget.TextView; import com.example.administrator.lefangtong.R; import com.example.administrator.lefangtong.custominterface.OnItemSelectedListenerSpinner; import com.example.administrator.lefangtong.utils.L; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/5/2 0002. */ public class CustomSpinner1 extends LinearLayout{ private String titleText = "数据加载中"; private View view; private TextView tv_name; private ImageView ib; //界面控件 private ImageView spinner; //构造qq号用到的集合 private List<String> list = new ArrayList<String>(); //布局加载器 //自定义适配器 private MyAdapter mAdapter; //PopupWindow private PopupWindow pop; //是否显示PopupWindow,默认不显示 private boolean isPopShow = true; private ListView listView; private LayoutInflater mInflater; private OnItemSelectedListenerSpinner onItemSelectedListener; private int heiht; private int postion = 0; private boolean isFirst = true; private View viewP; public CustomSpinner1(Context context) { super(context); initView(context); } public CustomSpinner1(Context context, @Nullable AttributeSet attrs) { super(context, attrs); initView(context); } public CustomSpinner1(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } public CustomSpinner1(final Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr); TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.CustomSpinner); titleText=array.getString(R.styleable.CustomSpinner_hintText); array.recycle(); if (titleText != null){ tv_name.setText(titleText); } } private void initView(final Context context) { mInflater = LayoutInflater.from(context); view = mInflater.inflate(R.layout.layout_customspinner, null); mAdapter = new MyAdapter(); tv_name = (TextView) view.findViewById(R.id.et_name); ib = (ImageView) view.findViewById(R.id.spinner); tv_name.setOnClickListener(new OnClickListener() { @Override public void onClick(final View view) { if (null != list){ if(pop == null){ listView = new ListView(context); listView.setCacheColorHint(0x00000000); listView.setDivider(new ColorDrawable(Color.rgb(199,199,199))); listView.setDividerHeight(1); listView.setBackgroundColor(Color.argb(0,255,255,255)); listView.setAdapter(mAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { postion = i; mAdapter.notifyDataSetChanged(); tv_name.setText(list.get(i)); tv_name.setTextColor(Color.rgb(255,0,0)); ib.setImageResource(R.mipmap.xiala); pop.dismiss(); isPopShow = true; CustomSpinner1.this.view.setTag(getId()); if (null != onItemSelectedListener){ onItemSelectedListener.onItemSelected(CustomSpinner1.this.view,view,i,l); } } }); if (heiht == 0){ int hei = setListViewHeightBasedOnChildren(listView); //这里设置下拉框的高度 if (hei >= 550){ pop = new PopupWindow(listView, ViewGroup.LayoutParams.MATCH_PARENT, 550, true); }else{ pop = new PopupWindow(listView, ViewGroup.LayoutParams.MATCH_PARENT, hei, true); } }else{ pop = new PopupWindow(listView, ViewGroup.LayoutParams.MATCH_PARENT,heiht, true); } pop.setBackgroundDrawable(new ColorDrawable(0x00000000)); pop.setFocusable(true); pop.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { isPopShow = true; ib.setImageResource(R.mipmap.xiala); if (null != viewP){ viewP.setAlpha(1); L.e("111111"); viewP.setBackgroundColor(Color.rgb(255,255,255)); } } }); ib.setImageResource(R.mipmap.shangla); pop.showAsDropDown(view,0, 0); isPopShow = false; if (null != viewP){ viewP.setAlpha(0.5f); viewP.setBackgroundColor(Color.rgb(0,0,0)); L.e("00000000000"); } }else{ if(isPopShow){ ib.setImageResource(R.mipmap.shangla); pop.showAsDropDown(view, 0, 0); if (null != viewP){ viewP.setAlpha(0.5f); viewP.setBackgroundColor(Color.rgb(0,0,0)); L.e("00000000000"); } isPopShow = false; }else{ ib.setImageResource(R.mipmap.xiala); pop.dismiss(); isPopShow = true; } } } onClickCustom(); } }); if (list == null || list.size() == 0){ tv_name.setText(""); } addView(view); } public static int setListViewHeightBasedOnChildren(ListView listView) { // 获取ListView对应的Adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return 0; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { // listAdapter.getCount()返回数据项的数目 View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); // 计算子项View 的宽高 totalHeight += listItem.getMeasuredHeight(); // 统计所有子项的总高度 } int ff = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); return ff; } public void onClickCustom(){ } public void setBackGround(int back){ view.setBackgroundResource(back); } public void setTextNameColor(int color){ tv_name.setTextColor(color); } public void attachDataSource(List<String> list){ this.list = list; if (isFirst && list != null && list.size() != 0){ tv_name.setText(list.get(0)); isFirst = false; } } public void setOnItemSelectedListener(OnItemSelectedListenerSpinner onItemSelectedListener){ this.onItemSelectedListener = onItemSelectedListener; } public void setSpinnerHeiht(int heiht){ this.heiht = heiht; } public void setNameText(String str){ if (null != str){ tv_name.setText(str); } } public void setSelectedIndex(int index){ if (null != list && list.size() > 0){ tv_name.setText(list.get(index)); L.e("设置name"); postion = index; mAdapter.notifyDataSetChanged(); } } public String getNameText(){ if (null != tv_name){ return tv_name.getText().toString(); }else{ return ""; } } public void setViewAlap(View view){ this.viewP = view; } private class MyAdapter extends BaseAdapter { @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { View view = mInflater.inflate(R.layout.item1, null); final TextView tv_name = (TextView) view.findViewById(R.id.tv_name); if (position == CustomSpinner1.this.postion){ //选中条目的背景色 // view.setBackgroundColor(Color.rgb(26,208,189)); tv_name.setTextColor(Color.rgb(33,133,218)); } tv_name.setText(list.get(position)); //设置按钮的监听事件 view.setTag(tv_name); return view; } } @Override public void destroyDrawingCache() { if (pop != null && pop.isShowing()){ pop.dismiss(); } super.destroyDrawingCache(); } }
3、资源下载在我上一篇博客,也可以下载我的资源直接 下载依赖库,添加依赖直接使用。