聲明
歡迎轉載,但請保留文章原始出處:)
專註:http://www.focuser.org
本文連結:http://www.focuser.org/?p=270
由於手機螢幕尺寸大小的限制,在有限的空間中展現良好的UI效果使我們追求的,在android中,spinner下拉式功能表在我們的開發過程中使用的次數相當的多,也是我們每個開發人員所必須掌握的技術。
在實現動態添加和刪除spinner菜單中,我們使用到了ArrayList這個集合類,java學的好的兄弟都知道集合類的好處,通過集合類
ArrayList動態進行添加和刪除,在顯示效果上我們採用了自訂的下拉式功能表,另外還將android中的動畫效果也用了上,在實現資料繫結的時候
使用了數組還有在xml檔案中的資料兩種方式,時間關係就不給大家亮出來了,呵呵。
下面是MainActivity
package org.focuser.spinner;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity {
private String []array={“科比”,”詹姆斯”,”奧尼爾”,”喬丹”};
private TextView textview=null;
private Spinner spinner=null;
private EditText edittext=null;
private Button button1=null;
private Button button2=null;
private ArrayAdapter<String> adapter=null;
private List<String> allCou;
Animation animation;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得控制項對象
textview=(TextView)findViewById(R.id.textview);
spinner=(Spinner)findViewById(R.id.spinner);
edittext=(EditText)findViewById(R.id.edittext);
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
allCou=new ArrayList<String>();
for(int i=0;i<array.length;i++)
{
allCou.add(array[i]);
}
button1.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String newarray=edittext.getText().toString();
for(int i=0;i<adapter.getCount();i++)
{
if(newarray.equals(adapter.getItem(i)))
{
return;
}
}
if(!newarray.equals(“”))
{
adapter.add(newarray);
int position=adapter.getPosition(newarray);
spinner.setSelection(position);
edittext.setText(“”);
}
}
});
button2.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(spinner.getSelectedItem().toString()!=null)
{
adapter.remove(spinner.getSelectedItem().toString());
edittext.setText(“”);
if(adapter.getCount()==0)
{
edittext.setText(“”);
}
}
}
});
//設定adapter
adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, allCou);
//adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, array);
// adapter=ArrayAdapter.createFromResource(this, R.array.array, android.R.layout.simple_spinner_item);
//adapter=new ArrayAdapter<String>(this, R.array.array, android.R.layout.simple_spinner_item);
//下面是用了兩種不同的方式顯示下拉式清單1.自訂的樣式 2.利用系統內部的樣式
adapter.setDropDownViewResource(R.layout.dropdown);
//adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
//將spinner空件綁定adapter以傳遞資料
spinner.setAdapter(adapter);
//給spinner控制項添加選擇setOnItemSelectedListener事件
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
//在textview中顯示點擊的選項
//textview.setText(“您選擇的是:”+ array[position]);
textview.setText(“您選擇的是:”+ parent.getItemAtPosition(position));
//將spinner的可見度設定為可見狀態
parent.setVisibility(View.VISIBLE);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
});
//編寫動畫對象,並且擷取自定應的動畫樣式
animation=AnimationUtils.loadAnimation(this, R.anim.animation);
spinner.setOnTouchListener(new Spinner.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
//運行動畫animation
v.startAnimation(animation);
//將spinner的可見度設定為不可見狀態
v.setVisibility(View.INVISIBLE);
return false;
}
});
spinner.setOnFocusChangeListener(new Spinner.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
v.startAnimation(animation);
//將spinner的可見度設定為可見狀態
v.setVisibility(View.VISIBLE);
}
});
}
}
接下來是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/textview”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”@string/hello”
/>
<EditText
android:id=”@+id/edittext”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
/>
<Button
android:id=”@+id/button1″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”增加”
/>
<Button
android:id=”@+id/button2″
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
android:text=”減少”
/>
<Spinner
android:id=”@+id/spinner”
android:prompt=”@string/pormpt_name”
android:layout_width=”fill_parent”
android:layout_height=”wrap_content”
/>
</LinearLayout>
還有自訂的下拉式功能表樣式dropdown.xml檔案
<?xml version=”1.0″ encoding=”utf-8″?>
<TextView
xmlns:android=”http://schemas.android.com/apk/res/android”
android:layout_width=”match_parent”
android:layout_height=”24sp”
android:id=”@+id/textview1″
android:singleLine=”true”
style=”?android:attr/spinnerDropDownItemStyle”
>
</TextView>
哈哈,這就是動態實現spinner下拉式功能表的主要代碼了,高手就過了,跟我水平差不多的可以稍微看看,小白們可要仔細看看學習嘍,嘿嘿!