Подтвердить что ты не робот

Измените цвет маленького треугольника на spinner в android

enter image description here

Как я могу изменить цвет маленького треугольника в нижнем правом углу прядильника, как показано на изображении? Сейчас он показывает серый цвет по умолчанию. как это

enter image description here

4b9b3361

Ответ 1

Чтобы получить правильные изображения, вы можете перейти на сайт Android Asset Studio и выбрать Android Holo Colors Generator. Это создаст все необходимые вам ресурсы, включая "треугольник". Он также генерирует XML файлы, которые реализуют изменения.


Вот примеры файлов XML:

Пользовательский цвет:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="apptheme_color">#33b5e5</color>
</resources>

Пользовательский стиль Spinner:

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://android-holo-colors.com -->
<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="SpinnerAppTheme" parent="android:Widget.Spinner">
      <item name="android:background">@drawable/apptheme_spinner_background_holo_light</item>
      <item name="android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item>
  </style>

  <style name="SpinnerDropDownItemAppTheme" parent="android:Widget.DropDownItem.Spinner">
      <item name="android:checkMark">@drawable/apptheme_btn_radio_holo_light</item>
  </style>
</resources>

Тема пользовательского приложения:

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://android-holo-colors.com -->
<resources xmlns:android="http://schemas.android.com/apk/res/android">

  <style name="AppTheme" parent="@style/_AppTheme"/>

  <style name="_AppTheme" parent="Theme.AppCompat.Light">

    <item name="android:spinnerStyle">@style/SpinnerAppTheme</item>

    <item name="android:spinnerDropDownItemStyle">@style/SpinnerDropDownItemAppTheme</item>

  </style>

</resources>

Как вы можете видеть, есть также много ссылок, на которые ссылаются эти стили.

Вот тот, который относится к "треугольнику", который вы хотите изменить:

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
          android:drawable="@drawable/apptheme_spinner_disabled_holo_light" />
    <item android:state_pressed="true"
          android:drawable="@drawable/apptheme_spinner_pressed_holo_light" />
    <item android:state_pressed="false" android:state_focused="true"
          android:drawable="@drawable/apptheme_spinner_focused_holo_light" />
    <item android:drawable="@drawable/apptheme_spinner_default_holo_light" />
</selector>

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


Примечание.. Это способ разместить ваше приложение так, чтобы все прядильщики были обновлены до пользовательского стиля.

Если вы ищете быстрый и грязный способ изменить только один счетчик, ознакомьтесь с этой статьей, на которую ссылается Рики в своем комментарии:

Я все равно рекомендую прочитать его, потому что он очень хорошо объясняет этот процесс и поможет вам понять остальную часть моего ответа.

Ответ 2

Лучшее и простое решение:

spinner.getBackground().setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

Другое решение (спасибо Саймону), если вы не хотите менять все Spinners:

Drawable spinnerDrawable = spinner.getBackground().getConstantState().newDrawable();

spinnerDrawable.setColorFilter(getResources().getColor(R.color.red), PorterDuff.Mode.SRC_ATOP);

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    spinner.setBackground(spinnerDrawable);
}else{
    spinner.setBackgroundDrawable(spinnerDrawable);
}

Ответ 3

От Lollipop on вы можете установить оттенок фона на xml,

android:backgroundTint="@color/my_color"

Ответ 4

Просто сделай так, как это. Это поможет вам решить вашу проблему.

<RelativeLayout 
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:background="spinner background image">

        <Spinner       
        android:layout_width="match_parent"
        android:layout_height="match_parent"        
        android:background="@null"/>

        <ImageView 
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:src="arrow image" />

    </RelativeLayout>

или

Просто посмотрел ответ, который я дал для другого запроса: Пользовательский счетчик

Ответ 5

Решение для минимальной версии SDK 14. Вы можете использовать AppCompatSpinner из библиотеки поддержки:

AppCompatSpinner spinner = (AppCompatSpinner) view.findViewById(R.id.my_spinner);
spinner.setSupportBackgroundTintList(ContextCompat.getColorStateList(context, R.color.my_color));

Ответ 6

Вот еще один способ решить эту программную задачу. (Протестировано по API 19 и выше).

Используйте ViewCompat для этого.

ViewCompat.setBackgroundTintList(spinner, ColorStateList.valueOf(your_color));

Использование spinner.setSupportBackgroundTintList вызывает ошибку