spinner 箭头样式修改怎么设置这个样式

更改spinner默认样式 - CSDN博客
更改spinner默认样式
一张图片(Spinner背景图片,带白色箭头的透明图片),一个Activity布局(背景为蓝色)和两个样式布局
1.Activity布局
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:background=&@color/color_blue_dark&
android:layout_height=&match_parent&&
&!--Spinner背景是一个透明的的矩形,上面附有一个白色箭头--&
android:id=&@+id/test_spinner&
android:layout_width=&200dp&
android:layout_height=&wrap_content&
android:layout_centerHorizontal=&true&
android:background=&@drawable/spinner_down&
&/Spinner&
&/LinearLayout&
2.adapter_mytopactionbar_spinner &可以更改默认样式的布局
&?xml version=&1.0& encoding=&utf-8&?&
&!--spinner未展开的文字显示布局,这里边id必须是
android:id=&@android:id/text1&,--&
&!--因为源代码中spinner的textView的id就是这个,如果不这样设置,无法改变spinner的样式--&
android:id=&@android:id/text1&
xmlns:android=&/apk/res/android&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:gravity=&center&
android:singleLine=&true&
android:textColor=&@color/color_white&
android:textSize=&18dp&
3.adapter_mytopactionbar_spinner_item
设置spinner展开的Item布局&?xml version=&1.0& encoding=&utf-8&?&
&!--spinner展开后的Item布局--&
android:id=&@+id/spinner_textView&
xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:gravity=&center&
android:padding=&10dp&
android:textSize=&16sp&&
&/TextView&Activity 中public class SpinnerActivity extends Activity {
private static String[] mArrayString =
private ArrayAdapter&String& mArrayA
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_spinner_layout);
spinner=(Spinner)findViewById(R.id.test_spinner);
初始化spinner中显示的数据
mArrayString = new String[]{&android讲义&,&java面向对象&,&王者归来&};
adapter_mytopactionbar_spinner改变了spinner的默认样式
mArrayAdapter=new ArrayAdapter&String&(this,R.layout.adapter_mytopactionbar_spinner,mArrayString){
public View getDropDownView(int position, View convertView, ViewGroup parent) {
if (convertView == null){
设置spinner展开的Item布局
convertView = getLayoutInflater().inflate(R.layout.adapter_mytopactionbar_spinner_item, parent, false);
TextView spinnerText=(TextView)convertView.findViewById(R.id.spinner_textView);
spinnerText.setText(getItem(position));
return convertV
spinner.setAdapter(mArrayAdapter);
spinner设置监听
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView&?& parent, View view, int position, long id) {
Toast.makeText(SpinnerActivity.this,&你选的是的是第&+position,Toast.LENGTH_SHORT).show();
public void onNothingSelected(AdapterView&?& parent) {
本文已收录于以下专栏:
相关文章推荐
对于android项目开发来说,常常会用到Spinner实现下拉框的效果。而对于Spinner加载适配器的方法有多种:
1.直接加载android自带的ArrayAdapter,SimpleAdapt...
最近用到Android中Spinner控件,搜了一下,网上文章要么语焉不详,要么只提到部分方法,着实不便。根据自己的使用经验,在此略作汇总(转载请注明出处)。(示例代码已经全部测试无误,可惜不能附加文...
Spinner控件是Android自带的选择框体控件。主要有下拉模式和弹出窗模式两种。在这里主要介绍的Spinner的下拉框模式的样式设计和使用方法。
      1.在需要放置的XML文件中注册出来...
android中有个Spinner控件,也就是下拉控件。但是初始的样式比较不好看,所以想着更改下样式。这样就不需要一直用EditText+popupwindow的方式来实现这种效果,会比较这种方式更简...
Android spinner 控件样式及其使用,android spinner 字体,android spinner 样式,android spinner 事件,android spinner xm...
1. 实现最简单的spinnerxml文件,有一个TextView,一个Spinner:&RelativeLayout xmlns:android=&http://schemas.android.co...
图片资源:
rb_store_selector.xml文件:定义ratingbar的样式
&item android:id=&@and
来自:/a/anzhuokaifa/androidkaifa/64.html
这是一个针对技术开发者的一个应用,你可以在掘...
今天又重新学习了Spinner的使用,之前只是知道,不知道该怎么控制Spinner没有下拉表时的样式和下拉表中的样式。今天又仔细研究了一下,更加明白了。
显然是不一样的,这是怎么做到的呢。
他的最新文章
讲师:吴岸城
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)&nbsp&#8250&nbsp&nbsp&#8250&nbsp
android Spinner控件详解
Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。上图显示的是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使用流程就结束了。运行结果:当然,一般情况下我们是需要响应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的外观:1ArrayAdapter&String&&adapter=new&ArrayAdapter&String&(this,android.R.layout.simple_spinner_item,&mItems);第二个参数是Spinner未展开菜单时Spinner的默认样式,android.R.layout.simple_spinner_item是系统自带的内置布局。2adapter.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):有setDropDownViewResource:你可能会很好奇如果设置了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.javapackage&com.example.
public&class&Person&{
&&&&private&String&personN
&&&&private&String&personA
&&&&public&Person(String&personName,&String&personAddress)&{
&&&&&&&&super();
&&&&&&&&this.personName&=&personN
&&&&&&&&this.personAddress&=&personA
&&&&public&String&getPersonName()&{
&&&&&&&&return&personN
&&&&public&void&setPersonName(String&personName)&{
&&&&&&&&this.personName&=&personN
&&&&public&String&getPersonAddress()&{
&&&&&&&&return&personA
&&&&public&void&setPersonAddress(String&personAddress)&{
&&&&&&&&this.personAddress&=&personA
}MyAdapter.javapackage&com.example.
import&java.util.L
import&android.content.C
import&android.view.LayoutI
import&android.view.V
import&android.view.ViewG
import&android.widget.BaseA
import&android.widget.ImageV
import&android.widget.TextV
&*&自定义适配器类
&*&@author&jiangqq&&&a&href=http://blog.csdn.net/jiangqq&&/a&
public&class&MyAdapter&extends&BaseAdapter&{
&&&&private&List&Person&&mL
&&&&private&Context&mC
&&&&public&MyAdapter(Context&pContext,&List&Person&&pList)&{
&&&&&&&&this.mContext&=&pC
&&&&&&&&this.mList&=&pL
&&&&@Override
&&&&public&int&getCount()&{
&&&&&&&&return&mList.size();
&&&&@Override
&&&&public&Object&getItem(int&position)&{
&&&&&&&&return&mList.get(position);
&&&&@Override
&&&&public&long&getItemId(int&position)&{
&&&&&&&&return&
&&&&&*&下面是重要代码
&&&&@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&convertV
}运行效果:Spinner的菜单显示方式它有两种显示形式,一种是下拉菜单,一种是弹出框,菜单显示形式是spinnerMode属性决定的:android:spinnerMode=&dropdown&
android:spinnerMode=&dialog&在android2.3上没有这个属性,系统默认将Spinner弹出菜单显示成dialog。下面是Theme.Light和Theme.Holo.Light下Spinner在不同模式下的效果对比图。dropdowndialogTheme.Light默认为弹出框的形式&&&&&&&&& Theme.Holo.Light 默认为下拉菜单的形式 &&&&&&&&&&& Spinner的xml属性其实上面已经提到了Spinner的两个属性:1 entries: 直接在xml布局文件中绑定数据源(可以不设置,即可以在Activity中动态绑定)2 spinnerMode: Spinner的显示形式除此之外还有如下属性:prompt:在Spinner弹出选择对话框的时候对话框的标题:属性名称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 = 0x:把对象放到它的容器的开始位置,不改变它的尺寸。end = 0x:把对象放到它的容器的结束位置,不改变它的尺寸。对应的全局属性资源符号是gravity。注:Spinner对象是一个视窗对象容器,设置它的gravity属性时,只会改变容器内部子视窗对象的对齐方式,并不会改变子视窗内部内容的对齐方式。android:popupBackground对应方法:setPopupBackgroundResource(int)在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景。可以使用”@[+][package:]type:name”格式来引用另外的资源,或者使用”?[package:][type:]name”格式来应
用主题属性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式的颜色值。对应的全局属性资源符号是popupBackground打赏
上一篇: android中使用数组有种非常简单的方式,在xml中获取,一直以来我都比较排斥这样使用,因为从来没有真正弄懂过,每次需要的时候都是在在网上找一个样板来做,今天花点时间彻底弄懂。 首先来看数组的定义。 创建数组资源 在values目录下创建arrays.xml文件 然
下一篇: 本文翻译自: Grid Spacing on Android 原文作者: Cyril Mottier 在大部分的移动UI或者Web UI都是基于网格概念而设计的。这种网格一般都是有一些对其的方块组成,然后它们组合成为一个块。使用网格这样的设计原则可以有助于对齐UI元素,提升UI的一致性,同2010年9月 移动平台大版内专家分月排行榜第二
2010年12月 移动平台大版内专家分月排行榜第三
2010年12月 移动平台大版内专家分月排行榜第二2010年11月 移动平台大版内专家分月排行榜第二
2011年5月 移动平台大版内专家分月排行榜第三2011年4月 移动平台大版内专家分月排行榜第三2011年3月 移动平台大版内专家分月排行榜第三
2010年9月 移动平台大版内专家分月排行榜第二
2010年12月 移动平台大版内专家分月排行榜第三
2010年12月 移动平台大版内专家分月排行榜第二2010年11月 移动平台大版内专家分月排行榜第二
2011年5月 移动平台大版内专家分月排行榜第三2011年4月 移动平台大版内专家分月排行榜第三2011年3月 移动平台大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
想实现一个web 样式的spinner,自定义控件实在是不知道如何去下手,
目前这个样式是spinner + imageview 拼接出来的。效果不是太好。和UI图差别很大。
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
建议你去github上找现成的轮子比较好,可以直接拿来用,也可以研究别人怎么写的
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:安卓中定义Spinner的样式和获取数据_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
安卓中定义Spinner的样式和获取数据
&&安卓中定义spinner的样式和获取数据
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢

我要回帖

更多关于 spinner 样式设置 的文章

 

随机推荐