精华内容
下载资源
问答
  • 实现安卓Spinner控件hint提示效果

    千次阅读 2018-07-28 20:19:05
    1.定义一个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:04
    Spinner控件可以监听,但是监听的话,如果两次点击都是同一个item的话,那么就就不会触发,因为看源码的话就会发现,在Spinner中有一个保存上次点击的位置的变量叫做  mOldSelectedPosition的变量,每次点击的时候...

    Spinner控件可以监听,但是监听的话,如果两次点击都是同一个item的话,那么就就不会触发,因为看源码的话就会发现,在Spinner中有一个保存上次点击的位置的变量叫做 

    mOldSelectedPosition的变量,每次点击的时候就会验证两次点击是否是同一个item,不同就触发点击事件,因此可以修改mOldSelectedPosition变量,让控件两次点击相同都可以触发。但是私有变量也可以改变他的值,就是使用java的反射来做。

    以下就是源码部分:

      void checkSelectionChanged() {
            if ((mSelectedPosition != mOldSelectedPosition) || (mSelectedRowId != mOldSelectedRowId)) {
                selectionChanged();
                mOldSelectedPosition = mSelectedPosition;
                mOldSelectedRowId = mSelectedRowId;
            }
        }
    方法checkSelectionChanged和变量mOldSelectedPosition都是AdapterView私有的,我们无法继承Spinner重写之。不过,利用java的反射,我们可以暴力修改mOldSelectedPosition的值:

    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,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 自绘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:32
    android 日期控件 spinner 的使用项目实例
  • 安卓界面控件Spinner

    2020-04-13 20:35:32
    安卓界面控件SpinnerSpinner的定义:如果为Spinner中添加选择项目 Spinner的定义: 1.Spinner是一种能够从多个选项中选一个选项的控件,使用浮动菜单为用户提供选择 2.类似于桌面程序的组合框(ComboBox) ...

    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对象常用方法有以下五种。 用法 1 :以资源方式,静态展示 Spinner 选项 用法 2 :以代码方式,动态展示 Spinner 选项 用法 3 :同时显示图片和文本 用法 4:混合方式 我...
  • 通过getView()的convertView参数可以实现“旧”视图的使用而不必每次都要重新创建新视图,因而提高了该方法的效率。... 今天将学习Spinner控件Spinner控件用来显示一个下拉列表,用户可以在该列表中选择一
  • SPinner 父类:AbsSpinner–AdapterView 定义:下拉菜单控件 常用方法: android:spinnerMode:1. dialog---对话框模式 2. dropdown--下拉模式android:prompt(标题的设置)1. 仅仅只有在spinnerMode:dialog下才能生效 ...
  • 安卓提供了一种下拉菜单式的控件:spinner,实现这个控件主要就是配置ArrayAdapter这个适配器,下面就记录配置该...1.首先在布局文件中定义一个spinner控件 <Spinner android:id="@+id/spinnerId" android:spinnerMo
  • Spinner是从多个选项中选择一个选项的控件,利用浮动菜单为用户提供选择。 截图: 代码: 1 package com.example.shiyan1; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 ...
  • 安卓 Spinner详解

    2016-06-15 10:04:17
    1.最简单的Spinner 在布局文件中添加Spinner控件    android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:orientation="vertical" >    <Spinn
  • Spinner控件下拉框运用在地址的二级联动中 效果如图: XML关键代码: android:orientation="vertical" android:layout_width="match_parent
  • 安卓的下拉控件Spinner

    2018-12-01 23:44:11
    1.Spinner的常用XML属性 android:spinnerMode:dialog和dropDown两种模式,默认为下拉列表。 android:entries:使用&amp;lt;string-array…/&amp;gt;资源配置数据源。 android:prompt...
  • 其实要实现这个同学的需求在EXCEL里有好几种方法可以用表单控件,也可以用数据验证 + VLOOKUP,今天我们就用第一种方法,用表单控件来做简单的信息查询系统。 我们先来看看做好后的效果选择表单控件,你需要在开发...
  • 安卓中下拉列表控件是经常使用的控件之一,下面我们一起...整体思路:在xml文件中添加两个Spinner控件;定义一个MyAdapter类,在getData方法中返回一个动态数组,数组中添加了几个文字信息,在getListMaps方法中返回Map
  • 视频下载: http://pan.baidu.com/s/1kTzAJEv ...完整代码及实验说明 请参考教材: ...//Spinner下拉控件的基本使用方法 //自定义Spinner下拉item的方法 //Spinner的常用属性
  • 今天在看spinner相关的代码时候发现,当我们在清单文件想兼容2.3,会发现spinner的样式和平常不一样。   android:minSdkVersion="10" />如果是我们平常写的,都是这种 android:minSdkVersion="10" ...
  • 很多安卓应用都有日期选择以及下拉列表的功能,具体就是下面图示的效果 具体代码实现如下 先写布局文件xml,style就不一一列举了,根据自己的需求写就好 &lt;?xml version="1.0" encoding="utf-...
  • 安卓开发16:Spinner 下拉列表控件

    千次阅读 2013-07-09 14:22:17
    Spinner 下拉列表控件 创建一个activity_main.xml文件: xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_

空空如也

空空如也

1 2 3 4 5
收藏数 95
精华内容 38
关键字:

安卓spinner控件