安卓自定义下拉框---Spinner的实现
来源:互联网 发布:迅捷路由器软件下载 编辑:程序博客网 时间:2024/04/25 20:13
最近项目中用到下拉列表,刚开始一头雾水,后来在网上找了一个Demo,自己修改了一下,现在把它分享出来,给大家参考,写的不好,多多关照!不过功能还是实现的了······先上图给大家看看效果!
效果图:
实现思路:
1.定义下拉控件布局(ListView及子控件布局)
2.自定义SpinerPopWindow类
3.定义填充数据的Adapter
一、定义控件布局:
1. activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#f2f2f2" android:orientation="vertical" android:padding="5dp" > <LinearLayout android:id="@+id/layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="5dp" android:background="@drawable/bg_linearlayout" android:orientation="vertical" android:padding="0.2px" > <RelativeLayout android:id="@+id/relativelayout" android:padding="2dp" android:onClick="onClick" android:layout_width="wrap_content" android:layout_height="42dp" > <TextView android:id="@+id/tv_value" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:layout_marginRight="50dp" android:background="#fff" android:ellipsize="end" android:gravity="left|center" android:hint="请选择" android:paddingLeft="10dp" android:singleLine="true" android:textColor="#ff000000" android:textSize="18sp" > </TextView> <LinearLayout android:id="@+id/bt_dropdown" android:layout_width="50dp" android:layout_height="match_parent" android:layout_alignParentRight="true" android:background="#fff" android:gravity="center" > <ImageView android:layout_width="20dp" android:layout_height="20dp" android:background="@drawable/arrow_down" /> </LinearLayout> </RelativeLayout> </LinearLayout></RelativeLayout>2. spiner_window_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="#ffffff" android:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/bg_linearlayout" android:cacheColorHint="#00000000" android:scrollbars="none"></ListView></LinearLayout>
3. spiner_item_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#00000000" android:gravity="center_vertical" android:minHeight="40dp"> <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#00000000" android:gravity="center" android:textColor="@color/black" android:textSize="18sp" /></LinearLayout>
二、定义SpinerPopWindow类
SpinerPopWindow.java 类
package com.hykjsjkj.customspiner;import android.content.Context;import android.graphics.drawable.ColorDrawable;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.PopupWindow;import java.util.List;/** * Copyright: Copyright (c) 2017-2025 * Company: * * @author: 赵小贱 * @date: 2017/8/23 * describe: */public class SpinerPopWindow extends PopupWindow implements OnItemClickListener { private Context mContext; private ListView mListView; private SpinerAdapter mAdapter; private SpinerAdapter.IOnItemSelectListener mItemSelectListener; public SpinerPopWindow(Context context) { super(context); mContext = context; init(); } public void setItemListener(SpinerAdapter.IOnItemSelectListener listener) { mItemSelectListener = listener; } public void setAdatper(SpinerAdapter adapter) { mAdapter = adapter; mListView.setAdapter(mAdapter); } private void init() { View view = LayoutInflater.from(mContext).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.setOnItemClickListener(this); } public void refreshData(List<String> list, int selIndex) { if (list != null && selIndex != -1) { if (mAdapter != null) { mAdapter.refreshData(list, selIndex); } } } @Override public void onItemClick(AdapterView<?> arg0, View view, int pos, long arg3) { dismiss(); if (mItemSelectListener != null) { mItemSelectListener.onItemClick(pos); } } }
三、定义Adapter
SpinerAdapter.javapackage com.hykjsjkj.customspiner;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import java.util.List;/** * Copyright: Copyright (c) 2017-2025 * Company: * * @author: 赵小贱 * @date: 2017/8/23 * describe: */public class SpinerAdapter extends BaseAdapter { public static interface IOnItemSelectListener { public void onItemClick(int pos); } ; private List<String> mObjects; private LayoutInflater mInflater; public SpinerAdapter(Context context, List<String> mObjects) { this.mObjects = mObjects; mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public void refreshData(List<String> objects, int selIndex) { mObjects = objects; if (selIndex < 0) { selIndex = 0; } if (selIndex >= mObjects.size()) { selIndex = mObjects.size() - 1; } } @Override public int getCount() { return mObjects.size(); } @Override public Object getItem(int pos) { return mObjects.get(pos).toString(); } @Override public long getItemId(int pos) { return pos; } @Override public View getView(int pos, View convertView, ViewGroup arg2) { ViewHolder viewHolder; if (convertView == null) { convertView = mInflater.inflate(R.layout.spiner_item_layout, null); viewHolder = new ViewHolder(); viewHolder.mTextView = (TextView) convertView.findViewById(R.id.textView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } //Object item = getItem(pos); viewHolder.mTextView.setText(mObjects.get(pos)); return convertView; } public static class ViewHolder { public TextView mTextView; }}
四、调用示例
MainActivity
package com.hykjsjkj.customspiner;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.RelativeLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * Copyright: Copyright (c) 2017-2025 * Company: * * @author: 赵小贱 * @date: 2017/8/23 * describe: */public class MainActivity extends Activity implements View.OnClickListener, SpinerAdapter.IOnItemSelectListener { private List<String> mListType = new ArrayList<String>(); //类型列表 private TextView mTView; private SpinerAdapter mAdapter; private RelativeLayout relativeLayout; private SpinerPopWindow mSpinerPopWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTView = (TextView) findViewById(R.id.tv_value); relativeLayout = (RelativeLayout) findViewById(R.id.relativelayout); //初始化数据 mListType.add("大家好!"); mListType.add("老司机开车啦"); mListType.add("快上车"); mListType.add("快下班了"); mListType.add("下班回家做好吃的"); mListType.add("啦啦啦啦···"); mAdapter = new SpinerAdapter(this, mListType); mAdapter.refreshData(mListType, 0); //初始化PopWindow mSpinerPopWindow = new SpinerPopWindow(this); mSpinerPopWindow.setAdatper(mAdapter); mSpinerPopWindow.setItemListener(this); } //设置PopWindow private void showSpinWindow() { //设置mSpinerPopWindow显示的宽度 mSpinerPopWindow.setWidth(relativeLayout.getWidth()); //设置显示的位置在哪个控件的下方 mSpinerPopWindow.showAsDropDown(relativeLayout); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.relativelayout: showSpinWindow();//显示SpinerPopWindow break; } } /** * SpinerPopWindow中的条目点击监听 * @param pos */ @Override public void onItemClick(int pos) { String value = mListType.get(pos); mTView.setText(value.toString()); }}以上就是所有的代码了,希望对大家有所帮助,下面会附上源码,有需要的可以下载来参考:
示例代码下载:http://download.csdn.net/download/zhaoxiaojian1213/9949348
阅读全文
2 0
- 安卓自定义下拉框---Spinner的实现
- 安卓下拉菜单(Spinner)的实现
- 安卓下拉框(Spinner)
- Android自定义spinner下拉框实现的实现
- Android自定义spinner下拉框实现的实现
- Android自定义spinner下拉框实现的实现
- Android自定义spinner下拉框实现的实现
- 自定义spinner下拉框
- Spinner实现下拉框
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- Lance老师UI系列教程第七课->自定义spinner下拉框实现的实现
- android:自定义spinner下拉框
- android Spinner自定义下拉框
- 自定义spinner下拉框样式
- Android UI自定义Spinner下拉框(用popuwindow实现)
- Android UI自定义Spinner下拉框(用popuwindow实现)
- django整合原有的mysql数据库
- 20个非常有用的Java程序片段
- 随时随地退出所有活动
- hdu6181Two Paths-(次短路)
- 使用Conda来管理Python包
- 安卓自定义下拉框---Spinner的实现
- BZOJ2152 聪聪可可(树形DP/点分治)
- system.arrayCopy()的使用
- vue2+iview2 的实践
- LightOJ Large Devision (大整数取模)
- 巧用margin/padding的百分比值实现高度自适应(
- Java菜鸟教程 插入排序初步和几个有趣的练习
- unity3D 长按Button使button失效点击事件
- Tomcat容器的最大并发数