Intereting Posts
MPAndroidChart PieChart не отображается при использовании внутри ScrollView Скопировать тему из другого приложения Каков план возврата устройств без сервисов Google Play ImageView только с двумя углами? Изменение отображаемого имени устройства Android в Eclipse FTPClient повреждает изображения при загрузке на ftp-сервер на Android? Android: нить приостанавливается с перерывами Как сохранить координаты GeoFire вместе с другими элементами в базе данных Firebase? Если Asynctask работает, активность будет активна даже после метода finish ()? Поставщик контента и прямой доступ к базе данных (управление транзакциями) Соотношение SVG Preserve Aspect в Android Выключение питания или перезагрузка устройства Android с помощью кода / программы? Как извлечь ссылочную ссылку на атрибуты Панель инструментов Android: как вернуться к предыдущей деятельности, если нажата стрелка назад Резервное копирование Adb не работает

Прямоугольный предмет с нажатым синим фоном

Я использую spinner для отображения выпадающего списка. Я хочу, чтобы элементы в списке имели закругленные углы. Поэтому я использую 9-патч, содержащий изображение с закругленными углами (прозрачное на внешней стороне углов) для фона элементов представлений и селектор для отображения другого цветного 9-патча при нажатии.

Проблема. Когда я нажимаю элементы в списке счетчика, я вижу синий угол в углах, где 9-патч прозрачен.

Кажется, я не могу избавиться от этого синего фона, который появляется при нажатии элементов. Если я удалю 9-патчей и любые настройки в прядильщике, я вижу, что представления элементов в списке по умолчанию серые и синие при нажатии.

Я также попробовал не использовать 9 патчей в качестве фона, а только селектор цвета, и установить, чтобы нажатый цвет в селекторе был прозрачным. Затем, когда я нажимаю элемент, он не прозрачный, а синий. Я думаю, что представление в списке действительно прозрачно, но по-прежнему синий цвет в фоновом режиме при нажатии …

Я использую пользовательский SpinnerAdapter для создания представления элементов. Вот упрощенный код:

private class MySpinnerAdapter implements SpinnerAdapter { @Override public View getDropDownView(int i, View recycledView, ViewGroup viewGroup) { View view = new View(context); view.setBackground(context.getResources().getDrawable(R.drawable.testspinner)); view.setMinimumHeight(100); return (View) view; } } 

Селектор, используемый для фона. Здесь только с цветом, и без 9-патча. Прессованный цвет должен быть прозрачным:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@android:color/transparent" /> <item android:drawable="@android:color/holo_purple" /> </selector> 

Я установил пользовательский адаптер на счетчике:

  spinner.setAdapter(new MySpinnerAdapter()); 

И прядильщик извлекается из XML-макета:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Spinner android:id="@+id/myDropDown" android:spinnerMode="dropdown" android:layout_width="match_parent" android:layout_height="wrap_content" android:dropDownWidth="match_parent"/> </LinearLayout> 

Я попробовал установить много разных атрибутов на Spinner и попробовал некоторые атрибуты стиля, но я не мог избавиться от этого синего фона …

Проблема. Когда я нажимаю элементы в списке счетчика, я вижу синий угол в углах, где 9-патч прозрачен.

Я думаю, что blue background исходит из атрибута android:selectableItemBackground . Чтобы изменить этот атрибут, добавьте следующее в тему вашего приложения в styles.xml :

 <item name="android:selectableItemBackground">@drawable/whicheverDrawable</item> 

Для справки: по умолчанию selectableItemBackground указывает на следующее выведенное в API 19 (для Theme.Holo). Вы должны определить, whicheverDrawable можно whicheverDrawable аналогичным образом:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. --> <item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" /> <item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_dark" /> <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" /> <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/list_selector_background_transition_holo_dark" /> <item android:state_focused="true" android:drawable="@drawable/list_focused_holo" /> <item android:drawable="@color/transparent" /> </selector> 

В вашем случае вы можете определить закругленные углы для другого drawable, который используется для statePressed в whicheverDrawable .

Спасибо @Vikram за указание использования стилей.

Однако после исследований выясняется, что фон прессованного элемента в Spinner не исходит из атрибута, который вы предложили, а из android:listSelector . Поэтому я мог бы решить проблему следующим образом:

Определите новый стиль в styles.xml:

 <style name="MyListView"> <item name="android:listSelector">@android:color/transparent</item> </style> 

Определите новую тему в topic.xml:

 <style name="MyTheme" parent="@android:style/Theme.NoTitleBar.Fullscreen"> <item name="android:dropDownListViewStyle">@style/MyListView</item> </style> 

Примените тему к моей деятельности в AndroidManifest.xml:

 <activity android:name=".MyActivity" ... android:theme="@style/MyTheme">