Örnek bir kullanım:
Spinner karanlık temalıdır, ancak açılır menünün açık temalı olmasını istiyorum.
Yanıtlar:
Android M
Android 6.0'da yeni olan Spinner, artık android:popupThemeaçılır pencere (açılır menü) için kullanılan temayı ayarlamanıza izin veren parametreye sahiptir.
Bunu şu şekilde kullanabilirsiniz:
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:popupTheme="@android:style/ThemeOverlay.Material.Light" />
Bu, API seviyesi 23+ çalıştıran cihazlarda çalışır, ancak Android'in daha düşük bir sürümünü çalıştıran cihazlarda çalışmaz.
AppCompat
AppCompat burada devreye giriyor. Spinner uygulaması da destekliyor popupTheme, ancak doğru yapmak için biraz daha karmaşık.
<Spinner
android:layout_height="wrap_content"
android:layout_width="match_parent"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Bundan sonra, AppCompat ile çalışabilmek için Adaptörünüzü güncellemeniz gerekir. Bunu, yeni ThemedSpinnerAdapterarayüzü uygulamasını sağlayarak yaparsınız .
public class MyAdapter extends BaseAdapter implements ThemedSpinnerAdapter {
Theme getDropDownViewTheme() { ... }
void setDropDownViewTheme(Theme theme) { ... }
}
Bu yöntemler, Bağdaştırıcıya herhangi bir açılır görünümü şişirmek için hangi temanın kullanılacağını söyleyebilmek için Spinner tarafından kullanılır. Bunu olabildiğince kolaylaştırmak Helperiçin, adaptörünüze takabileceğiniz bir sınıf verdik .
Bu, adaptörünüzün şunun gibi olduğu anlamına gelir:
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();
}
}
spinner'ın oku için kullandım android:backgroundTint="@color/white"bu API 21'den çalışacak
değer değiştirici görünümü ve açılır görünüm için:
ArrayAdapter<Area> areasAdapter = new ArrayAdapter<Area>(getContext(),R.layout.spinner_item, areas);
areasAdapter.setDropDownViewResource(R.layout.dropdwon_item);
areasSpinner.setAdapter(areasAdapter);
için GetView () adaptör spinner_item.xml kullanır
için getDropDownView () adaptör dropdwon_item.xml kullanır
o zaman özel düzenlerinizi istediğiniz gibi kullanabilirsiniz
Umarım yardımcı olur
Sadece referans için CursorAdapter, uygulamanızı kullanırsanız çok daha kolay olabilir, sadece geçersiz kılın newView(), orada geçersiz kılmaya gerek getDropDownView()yok:
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return mDropDownHelper.getDropDownViewInflater().inflate(R.layout.list_item, parent, false);
}
şunu deneyebilirsiniz: layout klasörünüzde spinner_item.xml oluşturun:
<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" />
sonra bu kodu kullanın:
spinnerAdapter = new ArrayAdapter<String>(R.layout.spinner_item,items);