iT邦幫忙

2024 iThome 鐵人賽

DAY 15
0

今天來介紹的是下拉式選單Spinner元件,Spinner是一組設定好的資料選項,提供標準的下拉式選單介面,供使用者選擇1個選項。


Spinner

  • Palette搜尋Spinner,再移動Spinner到白色區域
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454AoKTjxloMu.png

  • .xml 介面
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454lKMNDGYQqF.png

  • Spinner記得新增id
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454Wt5QWEAFRX.png

(完整程式碼)

<?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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Spinner
        android:id="@+id/main_country_sp"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/guideline3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline2"
        app:layout_constraintVertical_bias="0.0" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.1" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.15" />

    <TextView
        android:id="@+id/main_theme_tw"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#677ACD"
        android:gravity="center"
        android:text="國家"
        android:textColor="#DDCCCC"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toTopOf="@+id/main_country_sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
  • MainActivity
  1. 產生ArrayAdapter,設定資料選項string array及預設spinner的layout
  2. 指定Spinner展開時,選項清單樣式,adapter.setDropDownViewResource
  3. 設定好的ArrayAdapter,指定給要操作spinner
public class MainActivity extends AppCompatActivity {
    //宣告
    private Spinner countrySpinner;

    //字串
    final static String[] country = {"台灣","美國","日本","韓國","馬來西亞","新加坡","泰國","越南","菲律賓","印尼"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

        //綁定
        countrySpinner = findViewById(R.id.main_country_sp);

        //Spinner
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item,country);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
        countrySpinner.setAdapter(adapter);
    }
}
  • 執行畫面
    (剛執行)
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454Gm1A3M7HVk.png
    (點擊Spinner)
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454IsJzrjLTVH.png

客製化Spinner

一開始我們的Spinner特別單調,而且我們要去設定別的背景顏色時會發現,箭頭會消失不見。
https://ithelp.ithome.com.tw/upload/images/20240923/20168454F8mJ8BPAbY.png

因此客製化可以解決這件事。
Spinner客製化比較複雜一點,跟著我一步一步慢慢做~

  • 我們需要在drawable,移到New點擊Drawable Resource File,命名好點擊OK
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454cRSkJ3jUVK.png

  • 這裡需要新增兩個
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454tuebyUySGf.png

  • 我們還需要在layout,移到New點擊Layout Resource File,命名好點擊OK
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454SwtNu0CXBe.png

  • 新增完成
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454x3gdM1Uair.png

程式碼介紹

  • (Drawable)spinner_back.xml
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454iS0HfmhTHC.png
    (注意! 我們需要去插入箭頭圖片)
    右邊可以看到目前設定的樣式預覽狀態
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <stroke
                android:width="1dp"
                android:color="#3C6060"
                />
            <!--            邊框線顏色-->
            <corners android:radius="5dp" />
            <!--            圓角度數-->
            <solid android:color="#9CF3F3" >
                <!--                背景顏色-->
            </solid>
            <padding android:right="5dp" />
            <!--            邊距-->
            <size
                android:width="300dp"
                android:height="30dp"
                />
        </shape>
    </item>
    <!--    第二組item 插入圖片(spinner箭頭)-->
    <item>
        <bitmap
            android:gravity="end"
            android:src="@drawable/down"
            android:antialias="true"
            />
    </item>
</layer-list>
  • (Drawable)spinner_dropdown.xml
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454aFTsNnv5Ms.png
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <!--設定邊角弧度-->
    <corners
        android:radius="1dp"
        />
    <stroke
        android:width="0.2dp"
        android:color="#000000"
        />

    <!--漸層顏色-->
    <gradient
        android:angle="45"
        android:centerX="90%"
        android:startColor="#C465A6F3"
        android:endColor="#C47168F5"
        android:type="linear"
        />
    <padding
        android:left="0dp"
        android:top="0dp"
        android:right="0dp"
        android:bottom="0dp"
        />

</shape>
  • (Layout )spinner_dropdown_shape.xml
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454tdDLAcKHFk.png
    這裡面需要使用android:background="@drawable/spinner_dropdown"
<?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="match_parent"
    android:gravity="center|left"
    android:textColor="#FFFFFF"
    android:background="@drawable/spinner_dropdown">
</TextView>
  • activity_main.xml
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454LcfL67Njwq.png

  • MainActivity需更改反白區域
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454EFT5QMs26L.png

這樣就完成啦!

  • 執行畫面
    (剛開始)
    https://ithelp.ithome.com.tw/upload/images/20240923/201684544SEpyOkSH2.png
    (點擊Spinner)
    https://ithelp.ithome.com.tw/upload/images/20240923/20168454T76wCqHID0.png

上一篇
元件篇-seekBar與客製化seekBar Day14
下一篇
元件篇-Switch與CheckBox Day16
系列文
Android 元件總動員 - 運用與實踐元件指南30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言