android কার্ডভিউ layout_width="match_parent" পিতামাতার RecyclerView প্রস্থের সাথে মেলে না




android-layout android-5.0-lollipop (8)

ফুলের জন্য ডক্স:

নির্দিষ্ট এক্সএমএল রিসোর্স থেকে একটি নতুন দেখুন অনুক্রমের Inflate। একটি ত্রুটি আছে InflateException throws।

পরামিতি
লোড করার জন্য একটি XML লেআউট সংস্থার জন্য সংস্থান আইডি (যেমন, R.layout.main_page) রুট
উত্পন্ন অনুক্রমের অভিভাবক (যদি সংযুক্ত করা TrueRoot সত্য হয়) অভিভাবক হিসাবে দেখুন, অথবা অন্যথায় কেবল এমন একটি বস্তু যা লেআউটপ্যারামের মানগুলির একটি সেট প্রদানকৃত অনুক্রমের রুটের জন্য সরবরাহ করে (যদি সংযুক্ত করা TrueRoot হয়।)
attachToRoot প্রবাহিত অনুক্রমটি root পরামিতি সংযুক্ত করা উচিত কিনা? যদি মিথ্যা হয়, তবে XML- র রুট ভিউয়ের জন্য রুট শুধুমাত্র লেআউটপ্যামগুলির সঠিক উপশ্রেণী তৈরি করতে ব্যবহার করা হয়। প্রদত্ত অনুক্রমের রুট দেখুন প্রদান করে। যদি রুট সরবরাহ করা হয় এবং সংযুক্ত করা TrueToot সত্য, এটি রুট; অন্যথা এটি ফুলে যাওয়া এক্সএমএল ফাইলের মূল।

সত্য সরবরাহ করার জন্য এখানে গুরুত্বপূর্ণ, কিন্তু পিতামাতার সরবরাহ করুন:

LayoutInflater.from(parent.getContext())
            .inflate(R.layout.card_listitem, parent, false);

parent ভিউ সরবরাহ করা inflater কে কি লেআউটপামাম ব্যবহার করতে দেয় তা দেয়। false প্যারামিটার সরবরাহ করা এটি এখনও পিতামাতার সাথে এটি সংযুক্ত করার জন্য বলে না । যে RecyclerView আপনার জন্য কি হবে।

Layout_width = "match_parent" এর সাথে একটি পুনর্ব্যবহারযোগ্য ভিউ সহ আমার একটি টুকরা আছে:

<android.support.v7.widget.RecyclerView 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:layout_gravity="center"
    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$PlaceholderFragment" />

RecyclerView এ আইটেমটি একটি কার্ডভিউও রয়েছে layout_width = "match_parent" সহ:

<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:id="@+id/card_view"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dp"
    card_view:cardCornerRadius="4dp">

    <TextView
        android:layout_gravity="center"
        android:id="@+id/info_text"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="match_parent"
        android:textAppearance="?android:textAppearanceLarge"/>
</android.support.v7.widget.CardView>

আমি নীচের হিসাবে আইটেম ভিউ inflate:

public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        CardView v = (CardView) LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_listitem, null, true);

        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

কিন্তু যখন আমি অ্যাপ্লিকেশনটি চালাচ্ছি, তখন কার্ডভিউ wrap_content হিসাবে রুপান্তরিত হয়েছে যা নীচে দেখানো হয়েছে:

এটি একটি বাস্তব ডিভাইস নয়, এমুলেটর চালানো হয়েছে যে নোট করুন।

আমি কি কিছু ভুল করছি, নাকি এটি একটি বাগ?


Card_view ব্যবহার করুন: কন্টেন্ট একটি নেতিবাচক মান সঙ্গে সংযুক্ত

<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"
    card_view:contentPadding="-4dp"
    card_view:cardElevation="0dp"
    android:layout_height="wrap_content">

এটা আমার জন্য কাজ করে


একটি CardView মোড়ানো যা প্রস্থ আছে: match_parent


এটা আমার জন্য কাজ করেছে,

 View viewHolder= LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item, null, false);
 viewHolder.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
 return new ViewOffersHolder(viewHolder);

এটা আমার জন্য কাজ করে

View view = inflator.inflate(R.layout.layout_item, ***null***, false);

আমি এটা করেছি উপায়:

View view = mInflater.inflate(R.layout.row_cardview, null, true);
            WindowManager windowManager = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
            int width = windowManager.getDefaultDisplay().getWidth();
            view.setLayoutParams(new RecyclerView.LayoutParams(width, RecyclerView.LayoutParams.MATCH_PARENT));

ব্যাখ্যা: আপনার অন-ভিউ ভিউ হোল্ডে আপনি কার্ড ভিউ পেতে একবার স্ক্রীনের প্রস্থ পান এবং কার্ড ভিউয়ের জন্য তারপরে লেআউট প্যারামিটার সেট করুন।


শুধু নতুন লেআউট প্যারামিটার সেট করুন

view.setLayoutParams(new RecyclerView.LayoutParams(
    RecyclerView.LayoutParams.MATCH_PARENT,
    RecyclerView.LayoutParams.WRAP_CONTENT
));

CardView থেকে অবিলম্বে পিতা হিসাবে RelativeLayout ব্যবহার করুন।

<RelativeLayout 
    android:layout_width="match_parent" ... >
    <CardView 
        android:layout_width="match_parent" ... >
    </CardView>
</RelativeLayout>




android-cardview