Как изменить цвет фона всплывающего окна?
Я пытаюсь установить цвет фона всплывающего окна spinner, но все, что я пробовал, не работает должным образом.
Это элемент управления spinner:
<Spinner
android:id="@+id/myspinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@null"
android:drawSelectorOnTop="true" />
Когда я нажимаю на него, он показывает всплывающее окно с белым фоном, и я хочу изменить его.
Строка xml, которую я использую для заполнения всплывающего окна:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:paddingBottom="@dimen/padding_medium"
android:layout_marginBottom="@dimen/padding_medium"
android:orientation="vertical">
..........
</RelativeLayout>
и извлекаемый фон list_selector.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Pressed -->
<item
android:state_pressed="true"
android:drawable="@color/green" /> <!-- @drawable/tab_press -->
<!-- Selected -->
<item
android:state_selected="true"
android:drawable="@color/green" /> <!-- @drawable/tab_press -->
</selector>
Добавление состояния по умолчанию к указанному выше xml в порядке, но главный элемент spinner показывает элемент с этим фоновым цветом, и я не хочу этого.
Еще одна вещь, которую я пробовал, - установить цвет фона приложения в черный в styles.xml
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:background">#000000</item>
<item name="android:textColor">#FFFFFF</item>
<item name="android:typeface">sans</item>
</style>
Это также перекрывает всплывающий фон, но имеет нежелательные побочные эффекты. Есть ли способ сделать это простым способом?
Спасибо!
PS: Я использую API-уровень 10 (2.3.3), а атрибут android:popupBackground
не существует.
Ответы
Ответ 1
Ни один из вышеперечисленных решений не работал у меня.
Решение заключалось в том, что в адаптере, переданном на счетчик, была написана другая реализация в методе getDropDownView для отображения другого макета с пользовательскими цветами:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vista = convertView;
// layout for spinner widget
if (vista==null) {
LayoutInflater inflater = actividad.getLayoutInflater();
vista = inflater.inflate(R.layout.fila_colores_spinner, null);
}
return vista;
}
@Override
public View getDropDownView(int position, View convertView,ViewGroup parent) {
View vista = convertView;
//layout for spinner popup
if (vista==null) {
LayoutInflater inflater = actividad.getLayoutInflater();
vista = inflater.inflate(R.layout.fila_colores_spinner_popup, null);
}
return vista;
}
Ответ 2
Использовать android: popupBackground = "@drawable/Yourxmlfile.xml" в объявлении spinner для xml.
Например,
<Spinner
android:id="@+id/spinner3"
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_gravity="center"
android:layout_weight="50"
android:background="@drawable/gradient_spinner"
android:gravity="center"
android:paddingLeft="40dp"
android:popupBackground="@drawable/radialfront"
>
Ответ 3
Он отлично работает!
- объявить макет с текстовым видом с желаемым цветом (и другими атрибутами, которые вы
хотите изменить)
- идентификатор textView должен быть text1 (это означает, что это идентификатор, объявляемый в
по умолчанию в Randroid для
ваш счетчик)
- укажите этот макет в своем адаптере spinner
например:
-
в res\layout\custom_spinner_item.xml поставьте это:
TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#B2B5B7"
android:gravity="center_horizontal"
android:textSize="20dp"
затем дайте этот макет адаптеру:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MyActivity.this,
R.layout.custom_spinner_item, strings);
- затем отнесите этот адаптер к вашему счетчику
Ответ 4
<Spinner
android:id="@+id/myspinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/list_selector"
android:drawSelectorOnTop="true" />
попробуйте это.