প্রোগ্রামভিট করে কার্ডভিউয়ের পটভূমির রঙ পরিবর্তন করুন


130

CardView একটি বৈশিষ্ট্য রয়েছে card_view:cardBackgroundColorপটভূমির রঙ নির্ধারণ করতে। এই গুণাবলী ভাল কাজ করে।

একই সাথে রঙ পরিবর্তনশীল কোনও পদ্ধতি নেই।

আমি ঠিক এর মতো সমাধানগুলি চেষ্টা করেছি:

mCardView.setBackgroundColor(...);

বা কার্ডভিউয়ের ভিতরে একটি লেআউট ব্যবহার করা

   <android.support.v7.widget.CardView>
        <LinearLayout
            android:id="@+id/inside_layout">
    </android.support.v7.widget.CardView>  

 View insideLayout = mCardView.findViewById(R.id.inside_layout);
 cardLayout.setBackgroundColor(XXXX);

এই সমাধানগুলি কাজ করে না কারণ কার্ডের একটি কার্ডকার্নারিয়াস রয়েছে।

উত্তর:


266

আপনি যা সন্ধান করছেন তা হ'ল:

CardView card = ...
card.setCardBackgroundColor(color);

এক্সএমএলে

 card_view:cardBackgroundColor="@android:color/white"

আপডেট: এক্সএমএলে

app:cardBackgroundColor="@android:color/white"

7
এটি সমর্থন lib একটি নতুন পদ্ধতি বলে মনে হচ্ছে। আমি গত মাসে এটি দেখিনি, এটি কোনও আপডেট হতে পারে
গ্যাব্রিয়েল মারিওটি

5
এটি এক্সএমএলে কনফিগার করার card_view:cardBackgroundColor="@android:color/white"
উপায়টি যুক্ত

3
card_viewনেমস্পেস ব্যবহার করা আমার পক্ষে কাজ করে না, তার appপরিবর্তে আমাকে ব্যবহার করতে হবে।
rsicarelli

1
@rsicarelli সমস্ত আপনার নামকরণের উপর নির্ভর করে:xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:card_view="http://schemas.android.com/apk/res-auto"
ব্রায়ান ব্রাইস

1
আমি কীভাবে কার্ডের ব্যাকগ্রাউন্ডে গ্রেডিয়েন্ট ড্রয়যোগ্য সেট করতে পারি?
ঘোদসারা ভৌমিক

115

সম্পত্তি কার্ড_ভিউ: কার্ডব্যাকগ্রাউন্ড কালার ব্যবহার করুন:

<android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    android:layout_gravity="center"
    card_view:cardCornerRadius="4dp"
    android:layout_margin="10dp"
    card_view:cardBackgroundColor="#fff"
    >

ওপি তার প্রশ্নের প্রথম লাইনে সেই সম্পত্তি সম্পর্কে আমাদের জানায়, তিনি বলেছিলেন যে তিনি এটি "ডায়নামিকালি" অর্জন করতে চান।
স্ট্রামিন

25

আপনি এটি এক্সএমএলে ব্যবহার করতে পারেন

card_view:cardBackgroundColor="@android:color/white"

বা এটি জাভাতে

cardView.setCardBackgroundColor(Color.WHITE);

19

আমি প্রোগ্রামটিমেটিক সেট করতে এই কোডটি ব্যবহার করেছি:

card.setCardBackgroundColor(color);

অথবা এক্সএমএলে আপনি এই কোডটি ব্যবহার করতে পারেন:

card_view:cardBackgroundColor="@android:color/white"

এই উত্তরটি আরও ব্যবহারযোগ্য কারণ স্ট্যাটিক (এক্সএমএল) এবং প্রোগ্রামেটিক ওয়ে (জেভিএ) কুদোস রয়েছে।
chntgomez

9

পদ্ধতিতে এটি যেভাবে সেট করা হয়েছে initializeসেগুলি সুরক্ষিত RoundRectDrawableবর্গ ব্যবহার করে , যেমন:

RoundRectDrawable backgroundDrawable = new RoundRectDrawable(backgroundColor, cardView.getRadius());
cardView.setBackgroundDrawable(backgroundDrawable);

এটি সুন্দর নয়, তবে আপনি এই শ্রেণিটি বাড়িয়ে দিতে পারেন। কিছুটা এইরকম:

package android.support.v7.widget;

public class MyRoundRectDrawable extends RoundRectDrawable {

    public MyRoundRectDrawable(int backgroundColor, float radius) {
        super(backgroundColor, radius);
    }

}

তারপর:

final MyRoundRectDrawable backgroundDrawable = new MyRoundRectDrawable(bgColor,
            mCardView.getRadius());
mCardView.setBackgroundDrawable(backgroundDrawable);

সম্পাদনা

এটি <এপ্রিল 21-এ আপনাকে ছায়া দেবে না, তাই আপনাকেও এটি করতে হবে RoundRectDrawableWithShadow

এটি করার আরও ভাল উপায় বলে মনে হয় না।


2
হ্যাকিংয়ের জন্য +1 এবং আমি সম্মত। এর চেয়ে ভাল সমাধান আমি খুঁজে পাচ্ছি না। যাইহোক আমি অফিসিয়াল এপিআই-তে আলাদা কিছু আশা করি।
গ্যাব্রিয়েল মারিয়োটি

এই শ্রেণিটি (রাউন্ডারেক্টড্রেইটযোগ্যযোগ্য শ্যাডো বা রাউন্ডরেক্টড্র্যাবেবল) অ্যাক্সেসযোগ্য? আমি এটি মনে করি না
নেপোলিয়ান

8

এখানে কিছুটা দেরি হয়ে গেছে এবং বিষয়টি আংশিকভাবে বন্ধ করার কারণে এটি প্রোগ্রামিকভাবে নয় তবে উইজেটগুলির জন্য শৈলীগুলি সেটআপ করা আমার পক্ষে সেরা মনে হয়েছে এবং আপনি CardViewএটি কেবল একটি শৈলী তৈরি করতে পারেন এটি আপনার এক্সএমএল ক্লিনার রাখবে ...

<style name="MyCardViewStyle" parent="CardView">
    <!-- Card background color -->
    <item name="cardBackgroundColor">@android:color/white</item>
    <!-- Ripple for API 21 of android, and regular selector on older -->
    <item name="android:foreground">?android:selectableItemBackground</item>
    <!-- Resting Elevation from Material guidelines -->
    <item name="cardElevation">2dp</item>
    <!-- Add corner Radius -->
    <item name="cardCornerRadius">2dp</item>
    <item name="android:clickable">true</item>
    <item name="android:layout_margin">8dp</item>
</style>

এই ব্যবহার করা হয় android.support.v7.widget.CardView

এবং তারপরে বিন্যাস ফাইলটিতে শৈলীটি সেট করা:

 <?xml version="1.0" encoding="utf-8"?>
 <android.support.v7.widget.CardView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="wrap_content"
     android:layout_width="match_parent"
     style="@style/MyCardViewStyle">
    <!-- Other fields-->
 </android.support.v7.widget.CardView>

গ্রেডেলের মাধ্যমে অ্যান্ড্রয়েড স্টুডিও ব্যবহার করে আপনার অ্যাপকম্প্যাট-ভি 7 লাইব্রেরি আমদানি করতে হবে:

 dependencies {
     compile 'com.android.support:appcompat-v7:22.2.0'
 }

আশাকরি এটা সাহায্য করবে. শুভ কোডিং


1
এক্সএমএল স্টাইলিংটি নির্দেশ করার জন্য ধন্যবাদ সর্বদা এটির সাথে লড়াই করে যাচ্ছি। থিমস.এক্সএমএলে শৈলীর সংজ্ঞা দেওয়ার কোনও উপায় নেই? তারপরে আপনাকে প্রতিটি কার্ডভিউয়ের জন্য স্টাইল সেট করতে হবে না।
10'16 এ ঘোরাঘুরি

এটি দারুণ দুর্দান্ত - আমি লেআউটটির মাধ্যমে নির্বাচকদের কীভাবে প্রচার করতে পারি তা বের করার চেষ্টা করার সাথে লড়াই করে যাচ্ছিলাম - এবং এটি API21 এর পূর্ববর্তী সময়ে কাজ করছিল না। রিপলটি এপিআই 2121-র সূক্ষ্ম পোস্টে কাজ করছিল your তবে আপনার থিমের পন্থাটি আমি প্রথমবার যখনই সামগ্রীগুলি জুড়ে ক্লিক করার জন্য কার্ডভিউটি সঠিক চেহারা দিতে পেরেছি।
জিম আন্দ্রেয়াস

ওপি তার প্রশ্নের প্রথম লাইনে সেই সম্পত্তি সম্পর্কে আমাদের জানায়, তিনি বলেছিলেন যে তিনি এটি "ডায়নামিকালি" অর্জন করতে চান।
স্ট্র্যামিন

7

আমার একটি রিসেলারভিউতে কার্ডভিউ ফর্ম্যাট করার ক্ষেত্রে একই রকম সমস্যা ছিল।

আমি এই সহজ সমাধানটি কাজ করেছিলাম, এটি সর্বোত্তম সমাধান কিনা তা নিশ্চিত নই, তবে এটি আমার পক্ষে কাজ করেছিল।

mv_cardView.getBackground().setTint(Color.BLUE)

এটি কার্ডভিউর ব্যাকগ্রাউন্ডের ড্রয়যোগ্য এবং এটি টিপস দেয়।



3

ইন জাভা

cardView.setCardBackgroundColor(0xFFFEFEFE);

অ্যান্ড্রয়েড এআরজিবি রঙ ব্যবহার করে। আপনি এটির মতো ব্যবহার করতে পারেন (0xFF + আরজিবি রঙ) - হার্ড-কোডেড রঙ।


2

প্রোগ্রামগতভাবে কার্ডভিউ তৈরি করার চেষ্টা করার সময় আমি একই সমস্যাটি দেখতে পেয়েছি, কি আশ্চর্যের বিষয় হ'ল ডকটি https://developer.android.com/references/android/support/v7/widget/CardView.html#setCardBackgroundColor%28int % 29 , গুগল ছেলেরা কার্ড ভিউটির পটভূমির রঙ পরিবর্তন করতে এপিআই প্রকাশ করেছে তবে আশ্চর্যজনকভাবে আমি সমর্থন লাইব্রেরিতে এটিতে অ্যাক্সেস পেতে সফল হই নি, তাই আমার পক্ষে এখানে কাজ করেছে:

CardViewBuilder.java

    mBaseLayout = new FrameLayout(context);
    // FrameLayout Params
    FrameLayout.LayoutParams baseLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    mBaseLayout.setLayoutParams(baseLayoutParams);

    // Create the card view.
    mCardview = new CardView(context);
    mCardview.setCardElevation(4f);
    mCardview.setRadius(8f);
    mCardview.setPreventCornerOverlap(true); // The default value for that attribute is by default TRUE, but i reset it to true to make it clear for you guys
    CardView.LayoutParams cardLayoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    cardLayoutParams.setMargins(12, 0, 12, 0);
    mCardview.setLayoutParams(cardLayoutParams);
    // Add the card view to the BaseLayout
    mBaseLayout.addView(mCardview);

    // Create a child view for the cardView that match it's parent size both vertically and horizontally
    // Here i create a horizontal linearlayout, you can instantiate the view of your choice
    mFilterContainer = new LinearLayout(context);
    mFilterContainer.setOrientation(LinearLayout.HORIZONTAL);
    mFilterContainer.setPadding(8, 8, 8, 8);
    mFilterContainer.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER));

    // And here is the magic to get everything working
    // I create a background drawable for this view that have the required background color
    // and match the rounded radius of the cardview to have it fit in.
    mFilterContainer.setBackgroundResource(R.drawable.filter_container_background);

    // Add the horizontal linearlayout to the cardview.
    mCardview.addView(mFilterContainer);

filter_container_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<corners android:radius="8dp"/>
<solid android:color="@android:color/white"/>

এটি করে আমি কার্ডভিউয়ের ছায়া এবং বৃত্তাকার কোণগুলিতে রাখতে সফল।


আপনি এইভাবে আপনার কার্ডভিউতে একটি এলএল যুক্ত করছেন এবং অবশ্যই আপনি এটি করতে পারেন, তবে এটি মূল প্রশ্নের উত্তর দেয় না।
গ্যাব্রিয়েল মেরিওটি

অনুরোধটি ছিল কার্ডের ব্যাকগ্রাউন্ডের রঙটি পরিবর্তনশীলভাবে পরিবর্তন করার বিষয়ে, এবং আমি মনে করি অভ্যন্তরীণ বিন্যাসের পটভূমির রঙ পরিবর্তন করে এই পদ্ধতিটি এটি খুব সহজভাবে সম্পাদন করে। বা আমি কিছু মিস করছি
মার্শাল কোনভি

2

জ্যামারিনে আমিও একই সমস্যা পেয়েছি ndআন্ড্রয়েড - ভিএস (2017)

যে সমাধানটি আমার পক্ষে কাজ করেছে:

সমাধান

আপনার এক্সএমএল ফাইলটিতে যুক্ত করুন:

 xmlns:card_view="http://schemas.android.com/apk/res-auto"

এবং আপনার android.support.v7.widget.CardViewউপাদান এই স্বীকৃতি যোগ করুন:

card_view:cardBackgroundColor="#ffb4b4"

(বড়)

<android.support.v7.widget.CardView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:layout_margin="12dp"
    card_view:cardCornerRadius="4dp"
    card_view:cardElevation="1dp"
    card_view:cardPreventCornerOverlap="false"
    card_view:cardBackgroundColor="#ffb4b4" />

আপনি যোগ করতে পারেন cardElevationএবং cardElevation

আপনি যদি cardview প্রোগ্রামগতভাবে সম্পাদনা করতে চান তবে আপনাকে কেবল এই কোডটি ব্যবহার করতে হবে: (সি #) এর জন্য

    cvBianca = FindViewById<Android.Support.V7.Widget.CardView>(Resource.Id.cv_bianca);
    cvBianca.Elevation = 14;
    cvBianca.Radius = 14;
    cvBianca.PreventCornerOverlap = true;
    cvBianca.SetCardBackgroundColor(Color.Red);

এবং এখন আপনি পটভূমির রঙ পরিবর্তন করতে পারেন প্রোগ্রামেটিক্যালি হারিয়ে সীমান্তের কোণার ব্যাসার্ধ এবং উচ্চতা ছাড়া।



1

এটি কোটলিনে খুব সহজ। কার্ড ভিউয়ের রঙ পরিবর্তন করতে কালারস্টেটলিস্ট ব্যবহার করুন

   var color = R.color.green;
   cardView.setCardBackgroundColor(context.colorList(color));

কালারস্টেটলিস্টের একটি কোটলিন এক্সটেনশন:

fun Context.colorList(id: Int): ColorStateList {
    return ColorStateList.valueOf(ContextCompat.getColor(this, color))
}


0

Cardviewএকটু কোয়ে। আমার কাঠামোর রঙগুলির তালিকা আমার ছিল এবং মডেলটি এর মতো

class ModelColor : Serializable {

var id: Int? = 0
var title: String? = ""
var color: Int? = 0// HERE IS THE COLOR FIELD WE WILL USE

constructor(id: Int?, title: String?, color: Int?) {
    this.id = id
    this.title = title
    this.color = color
}

}

রঙের সাথে মডেলটি লোড করুন, কাঠামো থেকে নেওয়া শেষ আইটেমটি R.color

 list.add(ModelColor(2, getString(R.string.orange), R.color.orange_500))

এবং ফাইনাল আপনি সেটব্যাকগ্র্যান্ডআউটসোর্স সেট করতে পারেন

 cv_add_goal_choose_color.setBackgroundResource(color)

0

আমি অবশেষে থাকার কোণা পেয়েছি। এটি সি #, জামারিন.এন্ড্রয়েড

ভিউহোল্ডারটিতে:

CardView = itemView.FindViewById<CardView>(Resource.Id.cdvTaskList);

অ্যাডাপ্টারে:

vh.CardView.SetCardBackgroundColor(Color.ParseColor("#4dd0e1"));

0

কোটলিনে, আমি ব্যাকগ্রাউন্ডের রঙটি এইভাবে পরিবর্তন করতে পেরেছিলাম:

var card: CardView = itemView.findViewById(com.mullr.neurd.R.id.learn_def_card)
card.setCardBackgroundColor(ContextCompat.getColor(main,R.color.selected))

তারপরে আপনি যদি রঙটি মুছতে চান তবে আপনি এটি করতে পারেন:

card.setCardBackgroundColor(Color.TRANSPARENT)

এই পদ্ধতিটি ব্যবহার করে আমি একটি নির্বাচন অ্যানিমেশন তৈরি করতে সক্ষম হয়েছি।
https://gfycat.com/equalcarefreekitten


-1

এটি সহজ কাজ করে দেখুন

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:cardBackgroundColor="#fff"
    card_view:cardCornerRadius="9dp"
    card_view:cardElevation="4dp"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">

ওপি তার প্রশ্নের প্রথম লাইনে সেই সম্পত্তি সম্পর্কে আমাদের জানায়, তিনি বলেছিলেন যে তিনি প্রোগ্রাম / ডায়নামিকভাবে এটি অর্জন করতে চান।
স্ট্রামিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.