-
实现安卓Spinner控件hint提示效果
2018-07-28 20:19:051.定义一个Spinner控件: <Spinner android:layout_width="150dp" android:layout_height="match_parent" android:id="@+id/spinner_car"> 2.Activity代码: ...效果图:
1.定义一个Spinner控件:
<Spinner android:layout_width="150dp" android:layout_height="match_parent" android:id="@+id/spinner_car">
2.Activity代码:
Spinner spinner_car;
List<String> cars = new ArrayList<>();
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner_car = findViewById(R.id.spinner_car); myadapter(); }
public void myadapter() { cars.add("1号爪黄飞电"); cars.add("2号卷毛赤兔"); cars.add("3号绝影"); cars.add("请选择车辆"); Myadapter myadapter = new Myadapter(thisR.layout.support_simple_spinner_dropdown_item,cars); spinner_car.setAdapter(myadapter); //默认选中最后一项 spinner_car.setSelection(cars.size()-1,true); }
/** * 定义一个Myadapter类继承ArrayAdapter * 重写以下两个方法 * */ class Myadapter<T> extends ArrayAdapter{ public Myadapter(@NonNull Context context, int resource, @NonNull List<T> objects) { super(context, resource, objects); } @Override public int getCount() { //返回数据的统计数量,大于0项则减去1项,从而不显示最后一项 int i = super.getCount(); return i>0?i-1:i; } }
-
安卓Spinner控件的Bug
2016-07-15 14:28:04Spinner控件可以监听,但是监听的话,如果两次点击都是同一个item的话,那么就就不会触发,因为看源码的话就会发现,在Spinner中有一个保存上次点击的位置的变量叫做 mOldSelectedPosition的变量,每次点击的时候...Spinner控件可以监听,但是监听的话,如果两次点击都是同一个item的话,那么就就不会触发,因为看源码的话就会发现,在Spinner中有一个保存上次点击的位置的变量叫做
mOldSelectedPosition的变量,每次点击的时候就会验证两次点击是否是同一个item,不同就触发点击事件,因此可以修改mOldSelectedPosition变量,让控件两次点击相同都可以触发。但是私有变量也可以改变他的值,就是使用java的反射来做。
以下就是源码部分:
方法checkSelectionChanged和变量mOldSelectedPosition都是AdapterView私有的,我们无法继承Spinner重写之。不过,利用java的反射,我们可以暴力修改mOldSelectedPosition的值:void checkSelectionChanged() { if ((mSelectedPosition != mOldSelectedPosition) || (mSelectedRowId != mOldSelectedRowId)) { selectionChanged(); mOldSelectedPosition = mSelectedPosition; mOldSelectedRowId = mSelectedRowId; } }
new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub try { //以下三行代码是解决问题所在 Field field = AdapterView.class.getDeclaredField("mOldSelectedPosition"); field.setAccessible(true); //设置mOldSelectedPosition可访问 field.setInt(spinner, AdapterView.INVALID_POSITION); //设置mOldSelectedPosition的值 } catch (Exception e) { e.printStackTrace(); } } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } };
-
安卓自定义控件相关-BetterSpinner自定义Spinner控件.rar
2019-07-29 17:45:06BetterSpinner自定义Spinner控件.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。 -
安卓开发之自绘spinner控件
2017-03-09 09:41:09自绘spinner控件一个简单的安卓spinner控件自绘。外观可行,但实用性不怎么样。
控件分为两个部分:一个textview和一个popupwindow
textview自定义边框形状、边线,并在右边添加“﹀“”︿”图像,单击textview时弹出popupwindow
代码:
主活动中:
public class MainActivity extends Activity { private SpinerPopWindow<String> mSpinerPopWindow; private List<String> list = new ArrayList<String>(); private TextView tvValue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); list.add("test1:"); list.add("test2:"); list.add("test3:"); list.add("test4:"); list.add("test5:"); list.add("test6:"); tvValue = (TextView) findViewById(R.id.tv_value); //显示PopupWindow tvValue.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_value: mSpinerPopWindow.setWidth(tvValue.getWidth()); mSpinerPopWindow.showAsDropDown(tvValue); setTextImage(R.drawable.icon_up); break; } } }); //popupwindow显示的ListView的item点击事件 mSpinerPopWindow = new SpinerPopWindow<String>(this, list,new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position,long id) { mSpinerPopWindow.dismiss(); tvValue.setText(list.get(position)); } }); //监听popupwindow取消 mSpinerPopWindow.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss() { setTextImage(R.drawable.icon_down); } }); } //设置右端图像 private void setTextImage(int resId) { Drawable drawable = getResources().getDrawable(resId); drawable.setBounds(0, 0, drawable.getMinimumWidth(),drawable.getMinimumHeight());// 必须设置图片大小,否则不显示 tvValue.setCompoundDrawables(null, null, drawable, null); } }
PopupWindow代码:
@SuppressWarnings("unused") @SuppressLint("InflateParams") public class SpinerPopWindow<T> extends PopupWindow { private LayoutInflater inflater; private ListView mListView; private List<T> list; private MyAdapter mAdapter; public SpinerPopWindow(Context context,List<T> 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 { @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @SuppressWarnings("unchecked") @Override public 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; } }
shape_list.xml<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <!-- This is the main color --> <item> <shape> <!-- 边框颜色 --> <solid android:color="#71C297"/> </shape> </item> <!-- 给View的上 左 右设置8dp的边框 --> <item android:left="1dp" android:right="1dp" android:bottom="1dp"> <shape> <!-- View填充颜色 --> <solid android:color="#FFFFFFFF"/> </shape> </item> </layer-list>
shape_tv.xml<shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 填充的颜色 --> <solid android:color="#FFFFFFFF" /> <corners android:topLeftRadius="5dp" android:topRightRadius="5dp" /> <!-- 设置边框 --> <stroke android:width="1dp" android:color="#71C297" /> </shape>
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:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:background="@drawable/shape_list" android:scrollbars="none" > </ListView> </LinearLayout>
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:gravity="center_vertical"> <TextView android:id="@+id/tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:textColor="#666666" android:textSize="20sp"/> </LinearLayout>
actity_main.xml<TextView android:id="@+id/tv_value" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="@drawable/shape_tv"//可以设置背景图片 android:drawableRight="@drawable/icon_down" android:padding="10dp" android:text="请选择父类别" android:textColor="#666666" android:textSize="20sp" />
-
安卓日期控件 spinner
2012-09-03 11:32:32android 日期控件 spinner 的使用项目实例 -
安卓界面控件之Spinner
2020-04-13 20:35:32安卓界面控件之SpinnerSpinner的定义:如果为Spinner中添加选择项目 Spinner的定义: 1.Spinner是一种能够从多个选项中选一个选项的控件,使用浮动菜单为用户提供选择 2.类似于桌面程序的组合框(ComboBox) ...安卓界面控件之Spinner
Spinner的定义:
1.Spinner是一种能够从多个选项中选一个选项的控件,使用浮动菜单为用户提供选择 2.类似于桌面程序的组合框(ComboBox) Spinner位于工具栏Palette栏中的Containers中的第一个(意味着Spinner是一种容器,存放选择的容器)
如果为Spinner中添加选择项目
List<String> list = new ArrayList<String>();//创建一个List数组存放spinner中下拉选项中的项目 list.add("计算机科学与技术");//添加项目,其postion为0 list.add("物联网");//添加项目,其postion为1 list.add("软件工程");//添加项目,其postion为2 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list);//创建一个适配器,this代指上下文即Mainactivity,item为下拉菜单的样式为系统内置,list为上文创建的list final Spinner spinnerOfPro = findViewById(R.id.spinnerOfPro);//关联XML文件中的Spinner控件spinnerOfPro spinnerOfPro.setAdapter(adapter);//关联适配器 为选择项目添加事件 spinnerOfPro.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { textViewOfProOut.setText("你的专业是:"+ spinnerOfPro.getItemAtPosition(position)); } @Override public void onNothingSelected(AdapterView<?> parent) { }
-
安卓开发中Spinner控件的使用
2014-11-25 21:39:00在安卓手机应用开发中,Spinner对象常用方法有以下五种。 用法 1 :以资源方式,静态展示 Spinner 选项 用法 2 :以代码方式,动态展示 Spinner 选项 用法 3 :同时显示图片和文本 用法 4:混合方式 我... -
基于Java语言的安卓编程之十八Spinner控件
2017-03-27 20:44:28通过getView()的convertView参数可以实现“旧”视图的使用而不必每次都要重新创建新视图,因而提高了该方法的效率。... 今天将学习Spinner控件。Spinner控件用来显示一个下拉列表,用户可以在该列表中选择一 -
安卓入门--Spinner控件与二级联动详解
2016-05-13 23:17:17SPinner 父类:AbsSpinner–AdapterView 定义:下拉菜单控件 常用方法: android:spinnerMode:1. dialog---对话框模式 2. dropdown--下拉模式android:prompt(标题的设置)1. 仅仅只有在spinnerMode:dialog下才能生效 ... -
安卓学习--------spinner控件
2013-09-17 11:13:47安卓提供了一种下拉菜单式的控件:spinner,实现这个控件主要就是配置ArrayAdapter这个适配器,下面就记录配置该...1.首先在布局文件中定义一个spinner控件 <Spinner android:id="@+id/spinnerId" android:spinnerMo -
安卓控件Spinner应用实例
2019-09-24 15:40:43Spinner是从多个选项中选择一个选项的控件,利用浮动菜单为用户提供选择。 截图: 代码: 1 package com.example.shiyan1; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 ... -
安卓 Spinner详解
2016-06-15 10:04:171.最简单的Spinner 在布局文件中添加Spinner控件 android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Spinn -
安卓之高级控件Spinner下拉框
2017-06-12 00:20:47Spinner控件下拉框运用在地址的二级联动中 效果如图: XML关键代码: android:orientation="vertical" android:layout_width="match_parent -
安卓的下拉控件Spinner
2018-12-01 23:44:111.Spinner的常用XML属性 android:spinnerMode:dialog和dropDown两种模式,默认为下拉列表。 android:entries:使用&lt;string-array…/&gt;资源配置数据源。 android:prompt... -
安卓 spinner下拉框 做模糊查询_用图表控件做一个简单的员工信息查询系统
2020-12-02 22:42:14其实要实现这个同学的需求在EXCEL里有好几种方法可以用表单控件,也可以用数据验证 + VLOOKUP,今天我们就用第一种方法,用表单控件来做简单的信息查询系统。 我们先来看看做好后的效果选择表单控件,你需要在开发... -
安卓控件使用系列25:Spinner下拉列表控件的使用方法
2015-10-03 12:21:49安卓中下拉列表控件是经常使用的控件之一,下面我们一起...整体思路:在xml文件中添加两个Spinner控件;定义一个MyAdapter类,在getData方法中返回一个动态数组,数组中添加了几个文字信息,在getListMaps方法中返回Map -
[一个星期自学安卓]Spinner下拉控件
2014-02-04 22:18:50视频下载: http://pan.baidu.com/s/1kTzAJEv ...完整代码及实验说明 请参考教材: ...//Spinner下拉控件的基本使用方法 //自定义Spinner下拉item的方法 //Spinner的常用属性 -
安卓初识基本控件_Spinner
2016-05-29 22:02:17今天在看spinner相关的代码时候发现,当我们在清单文件想兼容2.3,会发现spinner的样式和平常不一样。 android:minSdkVersion="10" />如果是我们平常写的,都是这种 android:minSdkVersion="10" ... -
Android日期选择及下拉列表Spinner控件的使用
2018-11-08 11:47:03很多安卓应用都有日期选择以及下拉列表的功能,具体就是下面图示的效果 具体代码实现如下 先写布局文件xml,style就不一一列举了,根据自己的需求写就好 <?xml version="1.0" encoding="utf-... -
安卓开发16:Spinner 下拉列表控件
2013-07-09 14:22:17Spinner 下拉列表控件 创建一个activity_main.xml文件: xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_
收藏数
95
精华内容
38