Android中动态添加╱删除的Spinner菜单 — ArrayList与Widget的依赖性
例子效果图 :
实现步骤 :
第一步 :建 立 Android 工程: SpinnerDemo 。
第二步 :编写 Activity 的子类别: SpinnerDemo ,其程序代码如下:
package com.a3gs.spinner;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
public class SpinnerDemo extends Activity {
private TextView myTV;
private Spinner mySp;
private EditText myET;
private Button addBtn, delBtn;
private final String[] items = {" 北京市 ", " 上海市 ", " 天津市 ", " 福州市 "} ;
private ArrayAdapter<String> adapter;
private List<String> allItems;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myTV = (TextView) findViewById(R.id.myTV);
myET = (EditText) findViewById(R.id.myET);
addBtn = (Button) findViewById(R.id.addBtn);
delBtn = (Button) findViewById(R.id.delBtn);
mySp = (Spinner) findViewById(R.id.mySpinner);
mySp.setVisibility(View.VISIBLE);
allItems = new ArrayList<String>();
for(int i=0; i < items.length; i++){
allItems.add(items[i]);
}
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allItems);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySp.setAdapter(adapter);
mySp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
// TODO Auto-generated method stub
myTV.setText(" 您选择的是: " + mySp.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
addBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String ETText = myET.getText().toString();
int len = adapter.getCount();
// 检查所添加的是否已经存在
for(int i = 0; i < len; i++){
if(ETText.equals(adapter.getItem(i))){
return;
}
}
if(!ETText.equals("")){
adapter.add(ETText);
int position = adapter.getPosition(ETText);
mySp.setSelection(position);
myET.setText("");
}
}
});
delBtn.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(mySp.getSelectedItem() != null) {
adapter.remove(mySp.getSelectedItem().toString());
myET.setText("");
}
if(adapter.getCount() == 0){
myET.setText("");
}
}
});
}
}
第三步 :修改 res/layout/main.xml ,其代码如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
>
< TextView
android:id = "@+id/myTV"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:text = "@string/hello"
/>
< EditText
android:id = "@+id/myET"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
/>
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
android:orientation = "horizontal"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
>
< Button
android:id = "@+id/addBtn"
android:layout_width = "160sp"
android:layout_height = "wrap_content"
android:text = "@string/btn_text1"
/>
< Button
android:id = "@+id/delBtn"
android:layout_width = "160sp"
android:layout_height = "wrap_content"
android:text = "@string/btn_text2"
/>
</ LinearLayout >
< Spinner
android:id = "@+id/mySpinner"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
/>
</ LinearLayout >
第四步 :修改 res/layout/spinner_dropdown.xml ,其代码如下:
<? xml version = "1.0" encoding = "utf-8" ?>
< TextView
xmlns:android = "http://schemas.android.com/apk/res/android"
android:id = "@+id/text"
android:layout_width = "wrap_content"
android:layout_height = "25sp"
android:singleLine = "true"
style = "?android:attr/spinnerDropDownItemStyle"
/>
扩展学习
setDropDownViewResource 主要是设置 User 点击 Spinner 后出现的下拉菜单样式,除了前一个范例使用自设方式改变 TextView 内容之外, android 亦提供两种基本的样式:
android.R.layout.simple_spinner_item : TextView 的下拉菜单。
android.R.layout.simple_spinner_dropdown_item :除了有 TextView ,右边有 radio 的下拉菜单。
查看 Android 源代码中的 simple_spinner_drop, , down_item.xml ,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:singleLine="true"
style="?android:attr/spinnerDropDownItemStyle"
/>
以下为自定义修改后,适用于 spinner 的 Layout :
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="fill_parent"
android:layout_height="12sp"
android:singleLine="true"
style="?android:attr/spinnerDropDownItemStyle"
android:textSize="10sp"
/>
更多相关文章
- RadioButton和CheckBox自定义按钮图片的样式
- Android 利用Sharp样式设置文本框EditText圆角形状
- Android之菜单总结
- TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
- SlidingMenu和ActionBarSherlock结合做出出色的App布局,Facebook
- [android]在上下文菜单的选中事件中获取列表选中的元素
- android listview custom style 自定义样式
- Android修改字体样式