天津网站建设价位,小程序开发方案,网站做支付按流量付费,做公众号模板的网站一、 简介#xff1a; 原生Android 提供的spinner下拉框不怎么方便#xff0c;样式有点丑。修改起来麻烦#xff0c;于是就自己动手写了一下拉列表。 实现原理使用的是#xff0c;popwindow弹框#xff0c;可实现宽高自定义#xff0c;下拉列表使用listview. 二、pop弹框…一、 简介 原生Android 提供的spinner下拉框不怎么方便样式有点丑。修改起来麻烦于是就自己动手写了一下拉列表。 实现原理使用的是popwindow弹框可实现宽高自定义下拉列表使用listview. 二、pop弹框代码文件名SpinerPopWindow.java import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView.OnItemClickListener;
import java.util.List;import csu.xiaoya.robotApp.R;/*** 自定义PopupWindow ** param T* param T* author Ansen* create time*/public class SpinerPopWindowT extends PopupWindow {private LayoutInflater inflater;private ListView mListView;private ListT list;private MyAdapter mAdapter;public SpinerPopWindow(Context context, ListT list, OnItemClickListener clickListener) {super(context);inflater LayoutInflater.from(context);this.list list;init(clickListener);}private void init(OnItemClickListener clickListener) {View view inflater.inflate(R.layout.spiner_window_layout, null);setContentView(view);setWidth(LayoutParams.WRAP_CONTENT);setHeight(LayoutParams.WRAP_CONTENT);setFocusable(true);ColorDrawable dw new ColorDrawable(0x00);setBackgroundDrawable(dw);mListView (ListView) view.findViewById(R.id.listview);mListView.setAdapter(mAdapter new MyAdapter());mListView.setOnItemClickListener(clickListener);}private class MyAdapter extends BaseAdapter {Overridepublic int getCount() {return list.size();}Overridepublic Object getItem(int position) {return list.get(position);}Overridepublic long getItemId(int position) {return position;}Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder null;if (convertView null) {holder new ViewHolder();convertView inflater.inflate(R.layout.spiner_item_layout, null);holder.tvName (TextView) convertView.findViewById(R.id.tv_name);convertView.setTag(holder);} else {holder (ViewHolder) convertView.getTag();}holder.tvName.setText(getItem(position).toString());return convertView;}}private class ViewHolder {private TextView tvName;}
}三、spiner_window_layout布局
?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthfill_parentandroid:layout_heightwrap_contentandroid:layout_alignParentRighttrueandroid:backgroundcolor/dwupBgColorandroid:orientationverticalListViewandroid:idid/listviewandroid:layout_widthfill_parentandroid:layout_heightwrap_contentandroid:cacheColorHint#00000000android:backgroundcolor/dwupBgColorandroid:scrollbarsnone /ListView
/LinearLayout 四、spiner_item_layout子布局
?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthfill_parentandroid:layout_heightdimen/dp_23android:gravitycenter_verticalTextViewandroid:idid/tv_nameandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:paddingLeftdimen/dp_15android:paddingTopdimen/dp_8android:paddingRightdimen/dp_10android:paddingBottomdimen/dp_8android:textfdsfdsfdsfandroid:textColorcolor/whiteandroid:textSize10sp //LinearLayout 五、使用 //调用Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);initSpinnerList();} 六、对应方法
/****/private SpinerPopWindowString mSpinerPrincePopWindow;//省private ListString list;//省private TextView tvValue;private void initSpinnerList() {initData();tvValue (TextView) findViewById(R.id.tv_province);tvValue.setOnClickListener(clickListener);// 省mSpinerPrincePopWindow new SpinerPopWindowString(this, list, itemClickListener);mSpinerPrincePopWindow.setOnDismissListener(dismissListener);}/*** 监听popupwindow取消*/private OnDismissListener dismissListener new OnDismissListener() {Overridepublic void onDismiss() {setTextImage(R.drawable.dw_arrow, mDataBinding.tvProvince);}};/*** popupwindow显示的ListView的item点击事件*/private OnItemClickListener itemClickListener new OnItemClickListener() {Overridepublic void onItemClick(AdapterView? parent, View view, int position, long id) {mSpinerPrincePopWindow.dismiss();tvValue.setText(list.get(position));}};/*** 显示PopupWindow*/private OnClickListener clickListener new OnClickListener() {Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.tv_province://省mSpinerPrincePopWindow.setWidth(tvValue.getWidth());mSpinerPrincePopWindow.showAsDropDown(tvValue);setTextImage(R.drawable.icon_up, mDataBinding.tvProvince);break;}}};/*** 初始化数据*/private void initData() {list new ArrayListString();//省list.add(北京);list.add(上海);list.add(浙江);list.add(广东);list.add(江苏);list.add(湖南);list.add(湖北);list.add(四川);list.add(陕西);}
七、shape_help_category_tv_bg外形布局
?xml version1.0 encodingutf-8?
shape xmlns:androidhttp://schemas.android.com/apk/res/android!-- 填充的颜色 --solid android:color#ff2e2f43 /corners android:radius5dp /!-- 设置边框 --strokeandroid:width1dpandroid:color#ff2e2f43 /
/shape 八、shape_popupwindow_list_bg
layer-list xmlns:androidhttp://schemas.android.com/apk/res/android !-- This is the main color --itemshape!-- 边框颜色 --solid android:colorcolor/gray//shape/item!-- 给View的上 左 右设置8dp的边框 --itemandroid:left1dpandroid:right1dpandroid:bottom1dpshape!-- View填充颜色 --solid android:colorcolor/white//shape/item/layer-list 九、完结