Android组件 自定义下拉菜单(Spinner)

/res/values/strings.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Spinner下拉菜单</string>
    <string name="spinner_title">请选择城市</string>
    <string-array name="citys">
        <item>北京</item>
        <item>上海</item>
        <item>湖南</item>
        <item>广州</item>
        <item>深圳</item>
    </string-array>
</resources>

/res/layout/main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="#ffffffff">
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="城市:"
        android:textSize="15dp"
        android:textColor="#ff000000"
        android:layout_margin="5dp"/>
    <Spinner 
        android:id="@+id/citySpinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/spinner_title"/>
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="动态添加/删除下拉菜单"
        android:textSize="18dp"
        android:textColor="#ff000000"
        android:layout_marginTop="20dp"/>
    <Spinner 
        android:id="@+id/updateSpinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/spinner_title"/>
    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="新增城市名称:"
        android:textSize="15dp"
        android:textColor="#ff000000"
        android:layout_marginTop="5dp"/>
    <EditText 
        android:id="@+id/newCityEdit"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <LinearLayout 
        android:orientation="horizontal" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content">
        <Button 
            android:id="@+id/btn_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加"
            android:layout_gravity="center_horizontal"/>
        <Button 
            android:id="@+id/btn_del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="删除"
            android:layout_gravity="center_horizontal"/>
    </LinearLayout>
</LinearLayout>

Java代码如下:

package com.demo.android.spinner;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

public class SpinnerActivity extends Activity {
	private Spinner citySpinner;
	private Spinner updateSpinner;
	private EditText newCityEdit;
	private Button addButton;
	private Button delButton;
	private List<String> allCitys;
	private ArrayAdapter<String> cityAdapter;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        processLoad();
        processUpdateSpinner();
    }

	private void processUpdateSpinner() {
		updateSpinner=(Spinner) findViewById(R.id.updateSpinner);
		newCityEdit=(EditText) findViewById(R.id.newCityEdit);
		addButton=(Button) findViewById(R.id.btn_add);
		delButton=(Button) findViewById(R.id.btn_del);
		allCitys=new ArrayList<String>();
		allCitys.add("北京");
		allCitys.add("上海");
		allCitys.add("广州");
		cityAdapter=new ArrayAdapter<String>(SpinnerActivity.this, android.R.layout.simple_spinner_item,allCitys);
		//设置下拉菜单项的布局
		cityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		updateSpinner.setAdapter(cityAdapter);
		
		//新增按钮单击事件
		addButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				//获取输入城市的文本框输入值
				String newCityTxt=newCityEdit.getText().toString().trim();
				if("".equals(newCityTxt)){
					Toast.makeText(SpinnerActivity.this, "城市名称不能为空", Toast.LENGTH_SHORT).show();
					return;
				}
				//判断输入项和当前选中项是否相同
				for(int i=0;i<cityAdapter.getCount();i++){
					if(newCityTxt.equals(cityAdapter.getItem(i))){
						Toast.makeText(SpinnerActivity.this, "该项已经存在", Toast.LENGTH_SHORT).show();
						return;
					}
				}
				cityAdapter.add(newCityTxt);
				int position=cityAdapter.getPosition(newCityTxt);
				updateSpinner.setSelection(position);
				newCityEdit.setText("");
			}
		});
		
		delButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				if(updateSpinner.getSelectedItem()!=null){
					//从Adapter中删除选中的项
					cityAdapter.remove(updateSpinner.getSelectedItem().toString());
					newCityEdit.setText("");
					if(cityAdapter.getCount()==0){
						//如果Adapter没有项则提示用户
						Toast.makeText(SpinnerActivity.this, "没有项可以移除", Toast.LENGTH_SHORT).show();
					}
				}
			}
		});
	}

	private void processLoad() {
		citySpinner=(Spinner) findViewById(R.id.citySpinner);
        //为下拉列表定义适配器
        ArrayAdapter<CharSequence> adapter=ArrayAdapter.createFromResource(this, R.array.citys,android.R.layout.simple_spinner_item);
        //当Spinner按下时在下拉列表里显示的数据视图
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        //为Spinner添加适配器
        citySpinner.setAdapter(adapter);
        //为Spinner添加时间监听
        citySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
				//将当前单机项的坐标和id显示出来
				Toast.makeText(SpinnerActivity.this, "position:"+position+",id:"+id+",value:"+citySpinner.getSelectedItem().toString(), Toast.LENGTH_LONG).show();
			}
			@Override
			public void onNothingSelected(AdapterView<?> arg0) {
				Toast.makeText(SpinnerActivity.this, "unselected", Toast.LENGTH_SHORT).show();
			}
		});
	}
}

效果图如下:

Android组件 自定义下拉菜单(Spinner)_第1张图片


你可能感兴趣的:(android,String,layout,dropdown,button,encoding)