Spinner의 드롭 다운에 다른 테마를 설정하려면 어떻게해야합니까?
사용 예 :
스피너는 어두운 테마이지만 드롭 다운은 밝은 테마로하고 싶습니다.
안드로이드 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" />
그런 다음 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
구현 을 사용하는 것이 훨씬 쉬울 수 있습니다. 그냥 override 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);
참고 URL : https://stackoverflow.com/questions/32066277/how-do-i-set-a-different-theme-for-a-spinners-dropdown
'programing' 카테고리의 다른 글
이메일 제목의 애니메이션 아이콘 (0) | 2020.08.16 |
---|---|
파이썬 내에서 간단한“chmod + x”를 어떻게 수행합니까? (0) | 2020.08.16 |
.gitignore 파일, xcode 프로젝트에서 어디에 넣어야합니까? (0) | 2020.08.16 |
DataFrame에서 문자열을 부동 소수점으로 변환 (0) | 2020.08.16 |
현재 실행중인 tmux 버전을 어떻게 알 수 있습니까? (0) | 2020.08.16 |