คำตอบ:
Android M
ใหม่ใน Android 6.0 ตอนนี้ Spinner มีandroid:popupTheme
พารามิเตอร์ที่ให้คุณตั้งค่าธีมที่ใช้สำหรับป๊อปอัป (ดรอปดาวน์)
คุณสามารถใช้มันได้ดังนี้:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
ซึ่งจะใช้ได้กับอุปกรณ์ที่ใช้ API ระดับ 23+ แต่ใช้ไม่ได้กับอุปกรณ์ที่ใช้ Android เวอร์ชันต่ำกว่า
AppCompat
นี่คือสิ่งที่ AppCompat เข้ามาการใช้งาน Spinner ยังรองรับpopupTheme
แต่ก็มีส่วนเกี่ยวข้องมากกว่าเล็กน้อยในการทำให้ถูกต้อง
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
หลังจากนั้นคุณต้องอัปเดต Adapter ของคุณเพื่อให้สามารถทำงานกับ AppCompat ได้ คุณทำได้โดยการใช้ThemedSpinnerAdapter
อินเทอร์เฟซใหม่
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Spinner ใช้วิธีการเหล่านี้เพื่อให้สามารถบอกอะแดปเตอร์ได้ว่าจะใช้ธีมใดในการขยายมุมมองแบบเลื่อนลง เพื่อให้ง่ายที่สุดเราได้ให้Helper
คลาสที่คุณสามารถเสียบเข้ากับอะแดปเตอร์ของคุณได้
ซึ่งหมายความว่าอะแดปเตอร์ของคุณจะมีลักษณะดังนี้:
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
private final ThemedSpinnerAdapter.Helper mDropDownHelper;
public MyAdapter(Context context) {
mDropDownHelper = new ThemedSpinnerAdapter.Helper(context);
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view;
if (convertView == null) {
// Inflate the drop down using the helper's LayoutInflater
LayoutInflater inflater = mDropDownHelper.getDropDownViewInflater();
view = inflater.inflate(R.layout.my_dropdown, parent, false);
}
// ...
return view;
}
@Override
public void setDropDownViewTheme(Theme theme) {
mDropDownHelper.setDropDownViewTheme(theme);
}
@Override
public Theme getDropDownViewTheme() {
return mDropDownHelper.getDropDownViewTheme();
}
}
สำหรับลูกศรของสปินเนอร์ที่ฉันใช้android:backgroundTint="@color/white"
สิ่งนี้จะใช้ได้กับ API 21
สำหรับมุมมองสปินเนอร์และมุมมองแบบเลื่อนลง:
ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);
areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);
สำหรับgetView ()อะแด็ปเตอร์จะใช้ spinner_item.xml
สำหรับgetDropDownView ()อะแด็ปเตอร์จะใช้ dropdwon_item.xml
จากนั้นคุณสามารถใช้เลย์เอาต์ที่กำหนดเองได้ตามต้องการ
หวังว่ามันจะช่วยได้
สำหรับการอ้างอิงหากคุณใช้การCursorAdapter
ติดตั้งของคุณสามารถทำได้ง่ายกว่ามากเพียงแค่ลบล้างnewView()
ไม่จำเป็นต้องแทนที่ที่getDropDownView()
นั่น:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
คุณสามารถลองสิ่งนี้: ในโฟลเดอร์เลย์เอาต์ของคุณให้สร้าง spinner_item.xml:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:padding="10dp"
android:background = "#ffffff"
android:textColor="@color/primary_text"
android:textSize="@dimen/text_size_normal" />
จากนั้นใช้รหัสนี้:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);