精华内容
下载资源
问答
  • android Spinner控件详解

    2020-11-06 11:15:15
    android Spinner控件详解 编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友...

    android Spinner控件详解

    编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识、前端、后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过!

    Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。

    spinner.png

    上图显示的是Spinner常见的样式。这篇文章中我将讨论1.Spinner的基本用法 2.设置Spinner的Adapter (arrayadapter 和自定义BaseAdapter)3.Spinner的菜单显示方式 4.Spinner的xml属性

    最简单的Spinner
    在布局文件中添加Spinner控件

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
     
        <Spinner
            android:id="@+id/spinner1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:entries="@array/languages"
          />
    </LinearLayout>
    

    其中android:entries="@array/languages"表示Spinner的数据集合是从资源数组languages中获取的,languages数组资源定义在values/arrays.xml中:

    <?xml version="1.0" encoding="utf-8"?> c语言 java php xml html 如果你不需要对Spinner的选择事件做响应,那么一个完整的Spinner使用流程就结束了。

    运行结果:

    QQ图片20150105013559.jpg

    当然,一般情况下我们是需要响应Spinner选择事件的,可以通过OnItemSelectedListener的回调方法实现

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Spinner spinner = (Spinner) findViewById(R.id.spinner1);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, 
                    int pos, long id) {
           
                String[] languages = getResources().getStringArray(R.array.languages);
                Toast.makeText(MainActivity.this, "你点击的是:"+languages[pos], 2000).show();
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // Another interface callback
            }
        });
    }
    

    }
    上面的Spinner看起来非常漂亮,不过它并不是总是如此,刚刚看到的是在android:Theme.Holo.Light主题下的效果,同样的代码如果在android:Theme.Light下面就会变得很丑。

    想必这也是很多人不想使用Spinner的原因了吧。如果想兼容2.3,则只能忍受这样的效果。

    设置Spinner的Adapter
    上面使用Spinner数据源于xml数组,其实用的最多的还是通过adapter来跟Spinner绑定数据。

    使用ArrayAdapter

    // 初始化控件
    Spinner spinner = (Spinner) findViewById(R.id.spinner1);
    // 建立数据源
    String[] mItems = getResources().getStringArray(R.array.languages);
    // 建立Adapter并且绑定数据源
    ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_spinner_item, mItems);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    //绑定 Adapter到控件
    spinner .setAdapter(adapter);
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view,
    int pos, long id) {

        String[] languages = getResources().getStringArray(R.array.languages);
        Toast.makeText(MainActivity.this, "你点击的是:"+languages[pos], 2000).show();
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback
    }
    

    });
    这是Spinner的标准使用方法,其中,有两行代码可以决定Spinner的外观:

    1

    ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_spinner_item, mItems);
    第二个参数是Spinner未展开菜单时Spinner的默认样式,android.R.layout.simple_spinner_item是系统自带的内置布局。

    2

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    设置的是展开的时候下拉菜单的样式(注意和上面区别),同理android.R.layout.simple_spinner_dropdown_item也是内置布局。

    如果不设置adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)会怎样呢?

    会造成未展开的sipnner和展开的菜单都是一种布局样式。下面一运行截图来说明:

    没有adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item):

    QQ图片20150105161936.jpg

    有setDropDownViewResource:

    QQ图片20150105162135.jpg

    你可能会很好奇如果设置了setDropDownViewResource但是setDropDownViewResource的参数和ArrayAdapter的第二个布局参数(simple_spinner_item)一致的情况下会怎样。情况是和没有setDropDownViewResource是一样的,因为上面说了不设置setDropDownViewResource Spinner未展开和展开都是用的一样的布局。

    其实simple_spinner_item和simple_spinner_dropdown_item两者的名字正好反映了他们的区别。一个应用于下拉一个应用于Spinner本身。

    使用自定义的BaseAdapter
    这种情况适用于spinner比较复杂的情况,比如带有图标。

    下面我们定义一个选择联系人的Spinner。

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="80dip"
        android:orientation="vertical" >
     
        <Spinner
            android:id="@+id/spinner2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
          />
    </LinearLayout>
    

    activity中:

           // 初始化控件
        Spinner spinner2  = (Spinner) findViewById(R.id.spinner2);
        // 建立数据源
        List<Person>  persons=new ArrayList<Person>();
        persons.add(new Person("张三", "上海 "));
        persons.add(new Person("李四", "上海 "));
        persons.add(new Person("王五", "北京" ));
        persons.add(new Person("赵六", "广州 "));
        //  建立Adapter绑定数据源
        MyAdapter _MyAdapter=new MyAdapter(this, persons);
        //绑定Adapter
        spinner2.setAdapter(_MyAdapter);
    

    Person.java

    package com.example.spinnerdemo;

    public class Person {
    private String personName;
    private String personAddress;
    public Person(String personName, String personAddress) {
    super();
    this.personName = personName;
    this.personAddress = personAddress;
    }
    public String getPersonName() {
    return personName;
    }
    public void setPersonName(String personName) {
    this.personName = personName;
    }
    public String getPersonAddress() {
    return personAddress;
    }
    public void setPersonAddress(String personAddress) {
    this.personAddress = personAddress;
    }

    }
    MyAdapter.java

    package com.example.spinnerdemo;

    import java.util.List;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;

    /**

    • 自定义适配器类
    • @author jiangqq

    */
    public class MyAdapter extends BaseAdapter {
    private List mList;
    private Context mContext;

    public MyAdapter(Context pContext, List<Person> pList) {
        this.mContext = pContext;
        this.mList = pList;
    }
    
    @Override
    public int getCount() {
        return mList.size();
    }
    
    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        return position;
    }
    /**
     * 下面是重要代码
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);
        convertView=_LayoutInflater.inflate(R.layout.item_custom, null);
        if(convertView!=null) {
            ImageView imageView = (ImageView)convertView.findViewById(R.id.image);
            imageView.setImageResource(R.drawable.ic_launcher);
            TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);
            TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);
            _TextView1.setText(mList.get(position).getPersonName());
            _TextView2.setText(mList.get(position).getPersonAddress());
        }
        return convertView;
    }
    

    }
    运行效果:
    QQ图片20150105170110.png

    Spinner的菜单显示方式
    它有两种显示形式,一种是下拉菜单,一种是弹出框,菜单显示形式是spinnerMode属性决定的:

    android:spinnerMode=“dropdown”
    android:spinnerMode=“dialog”
    在android2.3上没有这个属性,系统默认将Spinner弹出菜单显示成dialog。下面是Theme.Light和Theme.Holo.Light下Spinner在不同模式下的效果对比图。

    dropdown dialog
    Theme.Light

    默认为弹出框的形式

    Theme.Holo.Light

    默认为下拉菜单的形式

    Spinner的xml属性
    其实上面已经提到了Spinner的两个属性:

    1 entries: 直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定)

    2 spinnerMode: Spinner的显示形式

    除此之外还有如下属性:

    prompt:在Spinner弹出选择对话框的时候对话框的标题:

    QQ图片20150105024315.jpg

    属性名称

    android:dropDownHorizontalOffset

    对应方法:

    setDropDownHorizontalOffset(int)
    spinnerMode=”dropdown”时,下拉的项目选择窗口在水平方向相对于Spinner窗口的偏移量。

    它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    这个属性还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    这个属性对应全局属性资源符号dropDownHorizontalOffset。

    android:dropDownSelector

    用于设定spinnerMode=”dropdown”时列表选择器的显示效果。

    它可以用”@[+][package]:type:name”格式来引用另外的资源,或者是用”?[package:][type:]name”的格式来 应用主题属性,还可以是”#rgb”、”#argb”、”#rrggbb”、”aarrggbb”格式的颜色值。

    它对应的全局属性资源符号是dropDownSelector。

    android:dropDownVerticalOffset

    对应方法:

    setDropDownVerticalOffset(int)
    spinnerMode=”dropdown”时,下拉的项目选择窗口在垂直方向相对于Spinner窗口的偏移量。

    这个属性它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    这个属性对应全局属性资源符号dropDownVerticalOffset。

    android:dropDownWidth

    对应方法:

    setDropDownWidth(int)
    在spinnerMode=”dropdown”时,设定下拉框的宽度。

    这个属性可以是带有单位的浮点型的尺寸值,如:14.5sp。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    还可以是下列常量之一:

    fill_parent = -1,下拉框的宽度应该使用屏幕的宽度来设定。这个常量从API Level 8开始被废弃了,并且使用mach_parent常量来代替。

    mach_parent = -1,下拉框的宽度应该使用屏幕的宽度来设定。在API Level 8中被引入。

    wrap_content = -2,下拉框的宽度应该跟它的内容相适应。

    它对应的全局资源符号是dropDownWidth。

    android:gravity

    对应方法:

    setGravity(int)
    这个属性用于设置当前选择的项目的对齐方式。

    它必须是以下常量值之一或组合(用”|”符号分离)。

    top = 0x30:把选择的对象放到它的容器的顶部,不改变它的尺寸。

    bottom = 0x50:把选择的对象放到它的容器的底部,不改变它的尺寸。

    left = 0x03:把选择的对象放到它的容器的左边,不改变它的尺寸。

    right = 0x05:把选择的对象放到它的容器的右边,不改变它的尺寸。

    center_vertical = 0x10:把选择的对象放到它的容器的垂直中心,不改变它的尺寸。

    fill_vertical = 0x70:为了完全的填充它的容器,系统会根据需要来增加选择对象的垂直尺寸。

    center_horizontal = 0x01:把选择的对象放到它的容器的水平中心,不改变它的尺寸。

    fill_horizontal = 0x07:为了完全的填充它的容器,系统会根据需要来增加选择对象的水平尺寸。

    center = 0x11:把选择的对象放到它的容器的垂直和水平中心,不改变它的尺寸。

    fill = 0x77:为了完全的填充它的容器,系统会根据需要来增加选择对象的水平和垂直尺寸。

    clip_vertical = 0x80:附加的可选设置,它可以设置容器内子对象的上下边缘裁剪它的容器边框。裁剪会基于垂直对齐的方式:顶部对齐的会裁剪底部边缘,底部对齐的会裁剪顶部边缘,不会上下边缘都裁剪。

    clip_horizontal = 0x08:附加的可选设置,它可以设置容器内子对象的左右边缘裁剪它的容器边框。裁剪会基于水平对齐的方式:左对齐的会裁剪右边缘,右对齐的会裁剪左边缘,不会左右边缘都裁剪。

    start = 0x00800003:把对象放到它的容器的开始位置,不改变它的尺寸。

    end = 0x00800005:把对象放到它的容器的结束位置,不改变它的尺寸。

    对应的全局属性资源符号是gravity。

    注:Spinner对象是一个视窗对象容器,设置它的gravity属性时,只会改变容器内部子视窗对象的对齐方式,并不会改变子视窗内部内容的对齐方式。

    android:popupBackground

    对应方法:

    setPopupBackgroundResource(int)
    在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景。

    可以使用”@[+][package:]type:name”格式来引用另外的资源,或者使用”?[package:][type:]name”格式来应 用主题属性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式的颜色值。

    对应的全局属性资源符号是popupBackground
    友情赞助:http://www.gzlzygy.com 赣州绿之源果业有限公司

    展开全文
  • Android Spinner控件详解

    千次阅读 2018-12-05 15:50:00
    Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。 上图显示的是...

    Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。

    spinner.png

    上图显示的是Spinner常见的样式。这篇文章中我将讨论1.Spinner的基本用法 2.设置Spinner的Adapter (arrayadapter 和自定义BaseAdapter)3.Spinner的菜单显示方式 4.Spinner的xml属性

    最简单的Spinner

    在布局文件中添加Spinner控件

        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" >
         
            <Spinner
                android:id="@+id/spinner1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:entries="@array/languages"
              />
        </LinearLayout>

    其中android:entries="@array/languages"表示Spinner的数据集合是从资源数组languages中获取的,languages数组资源定义在values/arrays.xml中:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="languages">
            <item>c语言</item>
            <item>java </item>
            <item>php</item>
            <item>xml</item>
            <item>html</item>
        </string-array>
    </resources>

    如果你不需要对Spinner的选择事件做响应,那么一个完整的Spinner使用流程就结束了。

    运行结果:

    QQ图片20150105013559.jpg

    当然,一般情况下我们是需要响应Spinner选择事件的,可以通过OnItemSelectedListener的回调方法实现

    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Spinner spinner = (Spinner) findViewById(R.id.spinner1);
            spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, 
                        int pos, long id) {
               
                    String[] languages = getResources().getStringArray(R.array.languages);
                    Toast.makeText(MainActivity.this, "你点击的是:"+languages[pos], 2000).show();
                }
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                    // Another interface callback
                }
            });
        }
    
    }

    上面的Spinner看起来非常漂亮,不过它并不是总是如此,刚刚看到的是在android:Theme.Holo.Light主题下的效果,同样的代码如果在android:Theme.Light下面就会变得很丑。 


    想必这也是很多人不想使用Spinner的原因了吧。如果想兼容2.3,则只能忍受这样的效果。

    设置Spinner的Adapter

    上面使用Spinner数据源于xml数组,其实用的最多的还是通过adapter来跟Spinner绑定数据。

    使用ArrayAdapter

    // 初始化控件
    Spinner spinner = (Spinner) findViewById(R.id.spinner1);
    // 建立数据源
    String[] mItems = getResources().getStringArray(R.array.languages);
    // 建立Adapter并且绑定数据源
    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    //绑定 Adapter到控件
    spinner .setAdapter(adapter);
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, 
                int pos, long id) {
       
            String[] languages = getResources().getStringArray(R.array.languages);
            Toast.makeText(MainActivity.this, "你点击的是:"+languages[pos], 2000).show();
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // Another interface callback
        }
    });

    这是Spinner的标准使用方法,其中,有两行代码可以决定Spinner的外观:

    1

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, mItems);

    第二个参数是Spinner未展开菜单时Spinner的默认样式,android.R.layout.simple_spinner_item是系统自带的内置布局。

    2

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    设置的是展开的时候下拉菜单的样式(注意和上面区别),同理android.R.layout.simple_spinner_dropdown_item也是内置布局。

    如果不设置adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)会怎样呢?

    会造成未展开的sipnner和展开的菜单都是一种布局样式。下面一运行截图来说明:

    没有adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item):

    QQ图片20150105161936.jpg

    有setDropDownViewResource:

    QQ图片20150105162135.jpg

    你可能会很好奇如果设置了setDropDownViewResource但是setDropDownViewResource的参数和ArrayAdapter的第二个布局参数(simple_spinner_item)一致的情况下会怎样。情况是和没有setDropDownViewResource是一样的,因为上面说了不设置setDropDownViewResource Spinner未展开和展开都是用的一样的布局。

    其实simple_spinner_item和simple_spinner_dropdown_item两者的名字正好反映了他们的区别。一个应用于下拉一个应用于Spinner本身。

     

    使用自定义的BaseAdapter

    这种情况适用于spinner比较复杂的情况,比如带有图标。

    下面我们定义一个选择联系人的Spinner。

        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="80dip"
            android:orientation="vertical" >
         
            <Spinner
                android:id="@+id/spinner2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
              />
        </LinearLayout>

    activity中:

            // 初始化控件
            Spinner spinner2  = (Spinner) findViewById(R.id.spinner2);
            // 建立数据源
            List<Person>  persons=new ArrayList<Person>();
            persons.add(new Person("张三", "上海 "));
            persons.add(new Person("李四", "上海 "));
            persons.add(new Person("王五", "北京" ));
            persons.add(new Person("赵六", "广州 "));
            //  建立Adapter绑定数据源
            MyAdapter _MyAdapter=new MyAdapter(this, persons);
            //绑定Adapter
            spinner2.setAdapter(_MyAdapter);

    Person.java

    package com.example.spinnerdemo;
    
    public class Person {
        private String personName;
        private String personAddress;
        public Person(String personName, String personAddress) {
            super();
            this.personName = personName;
            this.personAddress = personAddress;
        }
        public String getPersonName() {
            return personName;
        }
        public void setPersonName(String personName) {
            this.personName = personName;
        }
        public String getPersonAddress() {
            return personAddress;
        }
        public void setPersonAddress(String personAddress) {
            this.personAddress = personAddress;
        }
    
    }

    MyAdapter.java

    package com.example.spinnerdemo;
    
    import java.util.List;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    /**
     * 自定义适配器类
     * @author jiangqq  <a href=http://blog.csdn.net/jiangqq781931404></a>
     *
     */
    public class MyAdapter extends BaseAdapter {
        private List<Person> mList;
        private Context mContext;
    
        public MyAdapter(Context pContext, List<Person> pList) {
            this.mContext = pContext;
            this.mList = pList;
        }
    
        @Override
        public int getCount() {
            return mList.size();
        }
    
        @Override
        public Object getItem(int position) {
            return mList.get(position);
        }
    
        @Override
        public long getItemId(int position) {
            return position;
        }
        /**
         * 下面是重要代码
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater _LayoutInflater=LayoutInflater.from(mContext);
            convertView=_LayoutInflater.inflate(R.layout.item_custom, null);
            if(convertView!=null) {
                ImageView imageView = (ImageView)convertView.findViewById(R.id.image);
                imageView.setImageResource(R.drawable.ic_launcher);
                TextView _TextView1=(TextView)convertView.findViewById(R.id.textView1);
                TextView _TextView2=(TextView)convertView.findViewById(R.id.textView2);
                _TextView1.setText(mList.get(position).getPersonName());
                _TextView2.setText(mList.get(position).getPersonAddress());
            }
            return convertView;
        }
    }

    运行效果:

    QQ图片20150105170110.png

     

    Spinner的菜单显示方式

    它有两种显示形式,一种是下拉菜单,一种是弹出框,菜单显示形式是spinnerMode属性决定的:

    android:spinnerMode="dropdown"
    android:spinnerMode="dialog"

    在android2.3上没有这个属性,系统默认将Spinner弹出菜单显示成dialog。下面是Theme.Light和Theme.Holo.Light下Spinner在不同模式下的效果对比图。

     dropdowndialog

    Theme.Light

    默认为弹出框的形式

              

    Theme.Holo.Light 

     

    默认为下拉菜单的形式  

               

     

    Spinner的xml属性

    其实上面已经提到了Spinner的两个属性:

    1 entries: 直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定)

    2 spinnerMode: Spinner的显示形式

    除此之外还有如下属性:

    prompt:在Spinner弹出选择对话框的时候对话框的标题:

    QQ图片20150105024315.jpg

     

    属性名称

    android:dropDownHorizontalOffset

    对应方法:    

    setDropDownHorizontalOffset(int)

    spinnerMode=”dropdown”时,下拉的项目选择窗口在水平方向相对于Spinner窗口的偏移量。

    它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    这个属性还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    这个属性对应全局属性资源符号dropDownHorizontalOffset。

    android:dropDownSelector

    用于设定spinnerMode=”dropdown”时列表选择器的显示效果。

    它可以用”@[+][package]:type:name”格式来引用另外的资源,或者是用”?[package:][type:]name”的格式来 应用主题属性,还可以是”#rgb”、”#argb”、”#rrggbb”、”aarrggbb”格式的颜色值。

    它对应的全局属性资源符号是dropDownSelector。

    android:dropDownVerticalOffset

    对应方法:

    setDropDownVerticalOffset(int)

    spinnerMode=”dropdown”时,下拉的项目选择窗口在垂直方向相对于Spinner窗口的偏移量。

    这个属性它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    这个属性对应全局属性资源符号dropDownVerticalOffset。

    android:dropDownWidth

    对应方法:

    setDropDownWidth(int)

    在spinnerMode=”dropdown”时,设定下拉框的宽度。

    这个属性可以是带有单位的浮点型的尺寸值,如:14.5sp。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。

    还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。

    还可以是下列常量之一:

    fill_parent = -1,下拉框的宽度应该使用屏幕的宽度来设定。这个常量从API Level 8开始被废弃了,并且使用mach_parent常量来代替。

    mach_parent = -1,下拉框的宽度应该使用屏幕的宽度来设定。在API Level 8中被引入。

    wrap_content = -2,下拉框的宽度应该跟它的内容相适应。

    它对应的全局资源符号是dropDownWidth。

    android:gravity

    对应方法:

    setGravity(int)

    这个属性用于设置当前选择的项目的对齐方式。

    它必须是以下常量值之一或组合(用”|”符号分离)。

    top = 0x30:把选择的对象放到它的容器的顶部,不改变它的尺寸。

    bottom = 0x50:把选择的对象放到它的容器的底部,不改变它的尺寸。

    left = 0x03:把选择的对象放到它的容器的左边,不改变它的尺寸。

    right = 0x05:把选择的对象放到它的容器的右边,不改变它的尺寸。

    center_vertical = 0x10:把选择的对象放到它的容器的垂直中心,不改变它的尺寸。

    fill_vertical = 0x70:为了完全的填充它的容器,系统会根据需要来增加选择对象的垂直尺寸。

    center_horizontal = 0x01:把选择的对象放到它的容器的水平中心,不改变它的尺寸。

    fill_horizontal = 0x07:为了完全的填充它的容器,系统会根据需要来增加选择对象的水平尺寸。

    center = 0x11:把选择的对象放到它的容器的垂直和水平中心,不改变它的尺寸。

    fill = 0x77:为了完全的填充它的容器,系统会根据需要来增加选择对象的水平和垂直尺寸。

    clip_vertical = 0x80:附加的可选设置,它可以设置容器内子对象的上下边缘裁剪它的容器边框。裁剪会基于垂直对齐的方式:顶部对齐的会裁剪底部边缘,底部对齐的会裁剪顶部边缘,不会上下边缘都裁剪。

    clip_horizontal = 0x08:附加的可选设置,它可以设置容器内子对象的左右边缘裁剪它的容器边框。裁剪会基于水平对齐的方式:左对齐的会裁剪右边缘,右对齐的会裁剪左边缘,不会左右边缘都裁剪。

    start = 0x00800003:把对象放到它的容器的开始位置,不改变它的尺寸。

    end = 0x00800005:把对象放到它的容器的结束位置,不改变它的尺寸。

    对应的全局属性资源符号是gravity。

    注:Spinner对象是一个视窗对象容器,设置它的gravity属性时,只会改变容器内部子视窗对象的对齐方式,并不会改变子视窗内部内容的对齐方式。

    android:popupBackground

    对应方法:

    setPopupBackgroundResource(int)

    在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景。

    可以使用”@[+][package:]type:name”格式来引用另外的资源,或者使用”?[package:][type:]name”格式来应 用主题属性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式的颜色值。

    对应的全局属性资源符号是popupBackground

    展开全文
  • Android Spinner 控件的使用
  • Android Spinner控件简单使用方法,图片加文字的展示效果
  • 实现安卓Spinner控件hint提示效果

    千次阅读 2018-07-28 20:19:05
    1.定义一个Spinner控件: &lt;Spinner android:layout_width="150dp" android:layout_height="match_parent" android:id="@+id/spinner_car"&gt; 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有2种状态,第一种是收缩的情况下只显示第一条,第二种是下拉状态显示所有的条目。可以通过自定义adapter类客户化不同条目的颜色。 //创建列表 ArrayList sortedFN=new ArrayList(); for (int i = 0; i ()...

    Spinner有2种状态,第一种是收缩的情况下只显示第一条,第二种是下拉状态显示所有的条目。可以通过自定义adapter类客户化不同条目的颜色。

    //创建列表
    ArrayList<String> sortedFN=new ArrayList<String>();
    for (int i = 0; i < FileNMstrs.size(); i++) {
        sortedFN.add(FileNMstrs.get(tranferSequence(i)));
    }
    //初始化适配器
    SpinnerAdapter arr_adapter= new SpinnerAdapter(MapActivity.this, android.R.layout.simple_spinner_item, android.R.id.text1,sortedFN);
    //设置下拉样式
    arr_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    //加载适配器
    fileListSpinner.setAdapter(arr_adapter);



    在SpinnerAdapter中定义颜色,自定义的SpinnerAdapter可以继承ArrayAdapter也可以继承simpleAdapter,根据需要显示的数据来选择。要显示的数据是列表就选择arrayadapter,如果数据是键值对就选择map。

    import android.content.Context;
    import android.graphics.Color;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    import com.example.myapplication.storage.ColorChanger;
    
    import java.util.ArrayList;
    
    /**
     * Created by Administrator on 2017/8/9.
     */
    
    public class SpinnerAdapter extends ArrayAdapter {
    
        private LayoutInflater infalter;
        private int resource;
        private int textViewResourceId;
    
        private ArrayList<String>  target;
    
        public SpinnerAdapter(Context context, int resource,
                          int textViewResourceId, ArrayList<String> objects) {
            super(context, resource, textViewResourceId, objects);
    
            this.resource = resource;
            this.textViewResourceId = textViewResourceId;
            target = objects;
    
            infalter = LayoutInflater.from(context);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null)
                convertView = infalter.inflate(resource, null);
            TextView text = (TextView) convertView
                    .findViewById(textViewResourceId);
            text.setText(target.get(position));
            text.setTextColor(ColorChanger.nextColor(position));
            return convertView;
        }
    
        @Override
        public View getDropDownView(int position, View convertView,
                                    ViewGroup parent) {
            if (convertView == null)
                convertView = infalter.inflate(
                        android.R.layout.simple_list_item_1, null);
            TextView text = (TextView) convertView
                    .findViewById(android.R.id.text1);
            text.setText(target.get(position));
            text.setTextColor(ColorChanger.nextColor(position));
            return convertView;
        }
    
    
    }
    getView

    getview是没有下拉的情况下,显示出来的内容,就是第一行。而getDropDownView是下拉情况下,显示出来所有的行。要设置下拉情况下不同行的风格style,需要写getDropDownView。网上很多教程都是只修改getview,其实不对。


    最后说一下android.R.layout.simple_spinner_item, android.R.id.text1这都是android自带的控件。simple_spinner_item只有一个控件,id就是text1的textview。所以getDropDownView中按照simple_spinner_item来创建convertView,然后按照id.text1来找到textview,设置text内容和颜色。

    有兴趣的可以找找源码。

    展开全文
  • 微调框微调框提供一种方法,让用户可以从值集中快速选择一个值。默认状态下,微调框显示其当前所选的值。 触摸微调框可显示下拉菜单,其中列有... 例如:android:id="@+id/planets_spinner"android:layout_width=...
  • 1.item_spinselect(Spinner样式) &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;TextView xmlns:android="http://schemas.android.com/apk/res/android" ...
  • SpinnerItem> _listSI=new ArrayList<SpinnerItem>(); SpinnerItem siqz=new SpinnerItem("1","前兆"); _listSI.add(siqz); SpinnerItem sidy=new SpinnerItem("2","电源"); _listSI.add(sidy); Spinner...
  • NULL 博文链接:https://byandby.iteye.com/blog/1025298
  • android:textAlignment="center
  • 如图spinner控件太宽,把开关控件挤出去了 加了array之后spinner突然变宽 请问如何控制spinner宽度 <Spinner android:id="@+id/spinner1" android:layout_width="wrap_content" android:layout_height="wrap_...
  • 安卓界面控件Spinner

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

    2021-06-10 05:29:28
    Spinner控件详解效果图修改Spinner样式在介绍之前,先看一下系统原生的样式6.x & 5.x系统样式4.x系统样式官方文档XML属性方法描述android:dropDownHorizontalOffsetsetDropDownHorizontalOffset(int)Amount of ...
  • 我们大家都应该知道,android给我们提供了一个spinner控件,这个控件主要就是一个列表。 Spinner位于 android.widget包下,每次只显示用户选中的元素,当用户再次点击时,会弹出选择列表供用户选择,而选择列表中的...
  • android Spinner控件实例

    2013-06-20 17:06:08
    android Spinner应用实例。
  • 通过继承自LinearLayout的控件来替代spinner的功能,便于移植。 博客地址:https://blog.csdn.net/hyy123hu/article/details/79680463
  • 1.单选框的实现 1.xml控件代码: <com.kkmap.messenger.view.NiceSpinner android:hint="请选择" android:id="@+id/spinner_handler" android:layout_weight="3.5" style="@style/inspection_i...
  • 该文档为eclipse编程下的安卓项目,主要实现了Spinner控件的使用,实现下拉菜单
  • Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。 上图显示的是...
  • adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 将adapter 添加到spinnerspinner.setAdapter(adapter); // 添加事件Spinner事件监听 spinner....
  • 先来简单介绍一下spinner的一些属性 android:spinnerMode="dialog" 指定其显示模式,有dialog和dropdown的两种。 android:dropDownWidth="200dp" 指定组件宽度 android:popupBackground="@color/white" 指定背景...
  • Android控件Spinner用法详解

    万次阅读 2018-06-22 09:56:01
    这个效果图是最简单的一个Spinner下拉列表,下面给大家展示代码部分 1、在xml文件中设置数据源 注意路径!!文件是自己新建的!! 2、在布局文件中调用xml文件 关键代码:android:entries=”@array/medal” ...
  • 该源代码展示了如何去实现下拉列表框的效果,控件Spinner
  • 本文实例讲述了AndroidSpinner控件之键值对用法。分享给大家供大家参考。具体如下: 一、字典表,用来存放键值对信息 package com.ljq.activity; import java.io.Serializable; @SuppressWarnings(serial) public...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,743
精华内容 4,297
关键字:

安卓spinner控件