Android自定义下拉框
来源:互联网 发布:ae for mac 编辑:程序博客网 时间:2024/04/29 21:34
Android自定义下拉框
Android 原生的Spinner下拉框无法满足项目的需要,所以自已用PopupWindow写了一自定下拉框,效果如下:
java代码:CommonSpinner
package guojunustb.commonspinner;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.PopupWindow;import android.widget.TextView;import java.util.List;/** * Created by guojun on 2015/10/29. */public class CommonSpinner extends TextView implements View.OnClickListener { private TextView mTvTopView; private Context mContext; private SpinnerPopupWindow mPopupWindow; private List<String> mDatas; private OnSpinnerItemSelectListener mOnSpinnerItemSelectListener; public CommonSpinner(Context context) { this(context, null); } public CommonSpinner(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CommonSpinner(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mTvTopView = this; mContext = context; mPopupWindow = new SpinnerPopupWindow(mContext); setOnClickListener(this); } @Override public void onClick(View v) { mPopupWindow.showPopupWindow(mTvTopView); } public void setData(List<String> datas) { this.mDatas = datas; } class SpinnerPopupWindow extends PopupWindow { private Context mContext; private ListView mListView; private MyAdapter mMyAdapter; public SpinnerPopupWindow(Context context) { init(context); } private void init(Context context) { mContext = context; LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.layout_spinner, null); mListView = (ListView) view.findViewById(R.id.listview); mListView.setItemsCanFocus(true); mMyAdapter = new MyAdapter(); mListView.setAdapter(mMyAdapter); this.setContentView(view); //设置宽高 this.setWidth(mListView.getLayoutParams().width); this.setHeight(mListView.getLayoutParams().height); //让popupwindow获取焦点 this.setFocusable(true); this.setOutsideTouchable(true); this.update(); // 如果不设置PopupWindow的背景,无论是点击外部区域还是Back键都无法dismiss弹框 ColorDrawable dw = new ColorDrawable(00000000); this.setBackgroundDrawable(dw); //设置动画 this.setAnimationStyle(R.style.SpinnerPopupWindowAnim); } class MyAdapter extends BaseAdapter { @Override public int getCount() { return mDatas == null ? 0 : mDatas.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View.inflate(mContext, R.layout.item_spinner, null); } Button bt = ViewHolder.get(convertView,R.id.bt_item); bt.setText(mDatas.get(position)); bt.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showPopupWindow(mTvTopView); mTvTopView.setText(mDatas.get(position)); if (null != mOnSpinnerItemSelectListener) { mOnSpinnerItemSelectListener.onItemSelectListener(position); } } }); return convertView; } } public void showPopupWindow(View parent) { if (!this.isShowing()) { this.showAsDropDown(parent, -(this.getWidth() -parent.getWidth())/2, 0); } else { this.dismiss(); } } } public void setOnSpinnerItemSelectListener(OnSpinnerItemSelectListener listener) { this.mOnSpinnerItemSelectListener = listener; } public interface OnSpinnerItemSelectListener { void onItemSelectListener(int pos); }}布局文件:layout_spinner.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="111dp" android:layout_height="wrap_content" android:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="111dp" android:layout_height="190dp" android:paddingTop="10dp" android:descendantFocusability="blocksDescendants" android:background="@mipmap/class_tab_putup" android:divider="@null" android:scrollbars="none" /></LinearLayout>
Activity文件
package guojunustb.commonspinner;import android.app.Activity;import android.os.Bundle;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends Activity { private CommonSpinner mCommonSpinner; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); assignViews(); } private void assignViews() { mCommonSpinner = (CommonSpinner) findViewById(R.id.common_spinner); mCommonSpinner.setData(getDatas()); mCommonSpinner.setOnSpinnerItemSelectListener(new CommonSpinner.OnSpinnerItemSelectListener() { @Override public void onItemSelectListener(int pos) { Toast.makeText(MainActivity.this, "pos="+pos, Toast.LENGTH_SHORT).show(); } }); } private List<String> getDatas() { ArrayList<String> list=new ArrayList<>(); for (int i=1;i<15;i++){ list.add("第"+i+"周"); } return list; }}
源码下载地址
0 0
- Android自定义下拉框
- Android开发自定义下拉框下拉列表
- android中自定义下拉框
- android中自定义下拉框
- android:自定义spinner下拉框
- android Spinner自定义下拉框
- Android自定义下拉选择框
- android自定义Spinner下拉菜单(下拉列表框)样式
- android自定义Spinner下拉菜单(下拉列表框)样式
- android自定义Spinner下拉列表框样式
- Android 自定义spinner下拉选框
- Android自定义下拉刷新
- Android 自定义下拉列表
- Android 自定义下拉刷新
- android 自定义下拉菜单
- Android 自定义下拉列表
- Android - 自定义下拉刷新
- Android Android自定义的下拉列表框控件
- LeetCode 120: Triangle
- Median Smoothing(构造性算法)
- 各种字符编码方式详解及由来(ANSI,UNICODE,UTF-8,GB2312,GBK)
- ubuntu操作系统写shell的for循环会遇到的问题
- 创建销毁对象之遇到多个构造器参数时考虑用构建器(笔记)
- Android自定义下拉框
- 细化算法
- Activity之Intent方法1
- linux gcc 编译时头文件和库文件搜索路径
- poj 2187 凸包上的直径 - 旋转卡壳
- 爬爬爬之路:OC语言(四) NSString NSSArray NSValue常用方法介绍
- LeetCode:Word Pattern
- 简易js计算器
- 测试用例各要素编写规范