Spinner使用方法
2016-03-23 14:16
330 查看
Android中的Spinner和VC中的列表框很类似。这里做个小例子,是为笔记。
下拉的效果:
注:可以增加padding属性,优化显示效果。如:
为Spinner定义一个布局文件
为Spinner定义一个Adapter,实现数据和视图的映射(MVC)
为Spinner定义事件处理,通常即为OnItemSelectedListener。
对于这种情况,直接使用ArrayAdapter以及android.R.layout.simple_spinner_item就够了。但需要修改values的类型为Integer[]:
适配器部分改为:
示例效果
下拉的效果:
布局文件
Activity的布局my_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/spinner_hint" /> <Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/result_hint" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="@string/result_hint" /> <!-- android:hint="@string/result" --> <EditText android:id="@+id/result" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="none" android:textAppearance="?android:attr/textAppearanceLarge"/> </LinearLayout> </LinearLayout>
Spinner显示的布局spinner_layout.xml
这里直接简化了,显示一个简单的TextView。<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/calculate_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"/> </LinearLayout>
注:可以增加padding属性,优化显示效果。如:
<!-- android:layout_marginBottom="6dip" android:layout_marginLeft="10dip" android:layout_marginTop="6dip" android:layout_marginRight="2dip" --> <!-- android:paddingBottom="3dip" android:paddingEnd="4dip" android:paddingStart="4dip" android:paddingTop="3dip" -->
代码
省略一些自动生成的代码。public static final String TAG = "MainActivity"; private int[] values = {1, 3, 5, 7, 9}; private Spinner spinner = null; private EditText result = null; private TextView result_hint = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_layout); spinner = (Spinner) this.findViewById(R.id.spinner); spinner.setAdapter(new MySpinnerAdapter()); spinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { int value = values[position]; int cal_result = value * value; result.setText("" + cal_result); result_hint.setText(value + " * " + value + "="); } public void onNothingSelected(AdapterView<?> parent) { } }); result = (EditText) this.findViewById(R.id.result); result.setInputType(InputType.TYPE_NULL); result.setTextColor(Color.GRAY); result_hint = (TextView) this.findViewById(R.id.result_hint); } private class MySpinnerAdapter extends BaseAdapter { public int getCount() { return values.length; } public Object getItem(int position) { return values[position]; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(MainActivity.this) .inflate(R.layout.spinner_layout, null); } TextView textView = (TextView) convertView.findViewById(R.id.calculate_result); textView.setText("" + values[position]); return convertView; } }
要点
在布局文件中增加Spinner为Spinner定义一个布局文件
为Spinner定义一个Adapter,实现数据和视图的映射(MVC)
为Spinner定义事件处理,通常即为OnItemSelectedListener。
ArrayAdapter
使用场景
在上面的例子中,使用的数据源是一个数组,而且只是让每个数字显示在Spinner的layout(spinner_layout.xml)的一个TextView中。对于这种情况,直接使用ArrayAdapter以及android.R.layout.simple_spinner_item就够了。但需要修改values的类型为Integer[]:
private Integer[] values = {1, 3, 5, 7, 9};
适配器部分改为:
spinner = (Spinner) this.findViewById(R.id.spinner); ArrayAdapter<Integer> arrayAdapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, values); arrayAdapter.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(arrayAdapter); //spinner.setAdapter(new MySpinnerAdapter());
simple_spinner_item
android.R.layout.simple_spinner_item是Android平台提供的,定义如下:<?xml version="1.0" encoding="utf-8"?> <!-- /* //device/apps/common/assets/res/any/layout/simple_spinner_item.xml ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:textAlignment="inherit"/>
simple_spinner_dropdown_item
R.layout.simple_spinner_dropdown_item也是Android平台定义的,如下:<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="?android:attr/spinnerDropDownItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="?android:attr/dropdownListPreferredItemHeight" android:ellipsize="marquee" android:textAlignment="inherit"/>
相关文章推荐
- UITableView 取得点击的cell
- 二进制安装mysql的shell脚本
- iOS中一些概念的理解:delegate,block,notification
- HttpClient使用详解
- Android笔记:invalidate()和postInvalidate() 的区别及使用
- android Broadcast学习
- Misson Planner增加mavlink消息并显示在status中
- Linux常用命令
- xml做的layout 布局浏览不了问题解决。
- 从Theano到Lasagne:基于Python的深度学习的框架和库
- C动态内存分配
- JS自定义属性兼容
- 连接MYSQL的时候报错(找不到请求的.net framework data provider。可能没有安装
- 添加商品动画
- 求任意一天是星期几
- 构建安装问题
- String源码
- sql按照in中的顺序进行排序 mysql
- C# 延迟处理类 Lazy
- jquery 禁止用户点击浏览器后退键。