[Android Studio]下拉式選單(Spinner)筆記二--dialog模式
下拉式選單Spinner元件在是一組設定好的資料選項,提供標準的下拉式選單介面,供使用者選取。有2種顯示模式,1種是dropdown(下拉式);另一種是dialog(對話式),預設是dropdown,筆記二使用dialog。部分資料請先參考[Android Studio]下拉式選單(Spinner)筆記一@ KOEI的旅行。
新增Spinner,並顯示選取的選項,步驟如下:
步驟1:新增Spinner
先在Android Studio新增project(點選[File>New>New Project),種類選擇[Empty Activity],完成新增project(預設為顯示"Hello World!")。
新增Spinner: 在activity_main.xml 選擇以[Design]顯示,Palette點選[Containers],再點選[Spinner],按滑鼠右鍵,點選[Add to Design],完成新增(預設id為spinner)。
為方便使用TextView,把TextView的id設為"hello",在activity_main.xml的<TextView加入android:id="@+id/hello"。
(同[Android Studio]下拉式選單(Spinner)筆記一@ KOEI的旅行)
步驟2:設定資料選項
編輯src/main/res/values/strings.xml,設定Spinner的資料選項,範例是新增行星名稱。
新增加選項標頭名稱,例如:<string name="planet_prompt">Choose a planet</string>。
編輯後strings.xml如下
<resources>
<string name="app_name">My Application</string>
<string name="planet_prompt">Choose a planet</string>
<string-array name="planets_array">
<item>Mercury</item>
<item>Venus</item>
<item>Earth</item>
<item>Mars</item>
<item>Jupiter</item>
<item>Saturn</item>
<item>Uranus</item>
<item>Neptune</item>
</string-array>
</resources>
|
步驟3:設定Spinner成dialog模式
設定android:spinnerMode="dialog",對話框模式。
設定對話框標頭android:prompt,因為prompt的參數是int,所以要傳入字串的ID,使用strings.xml中已設定好的字串,不能直接寫字串;prompt在dropdown模式沒有作用。
Spinner 修改後activity_main.xml內容如下:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Spinner
android:id="@+id/spinner"
android:spinnerMode="dialog"
android:prompt="@string/planet_prompt"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</androidx.constraintlayout.widget.ConstraintLayout>
|
步驟4:設定SpinnerAdapter
步驟5:設定AdapterView.OnItemSelectedListener
同[Android Studio]下拉式選單(Spinner)筆記一@ KOEI的旅行,不重複了。
筆記一使用adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item),可改成使用有選紐的adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
執行後選項對話框內容:
完整MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView tvhello;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this,
R.array.planets_array,
android.R.layout.simple_spinner_item);
//adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
spinner.setAdapter(adapter);
spinner.setSelection(2, false);
spinner.setOnItemSelectedListener(spnOnItemSelected);
tvhello= (TextView) findViewById(R.id.hello);
tvhello.setText("選項:"+spinner.getSelectedItem().toString());
}
private AdapterView.OnItemSelectedListener spnOnItemSelected
= new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
String sPos=String.valueOf(pos);
String sInfo=parent.getItemAtPosition(pos).toString();
//String sInfo=parent.getSelectedItem().toString();
tvhello.setText("選項"+sPos+":"+sInfo);
}
public void onNothingSelected(AdapterView<?> parent) {
//
}
};
}
|
進階要改變Spinner字體大小顏色請參考[Android Studio]下拉式選單(Spinner)筆記三-設定字體大小顏色@ KOEI的旅行。
