http://blog.sina.com.cn/s/blog_3e333c4a010151cj.html
-
自定义spinner
2012-10-11 10:09:21自定义spinner的一个小列子 有缺陷 -
自定义Spinner
2017-12-20 15:08:50自定义spinner,解决Spinner,竟然不能默认不选中和修改默认显示内容 -
自定义spinner样式
2019-03-27 21:25:16自定义spinner样式,处理了点击事件的判断,有需要的可以参考下, -
MaterialSpinner 自定义Spinner
2015-05-26 00:11:59自定义spinner源码,挺不错的 ,有动画哦 -
自定义spinner下拉列表
2016-08-16 20:32:55自定义spinner下拉列表 -
学习Android自定义Spinner适配器
2020-09-02 09:35:05主要为大家详细介绍了学习Android自定义Spinner适配器的相关资料,感兴趣的小伙伴们可以参考一下 -
自定义 spinner
2014-06-06 17:34:00http://blog.sina.com.cn/s/blog_3e333c4a010151cj.html 转载于:https://www.cnblogs.com/jiezzy/p/3773060.html转载于:https://www.cnblogs.com/jiezzy/p/3773060.html
-
Android自定义Spinner样式
2014-10-15 17:27:45Android 自定义Spinner样式的 选择框背景,选择框文字属性,弹出框文字属性 -
xamarin android自定义spinner
2017-07-14 21:38:01以前弄的一个下拉框时自带的spinner,感觉好丑,实际效果实在满足不了基本的UI界面要求,还是自己动手丰衣足食,看了网上关于android中自定义spinner的文章,感觉实现原理还是比较简单,所以这里用xamarin android来...以前弄的一个下拉框时自带的spinner,感觉好丑,实际效果实在满足不了基本的UI界面要求,还是自己动手丰衣足食,看了网上关于android中自定义spinner的文章,感觉实现原理还是比较简单,所以这里用xamarin android来实现自定义spinner样式。参考文章:http://blog.csdn.net/jdsjlzx/article/details/41316417
实现原理
1.TextView中显示选择的内容,右边显示上下的箭头,点击事件中设置不同的箭头
2.TextView下显示的是一个PoputWindow,PoputWindow中显示的自定义ListView,在TextView单击事件中显示ListView就是下拉的选择项。
先来看看最终的效果图代码实现的过程主要分为以下几个部分:
- MainActivity布局实现(这个就是一个TextView)
- PoputWindow布局和ListView布局实现
- 自定类SpinerPopWindow继承PoputWIndow的实现,ListView适配器类的实现(实现的关键)
- MainActivity.cs中TextView事件监听、ListView的Item单击事件的监听实现
1. MainActivity布局实现
MainActivity中只有一个TextView
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingRight="20dp" android:background="@color/color_ffffff" android:paddingLeft="20dp"> <TextView android:id="@+id/tv_value" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/color_dedede" android:drawableRight="@drawable/icon_down" android:padding="10dp" android:textColor="@color/content_color" android:textSize="20sp" /> </LinearLayout>
2.PoputWindow布局和ListView布局实现
1.PoputWindow里面放的是一个ListView控件。spinner_window_layout.xml的background需要添加边框、设置背景颜色
<?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:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:background="@drawable/shape_popupwindow_list_bg" android:scrollbars="none" > </ListView> </LinearLayout>
2.ListView布局文件spinner_item_layout里面只有一个TextView
<?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:gravity="center_vertical"> <TextView android:id="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:text="fdsfdsfdsf" android:textSize="20sp"/> </LinearLayout>
3.自定类SpinerPopWindow继承PoputWIndow的实现,ListView适配器类的实现(实现的关键)
spinnerPopWindow.cs需要继承PoputWindow,初始化ListView。ListView的Adapter类LVAdapter就不多说了。
using System.Collections.Generic; using System.Linq; using Android.Content; using Android.Views; using Android.Widget; using Android.Graphics.Drawables; using static Android.Views.ViewGroup; namespace customSpinnerDemo { public class SpinerPopWindow<T>:PopupWindow { private ListView listView; private List<T> list; private LVAdapter<T> adapter; private Context context; private LayoutInflater inflater; public SpinerPopWindow(Context _context ,List<T> _list, AdapterView.IOnItemClickListener itemClickListener) { context = _context; list = _list; inflater = LayoutInflater.From(_context); InitListView(itemClickListener); } private void InitListView(AdapterView.IOnItemClickListener itemClickListener) { View view = inflater.Inflate(Resource.Layout.spiner_window_layout, null); this.ContentView = view; //LayoutParams var parentView = (ViewGroup)view; var child = parentView.GetChildAt(0); this.Width = LayoutParams.WrapContent; this.Height = LayoutParams.WrapContent; this.Focusable = true; ColorDrawable cdw = new ColorDrawable(Android.Graphics.Color.Transparent); SetBackgroundDrawable(cdw); //View childView = ContentView listView = view.FindViewById<ListView>(Resource.Id.listview); adapter = new customSpinnerDemo.LVAdapter<T>(context,list); listView.Adapter = adapter; listView.OnItemClickListener = itemClickListener; } } public class LVAdapter<T> : BaseAdapter { private List<T> list; private Context context; public LVAdapter(Context _context,List<T> _list) { context = _context; list = _list; } public override int Count { get{ return list.Count(); } } public override Java.Lang.Object GetItem(int position) { return null; } public override long GetItemId(int position) { return position; } public override View GetView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = LayoutInflater.From(context).Inflate(Resource.Layout.spiner_item_layout,parent,false); holder.tvName = convertView.FindViewById<TextView>(Resource.Id.tv_name); convertView.Tag = holder; } else { holder = (ViewHolder)convertView.Tag; } holder.tvName.Text = list[position].ToString(); return convertView; } private class ViewHolder:Java.Lang.Object { internal TextView tvName; } } }
4.MainActivity.cs中TextView事件监听、ListView的Item单击事件的监听实现
实现的原理就是一下代码了using Android.App; using Android.Widget; using Android.OS; using System.Collections.Generic; using static Android.Widget.AdapterView; using Android.Views; using Android.Graphics.Drawables; using Android.Support.V7.App; namespace customSpinnerDemo { [Activity(Label = "customSpinnerDemo", MainLauncher = true, Icon = "@drawable/icon",Theme = "@style/AppTheme")] public class MainActivity : AppCompatActivity, IOnItemClickListener, PopupWindow.IOnDismissListener { private List<string> list; private TextView tv_value; private SpinerPopWindow<string> SpinnerPopwindow; protected override void OnCreate(Bundle bundle) { base.OnCreate(bundle); SetContentView (Resource.Layout.Main); tv_value = FindViewById<TextView>(Resource.Id.tv_value); tv_value.Click += (s,e) => { SpinnerPopwindow.Width = tv_value.Width; SpinnerPopwindow.ShowAsDropDown(tv_value); SetTextImage(Resource.Drawable.icon_up); }; list = new List<string>() { "科比","詹姆斯","韦德","波什"}; SpinnerPopwindow = new SpinerPopWindow<string>(this,list,this); SpinnerPopwindow.SetOnDismissListener(this); } /// <summary> /// 给TextView右边设置图片 /// </summary> private void SetTextImage(int resId) { //var drawable =GetDrawable(resId); Drawable drawable = Resources.GetDrawable(resId); drawable.SetBounds(0,0,drawable.MinimumWidth,drawable.MinimumHeight); tv_value.SetCompoundDrawables(null,null,drawable,null); } /// <summary> /// popupWindow 显示的ListView的item点击事件 /// </summary> public void OnItemClick(AdapterView parent, View view, int position, long id) { SpinnerPopwindow.Dismiss(); tv_value.Text=list[position].ToString(); Toast.MakeText(this,"点击了:"+list[position],ToastLength.Long).Show(); } /// <summary> /// popupWindow取消 /// </summary> public void OnDismiss() { SetTextImage(Resource.Drawable.icon_down); } } }
小结
虽然实现原理比较简单,但是要把一个下拉框做的能够调用简单,代码多处复用,代码量小而简单,还是需要琢磨的。
,如果代码有什么看不懂的地方,直接看Github吧:https://github.com/MaChuZhang/Xamarin-Android-Custom-View
作者:张林
标题:xamarin android自定义spinner 原文地址:http://blog.csdn.net/kebi007/article/details/74856836
转载随意注明出处 -
Android自定义View-自定义Spinner
2019-11-05 14:18:12Android自定义View-自定义Spinner 在使用系统Spinner时,往往总不能跟自己主题进行颜色搭配。这里介绍一下对Spinner的样式的修改,主要是对外观和颜色的修改。 效果图: Spinner背景图片: 1. 2. 效果图中...Android自定义View-自定义Spinner
在使用系统Spinner时,往往总不能跟自己主题进行颜色搭配。这里介绍一下对Spinner的样式的修改,主要是对外观和颜色的修改。
效果图:
Spinner背景图片:
1.
2.
效果图中选用的是2作为的背景。
Activity中布局:在布局中定义一个Spinner控件
<Spinner android:id="@+id/sp_Exception" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/spinner_bg" android:layout_gravity="center_horizontal" android:gravity="center" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:paddingRight="15dp" android:paddingLeft="15dp" />
spinner_layout布局:这里必须是CheckedTextView。
<?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:padding="5dp" android:textColor="@color/stategridcolor" android:textSize="18sp" tools:text="全部" />
spinner_item布局:下拉列表布局,这里只展示一个textView。
<?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="wrap_content" android:background="@color/white" android:padding="15dp" > <TextView android:id="@+id/spinner_item_label" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:textColor="@color/stategridcolor" android:text="全部" android:textSize="18sp" /> </RelativeLayout>
Activity中代码使用:
... ... 省略部分代码 ... list = new ArrayList<String>(); list.add("全部 " + allCount); list.add("采集异常 " + caiJiCount); list.add("计量异常 " + jiLiangCount); list.add("配电异常 " + peiDianCount); list.add("窃电异常 " + qieDianCount); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),R.layout.spinner_layout, list) { @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View view = LayoutInflater.from(getActivity()).inflate(R.layout.spinner_item, parent, false); TextView label = (TextView) view.findViewById(R.id.spinner_item_label); label.setText(list.get(position)); return view; } }; // 设置下拉列表的样式 adapter.setDropDownViewResource(R.layout.item_spinner_daibanorder_down); sp_Exception.setAdapter(adapter); sp_Exception.setSelection(0);// 默认显示第一个item
-
Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)
2020-09-03 06:47:51主要介绍了Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)的相关资料,需要的朋友可以参考下 -
安卓自定义控件相关-BetterSpinner自定义Spinner控件.rar
2019-07-29 17:45:06BetterSpinner自定义Spinner控件.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
-
阿里云云计算ACP考试必备教程
-
使用rtty出现login incorrect的解决方法
-
我写的PE格式查看软件 仿PEiD.zip
-
jdk-1.8-x64.zip
-
flutter插件调用APP页面、使用原生aar,framework库
-
【数据分析-随到随学】Hive详解
-
项目范围管理论文-高项.docx
-
30个生涯锦囊,带你跳出迷茫,找到适合你的职业方向
-
【2021】UI自动化测试框架(Selenium3)
-
转行做IT-第2章 HTML入门及高级应用
-
基于Matlab的MIMO通信系统仿真
-
Pytorch学习笔记之模型的创建
-
add_layer.py
-
桌面链接整理
-
第3章 入门程序、常量、变量
-
OpenMP详细用法,OMP太牛B了能够发辉多核CPU100的性能
-
计算机网络基础
-
MFC开发简单聊天程序
-
国土空间规划形势下的村庄规划-南靖县船场镇集星村(2019-3035).pdf
-
第1章 Java入门基础及环境搭建【java编程进阶】