2015-07-27 3 views
0

У меня возникла проблема, когда, установив фон в FloatingActionButton в библиотеке Design, любые другие изображения, которые, случается, находятся на экране, принимают тот же цвет, который был установлен на оригинале ,Настройка цвета фона FloatingActionButton с помощью setBackgroundTintList

Слева находится скриншот приложения на устройстве с API 21. Справа на устройстве работает API 22, а FloatingActionButtons имеют одинаковый цвет, несмотря на то, что их цвет устанавливается по-разному для каждого.

API 21API 22

Я испытал это в пустом приложении. Вот XML для activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:paddingLeft="@dimen/activity_horizontal_margin" 
      android:paddingRight="@dimen/activity_horizontal_margin" 
      android:paddingTop="@dimen/activity_vertical_margin" 
      android:paddingBottom="@dimen/activity_vertical_margin" 
      tools:context=".MainActivity"> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab_2" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_margin="16dp" 
     app:borderWidth="0dp" 
     app:elevation="4dp" 
     app:fabSize="normal" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab_1" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="16dp" 
     android:layout_toLeftOf="@id/fab_2" 
     app:borderWidth="0dp" 
     app:elevation="4dp" 
     app:fabSize="normal" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab_3" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="16dp" 
     android:layout_toRightOf="@id/fab_2" 
     app:borderWidth="0dp" 
     app:elevation="4dp" 
     app:fabSize="normal" /> 

</RelativeLayout> 

А вот соответствующий код MainActivity. Кроме этого, никакой другой код не существует в приложении.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Setting colors of first fab 
    FloatingActionButton fab = 
      (FloatingActionButton) findViewById(R.id.fab_1); 
    setFloatingActionButtonColors(fab, 
      getResources().getColor(R.color.blue), 
      getResources().getColor(R.color.blue_dark)); 

    //Setting colors of second fab 
    fab = (FloatingActionButton) findViewById(R.id.fab_2); 
    setFloatingActionButtonColors(fab, 
      getResources().getColor(R.color.red), 
      getResources().getColor(R.color.red_dark)); 

    //Setting colors of third fab 
    fab = (FloatingActionButton) findViewById(R.id.fab_3); 
    setFloatingActionButtonColors(fab, 
      getResources().getColor(R.color.green), 
      getResources().getColor(R.color.green_dark)); 
} 

private void setFloatingActionButtonColors(FloatingActionButton fab, int primaryColor, int rippleColor) { 
    int[][] states = { 
      {android.R.attr.state_enabled}, 
      {android.R.attr.state_pressed}, 
    }; 

    int[] colors = { 
      primaryColor, 
      rippleColor, 
    }; 

    ColorStateList colorStateList = new ColorStateList(states, colors); 
    fab.setBackgroundTintList(colorStateList); 
} 

Наконец, я создал простой проект Android-студия с вышеуказанным кодом, который можно найти here. В проекте есть некоторые дополнительные отклонения, если вы хотите проверить себя.

Неужели кто-нибудь сталкивался с такой проблемой раньше? Это известная ошибка, или есть обходной путь?

+0

Я была аналогичная проблема, но с установкой фрагментов! - Я установил несколько фрагментов в onCreate, но вернул только один из фрагментов для всех позиций viewPager - наконец, один человек сказал, что установить фрагмент в onResume не в одном onCreate! - U может проверить это решение - я не уверен, но, возможно, внесет вклад! – Saeid

ответ

0

Итак, похоже, что это ошибка с Android API 22. Я отправил отчет об ошибке в трекер Android. Билет можно найти here.

В настоящее время у меня нет обходного пути, но я отчитаю, если найду его.

0

Аналогичный вопрос был зарегистрирован Google https://code.google.com/p/android/issues/detail?id=201873

Но после выпуска Android библиотеки поддержки, пересмотр 23.2.1 (март 2016 г.) Эта ошибка будет решена.

FloatingActionButton.setBackgroundTintList (@Nullable ColorStateList Оттенок) больше не изменяет цвет фона

обновление библиотеки поддержки для Android Support Library to 23.2.1