2016-03-14 4 views
1

enter image description here Когда я использую RecyclerView для отображения данных списка в своем приложении, я обнаружил, что backgourndcolor RecyclerView всегда был белым. Я устанавливаю backgroudcolor в xml-файле и коде, но он не работает. кто может сказать мне, почему? Большое спасибо!android RecyclerView BackgroundColor

//activity_main.xml 
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    android:orientation="vertical" 
    android:background="@color/colorPrimary"> 
    <!--<include layout="@layout/content_main" />--> 
    <FrameLayout 
     android:id="@+id/fragment_container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"></FrameLayout> 
</LinearLayout> 

//fragment_layout.xml 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorAccent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/list_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorAccent" 
     android:padding="5dp" /> 
</RelativeLayout> 

//item_layout.xml 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="5dp" 
    card_view:cardBackgroundColor="@color/yellow" 
    card_view:cardCornerRadius="1dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="5dip" 
      android:layout_marginTop="5dip" 
      android:gravity="center" 
      android:textColor="@color/text_white" 
      android:textSize="@dimen/list_item_text_size" /> 

     <ImageView 
      android:id="@+id/pic" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/name" 
      android:scaleType="centerCrop" /> 
    </RelativeLayout> 

</android.support.v7.widget.CardView> 


    //gradle file 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "com.union.fmdouban" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
+0

добавить recyclerView в цвет фона настроенной Верстка на красный –

+0

АРЕМ Вы уверены, что вы не добавляете никакого фона во время выполнения ?? –

+0

@vabhi vab Цвет фона материнской платы RecyclerView также не отображался. – TonyChou

ответ

2

я внедрил код ниже, и это показывает вид карты и цвет фона enter image description here

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/appointment_list" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#FFFF00" 
     android:scrollIndicators="none" /> 
</RelativeLayout> 

// макет вашего адаптера

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/card_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="10dp"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="#000" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/name" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="5dip" 
      android:layout_marginTop="5dip" 
      android:gravity="center" 
      android:text="dfgjkdfh" 
      android:textColor="#ffffff" /> 

     <ImageView 
      android:id="@+id/pic" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/name" 
      android:scaleType="centerCrop" /> 
    </RelativeLayout> 

</android.support.v7.widget.CardView> 

Я удалил основную относительную разметку из XML адаптера Попробуйте это и дайте мне знать

// My Gradle выглядит так

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     applicationId "betasoft.com.tryso" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.1.1' 
    compile 'com.android.support:cardview-v7:23.1.0' 
    compile 'com.android.support:design:23.1.1' } 
+0

Большое спасибо. Но это все еще не работает. – TonyChou

+0

@ Rakshit Nawani Я блуждаю, если это часть дизайна материалов. – TonyChou

+0

@TonyChou Я внедрил код и вставил результат, чтобы проверить изображение, код работает нормально –

2

Вы также можете установить цвет фона с условием в RecyclerView. Просто в вашем RecyclerViewAdapter, добавьте следующую строку в методе onBindViewHolder:

mRecyclerViewHolder.mRecyclerViewRowLayout.setBackgroundColor(condition.isRight() ? 0xFFAED581 : 0xFFE57373); 

В случае, если Вам интересно, что аргументы в SetBackgroundColor, вот это:

состояние просто нормальное Логическое состояние.

0xFFAED581 только шестнадцатеричный код цвета код с 0xFF префиксом (Программным, мы должны использовать цветовой код с 0xFF префиксом вместо #).

+0

@ Mihir Joshi Спасибо за ваш ответ. Я хочу изменить backgroudcolor родительского макета элемента списка, а не backgroundcolor элемента. – TonyChou

+0

oops .. Это было мое недоразумение! @TonyChou –

1

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

Уловкой было, по-видимому, сделать все это из списка. Получить ссылку на представление можно, например, путем перезаписи метода onAttached в RecyclerView.Adapter.

... 
private static View mRootView; 

@Override 
public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
    super.onAttachedToRecyclerView(recyclerView); 

    mRootView = recyclerView.getRootView(); 
} 

Затем я создал метод для обновления цвета фона, используя трюк я нашел на этих досках, как этот

public static void updateBackgroundColor() { 
    if (mIsThisDbMaintenance()) { 
     mRootView.getBackground().setColorFilter(Color.parseColor("#AA0000"), PorterDuff.Mode.DARKEN); 
    } else { 
     if (mRootView.getBackground()!=null) 
      mRootView.getBackground().clearColorFilter(); 
    } 
} 

Этот метод является общедоступным статическим, так что я мог бы использовать его с помощью опции меню обработчик в другой деятельности.

screenshot

Смежные вопросы