Android笔记系列--Spinner
菜单数据集
values/arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="anim_type">
<item>淡入淡出效果</item>
<item>放大淡出效果</item>
<item>转动淡出效果1</item>
<item>转动淡出效果2</item>
<item>左上角展开淡出效果</item>
<item>压缩变小淡出效果</item>
<item>右往左推出效果</item>
<item>下往上推出效果</item>
<item>左右交错效果</item>
<item>放大淡出效果</item>
<item>缩小效果</item>
<item>上下交错效果</item>
</string-array>
</resources>
布局设置
spinner 的xml属性:
1) entries:表示Spinner的数据集合是从资源数组anim_type中获取的
2) spinnerMode: Spinner的显示形式
3) prompt:在Spinner弹出选择对话框的时候对话框的标题
4) dropDownHorizontalOffset 对应方法:setDropDownHorizontalOffset(int)
spinnerMode=”dropdown”时,下拉的项目选择窗口在水平方向相对于Spinner窗口的偏移量。
它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。
这个属性还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。
这个属性对应全局属性资源符号dropDownHorizontalOffset。
5) android:dropDownSelector
用于设定spinnerMode=”dropdown”时列表选择器的显示效果。
它可以用”@[+][package]:type:name”格式来引用另外的资源,或者是用”?[package:][type:]name”的格式来 应用主题属性,还可以是”#rgb”、”#argb”、”#rrggbb”、”aarrggbb”格式的颜色值。
它对应的全局属性资源符号是dropDownSelector。
6) android:dropDownVerticalOffset
对应方法:setDropDownVerticalOffset(int)
spinnerMode=”dropdown”时,下拉的项目选择窗口在垂直方向相对于Spinner窗口的偏移量。
这个属性它必须是一个带有单位的浮点型尺寸值,如:”14.5sp”。有效的单位包括:px(像素)、dp(密度无关的像素)、sp(基于引用字体的尺寸来缩放的像素)、in(英寸)、mm(毫米)。
还可以引用一个资源(格式:@[package:]type:name)或者是包含这种类型值的主题属性(格式:?[package][type:]name)。
这个属性对应全局属性资源符号dropDownVerticalOffset。
7) 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。
8) 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属性时,只会改变容器内部子视窗对象的对齐方式,并不会改变子视窗内部内容的对齐方式。
9) android:popupBackground 对应方法:setPopupBackgroundResource(int)
在spinner=”dropdown”时,使用这个属性来设置下拉列表的背景。
可以使用”@[+][package:]type:name”格式来引用另外的资源,或者使用”?[package:][type:]name”格式来应 用主题属性,也可以使用”#rgb”、”#argb”、”#rrggbb”、”#aarrggbb”格式的颜色值。
对应的全局属性资源符号是popupBackground
例子
anim_type数组资源定义在values/arrays.xml中:
<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/anim_type"
/>
</LinearLayout>
或者在代码中设置数据集
Spinner spinner = (Spinner) findViewById(R.id.animation_sp);
// 通过资源文件获取Spinner填充内容
String[] types = getResources().getStringArray(R.array.anim_type);
// 建立Adapter并且绑定数据源
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, types);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// 绑定 Adapter到控件
spinner.setAdapter(adapter); //设置适配器
spinner.setSelection(0); //设置默认选项
设置点击监听
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
String[] type = getResources().getStringArray(R.array.anim_type);
Toast.makeText(MainActivity.this, "你点击的是:"+type[pos], 2000).show();
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback
}
});
Spinner的菜单显示方式
它有两种显示形式,一种是下拉菜单,一种是弹出框。
菜单显示形式是spinnerMode属性决定的:
android:spinnerMode="dropdown"
android:spinnerMode="dialog"
在android2.3上没有这个属性,系统默认将Spinner弹出菜单显示成dialog。
推荐阅读
-
Android下拉列表(Spinner)效果(使用C#和Java分别实现)
-
thinkpad E系列笔记本Fn按键设置想脱离对Fn键的依赖
-
联想将推全新ThinkBook系列笔记本:商务画风
-
Flutter学习笔记(30)--Android原生与Flutter混编
-
Android开发笔记
-
微星发布全新Summit系列商务笔记本:11代酷睿、安全第一
-
Android学习笔记之ActionBar Item用法分析
-
Android学习笔记--使用剪切板在Activity中传值示例代码
-
Android学习笔记--通过Application传递数据代码示例
-
Android学习笔记--Activity中使用Intent传值示例代码