Một cách sử dụng ví dụ:Làm cách nào để đặt chủ đề khác cho menu thả xuống của Spinner?
Các Spinner là tối theo chủ đề, nhưng tôi muốn thả xuống để được ánh sáng theo chủ đề.
Một cách sử dụng ví dụ:Làm cách nào để đặt chủ đề khác cho menu thả xuống của Spinner?
Các Spinner là tối theo chủ đề, nhưng tôi muốn thả xuống để được ánh sáng theo chủ đề.
Android M
mới trong Android 6.0, Spinner hiện có thông số android:popupTheme
cho phép bạn thiết lập các chủ đề sử dụng cho các cửa sổ bật lên (thả xuống).
Bạn có thể sử dụng nó như vậy:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Điều đó sẽ làm việc trên các thiết bị chạy mức API 23+, nhưng không phải trên các thiết bị chạy một phiên bản thấp hơn của Android.
AppCompat
Đây là nơi AppCompat do thỏa thuận. Thực hiện Spinner của nó cũng hỗ trợ popupTheme
, nhưng đó là tham gia nhiều hơn một chút để có được quyền.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Sau đó, bạn cần cập nhật Bộ điều hợp để có thể làm việc với AppCompat. Bạn làm điều đó bằng cách làm cho nó triển khai giao diện ThemedSpinnerAdapter
mới.
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Các phương pháp này được Spinner sử dụng để có thể nói Adapter sử dụng chủ đề nào để làm tăng bất kỳ chế độ xem thả xuống nào. Để làm điều này dễ dàng nhất có thể, chúng tôi đã cấp cho bạn một lớp học Helper
mà bạn có thể cắm vào bộ điều hợp của mình.
Điều này có nghĩa rằng bộ chuyển đổi của bạn trở nên một cái gì đó như:
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();
}
}
bạn có thể thử này: trong thư mục bố trí của bạn làm cho một 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" />
sau đó sử dụng mã này:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);
Vì vậy, nếu bạn đặt -1 vào lý do này, bạn không bận tâm giải thích tại sao? – Bostone
Tôi đoán bởi vì nó khá rõ ràng nó không trả lời câu hỏi. Câu hỏi đặt ra là đặt chủ đề, tôi không thấy tham chiếu đến chủ đề trong câu trả lời này. Vì vậy, chúng tôi đã rõ ràng, tôi đã không downvote này, những người khác đã đi vào nó đủ rồi. – 2Dee
Chỉ để tham khảo nếu bạn sử dụng CursorAdapter
imp của bạn lementation có thể được dễ dàng hơn nhiều, chỉ cần ghi đè newView()
, không cần phải ghi đè getDropDownView()
có:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
Tuyệt vời! Cảm ơn bạn chris –
Xin chào, tôi không thể tìm thấy ThemedSpinnerAdapter bên trong appcompat-v7. Tôi đang sử dụng phiên bản 22.2.1. Tôi có phải làm bất cứ điều gì khác để nhập khẩu không? –
@DouglasAlves sử dụng mới nhất 23.0.0 – khusrav