রিসাইকেলারভিউ আইটেমটিতে রিপল এফেক্ট যুক্ত করা হচ্ছে


105

আমি রিসাইকেলভিউয়ের আইটেমটিতে রিপল এফেক্ট যোগ করার চেষ্টা করছি। আমি অনলাইনে একবার দেখেছি, তবে আমার কী প্রয়োজন তা পাইনি। আমি ধরে নিলাম এটি একটি কাস্টম এফেক্ট হতে হবে। আমি অ্যান্ড্রয়েড চেষ্টা করেছি: নিজেই রিসাইক্লভিউয়ের পটভূমি বৈশিষ্ট্যটি এটিকে "? অ্যান্ড্রয়েড: নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড" এ সেট করেছিলাম তবে এটি কার্যকর হয়নি:

    <android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:clickable="true"
    android:background="?android:selectableItemBackground"
    android:id="@+id/recyclerView"
    android:layout_below="@+id/tool_bar"/>

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

এখানে চিত্র বর্ণনা লিখুন


1
আমি এই প্রশ্নের সদৃশ হিসাবে এটি আবার খুলছি । যদিও সমাধানগুলি একই রকম হতে পারে, তবে CardViewএই সাধারণ প্রশ্নের তুলনায় এই প্রশ্নটিতে একটি থাকার কিছু বিষয় রয়েছে ।
সুরগাচ

@ সুরাগ পার্থক্যটি লক্ষ্য করার জন্য আপনাকে ধন্যবাদ :)
জর্জি কোয়েমজিয়েভ

উত্তর:


222

আমি বের করলাম. আমার কেবলমাত্র এই বৈশিষ্ট্যটি যুক্ত করতে হ'ল:

android:background="?android:attr/selectableItemBackground"

আমার রিসাইক্লারভিউ অ্যাডাপ্টারের মতো লেফটটির মূল উপাদানটিতে:

<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="wrap_content"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    android:background="?android:attr/selectableItemBackground"
    tools:background="@drawable/bg_gradient">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="17sp"
        android:layout_marginLeft="15dp"
        android:layout_marginStart="15dp"
        android:id="@+id/shoppingListItem"
        android:hint="@string/enter_item_hint"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/shopping_list_item_checkbox_label"
        android:id="@+id/shoppingListCheckBox"
        android:layout_centerVertical="true"
        android:layout_marginRight="15dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:checked="false"/>

</RelativeLayout>

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন

আপনি যদি এখনও রিপল প্রভাব দেখতে সক্ষম না হন তবে এই রেখাগুলি লেআউটের মূল উপাদানটিতেও যুক্ত করুন।

android:clickable="true"
android:focusable="true"

3
মূল উপাদানটি কার্ডভিউ হলে কী হবে?
নবীন

6
@ স্পাইডারম্যান আপনার নিজের কোডটি একটি সম্পর্কিত বা লিনিয়ার লেআউটের ভিতরে লিখতে হবে এবং তারপরে কার্ড লেআউটের ভিতরে রাখতে হবে।
সানভেড

7
@ প্রনুবসনেভড, এটি আমাকে সাহায্য করেছে! যারা এখনও সমস্যায় পড়েছেন তাদের জন্য কার্ডভিউ একটি শিশু হিসাবে একটি একক বিন্যাস গ্রহণ করে। যে শিশু, সেট যোগ্য, সত্য ও পটভূমি হিসেবে focusable য়েমন ATTR / selectedableItemBackground?
Vamsi Challa

42
কার্ডভিউয়ের জন্য নবীনখাদকা এটির পরিবর্তে অগ্রভাগ হিসাবে সেট করুনandroid:foreground="?android:attr/selectableItemBackground"
লর্ন লালিবার্তে

6
আমি বিকল্প যোগ করতে হয়েছে android:clickable="true"এই কাজ করতে
জোয়াকুইন Iurchuk

69

ইতিমধ্যে উত্তর হিসাবে, সহজ সমাধানটি হ'ল আপনার RecyclerViewসারির ব্যাকগ্রাউন্ড হিসাবে নিম্নলিখিতগুলির মধ্যে একটি যুক্ত করা :

  • android:background="?android:attr/selectableItemBackground"
  • android:background="?attr/selectableItemBackground"

তবে আপনি যদি এই পদ্ধতিটি নিয়ে সমস্যায় পড়ে থাকেন বা আপনি যদি রঙগুলির উপর সূক্ষ্ম নিয়ন্ত্রণ চান, তবে আপনি নিম্নলিখিতটি করতে পারেন।

কাস্টম রিপল প্রভাব

এই উত্তরটি এই সাধারণ অ্যান্ড্রয়েড রিসাইকেলার ভিউ উদাহরণ দিয়ে শুরু হচ্ছে । এটি নীচের চিত্রের মতো দেখাবে।

রিপল প্রভাব উদাহরণ জিআইএফ

প্রাক এপিআই 21 ডিভাইসের জন্য নির্বাচক যুক্ত করুন

এপিআই 21 এর আগে (অ্যান্ড্রয়েড 5.0 ললিপপ), কোনও RecyclerViewআইটেম ক্লিক করে সেক্ষেত্রে তার পটভূমির রঙ পরিবর্তন করা হয়েছে (কোনও রিপল প্রভাব নেই)। আমরা এটি করতে যাচ্ছি। যদি আপনার এখনও সেই ডিভাইসগুলির সাথে ব্যবহারকারী থাকে তবে সেগুলি সেই আচরণে অভ্যস্ত, তাই আমরা তাদের সম্পর্কে খুব বেশি চিন্তা করব না। (অবশ্যই, আপনি যদি সত্যিই তাদের জন্য রিপল প্রভাবটি দেখতে চান তবে আপনি একটি কাস্টম লাইব্রেরি ব্যবহার করতে পারেন ))

আপনার res/drawableফোল্ডারে ডান ক্লিক করুন এবং নতুন> ড্রয়যোগ্য সংস্থান ফাইলটি চয়ন করুন । ফোন করুন custom_ripple। ঠিক আছে ক্লিক করুন এবং নিম্নলিখিত কোডে পেস্ট করুন।

custom_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorAccent" />
        </shape>
    </item>
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
</selector>

আমি colorAccentচাপযুক্ত রাজ্যের হাইলাইট রঙ হিসাবে ব্যবহার করেছি কারণ এটি ইতিমধ্যে উপলব্ধ ছিল, তবে আপনি যা রঙ চান তা নির্ধারণ করতে পারেন।

API 21+ ডিভাইসের জন্য রিপল এফেক্ট যুক্ত করুন

আপনার res/drawableফোল্ডারে ডান ক্লিক করুন এবং নতুন> ড্রয়যোগ্য সংস্থান ফাইলটি চয়ন করুনcustom_rippleআবার ফোন করুন । ঠিক আছে, ক্লিক করুন না। উপলভ্য যোগ্যতা তালিকা থেকে সংস্করণ চয়ন করুন, তারপরে >> >> বোতামটি ক্লিক করুন এবং প্ল্যাটফর্ম এপিআই স্তরের21 জন্য লিখুন । এখন ওকে ক্লিক করুন এবং নীচের কোডটিতে পেস্ট করুন।

v21 / custom_ripple.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorAccent">

    <item
        android:id="@android:id/mask"
        android:drawable="@android:color/white" />
</ripple>

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

পটভূমি হিসাবে সেট করুন

আপনার পুনর্ব্যবহারযোগ্য আইটেমের মূল বিন্যাসে, আমরা যে কাস্টম রিপলটি তৈরি করেছি তাতে ব্যাকগ্রাউন্ড সেট করুন।

android:background="@drawable/custom_ripple"

ইন উদাহরণস্বরূপ প্রকল্পের যে আমরা দিয়ে শুরু, এটা ভালো দেখায়:

<?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="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/custom_ripple"
    android:padding="10dp">

    <TextView
        android:id="@+id/tvAnimalName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20sp"/>

</LinearLayout>

সমাপ্ত

এটাই. আপনার এখনই আপনার প্রকল্পটি চালানো উচিত। ধন্যবাদ এই উত্তর এবং এই YouTube ভিডিও সাহায্যের জন্য।


আপনি যদি কোনও ডিফল্ট ব্যাকগ্রাউন্ডের রঙ নিতে চান তবে কেবল 'অ্যান্ড্রয়েড: আইডি = "@ অ্যান্ড্রয়েড: আইডি / মাস্ক' লাইনটি মুছে ফেলুন এবং তারপরে অঙ্কনযোগ্যদের রঙটি যা খুশি সেট করুন
জর্ডান হচস্টেলারের

26

আমি মনে করি একটি ছোট ডিটেইল আছে যা মিস হয়েছে।

android:background="?android:attr/selectableItemBackground"লেআউটটির মূলটিতে এই নীচের লাইনগুলি যুক্ত করার চেষ্টা করার পরেও যদি আপনি রিপল প্রভাবটি না পান ।

android:clickable="true"
android:focusable="true"

এগুলি নিশ্চিত করবে যে ভিউটি ক্লিকযোগ্য এবং উপরে উল্লিখিত ব্যাকগ্রাউন্ড বৈশিষ্ট্যের সাথে রিপল প্রভাবকে সক্ষম করবে


5

আপনার অ্যাডাপ্টারের এক্সএমএল রুট ভিউতে এই লাইনগুলি যুক্ত করুন

android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"

2

একটি সরল এবং কাস্টম পদ্ধতির জন্য এখানে বর্ণিত মতামত থিম সেট করা ।

some_view.xml

<ImageView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:background="?attr/selectableItemBackgroundBorderless"
   android:focusable="true"
   android:src="@drawable/up_arrow"
   android:theme="@style/SomeButtonTheme"/>

some_style.xml

<style name="SomeButtonTheme" >
   <item name="colorControlHighlight">@color/someColor</item>
</style>

অন্যান্য কাস্টম বাস্তবায়ন এখানে পাওয়া যেতে পারে ।


1

একটি বাটন স্টাইল ব্যবহার করা

এটি আমার পক্ষে অগণিত কাজ করেছে।

আপনার বিন্যাসের মূল উপাদানটিতে সীমান্তহীন বোতাম স্টাইল যুক্ত করুন। এটির জন্য কোনো প্রয়োজন focusableবা clickableডিফল্ট স্টাইলিং আপনার জন্য সব যে encapsulates বৈশিষ্ট্যাবলী।

<androidx.constraintlayout.widget.ConstraintLayout
    style="@android:style/Widget.Material.Button.Borderless"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

দুর্দান্ত, তবে এই যুক্ত প্যাডিং

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