পটভূমি হিসাবে অ্যাটর / সিলেক্টেবল আইটেমব্যাকগ্রাউন্ড ব্যবহার করার সময় আমি কীভাবে রিপল রঙ পরিবর্তন করতে পারি?


107

আমি কিছু এসও প্রশ্ন দেখেছি এবং তারা যা চাই তা অর্জনের জন্য তারা কিছু সম্ভাব্য পদ্ধতি দিয়েছে। উদাহরণ স্বরূপ:

  1. colorControlHighlightস্টাইল.এক্সএমএল এ্যাট্রিবিউট ব্যবহার করুন ।

    আমার শৈলীগুলি এখানে রয়েছে - v21.xML:

    <style name="SelectableItemBackground">
        <item name="android:colorControlHighlight">#5677FC</item>
        <item name="android:background">?attr/selectableItemBackground</item>
    </style>
    

    এবং আমার উইজেট:

    <TextView
        android:id="@+id/tv_take_photo_as_bt"
        android:layout_width="280dp"
        android:layout_height="48dp"
        android:text="@string/act_take_photo"
        style="@style/SelectableItemBackground"/>
    

    এবং এটি কাজ করে না। আমিও যোগ করার চেষ্টা করেছেন parent="Theme.AppCompat"SelectableItemBackground" শৈলী, অথবা পরিবর্তন করতে colorControlHighlight(no android: prefix)", অথবা পরিবর্তন ?android:attr/selectableItemBackground, তন্ন তন্ন দরকারী।

  2. backgroundTintবিন্যাসে বৈশিষ্ট্য ব্যবহার করুন ।

    তাই আমি যোগ android:backgroundTint="#5677FC"আমার কাছে TextView। তবুও অকেজো। তারপর আমি পরিবর্তন করার চেষ্টা করেছিল android:backgroundTintModeকরতে src_inএবং src_atopএবং তারা একটি পার্থক্য না করা।

সুতরাং, আমি যখন ?attr/selectableItemBackgroundপটভূমি হিসাবে ব্যবহার করি তখন কীভাবে আমি রিপলের রঙ পরিবর্তন করতে পারি । আমি কেবল ললিপপ এবং উপরের দিকে ফোকাস করি। তুমাকে অগ্রিম ধন্যবাদ!

উত্তর:


156

পরিশেষে আমি সমাধানটি খুঁজে পেয়েছি: android:colorControlHighlightসরাসরি থিমটিতে ব্যবহার না করে SelectableItemBackgroundআমার আরও একটি স্টাইল লেখা উচিত:

<style name="SelectableItemTheme">
    <item name="colorControlHighlight">@color/ripple_color</item>
</style>

তারপরে:

<style name="SelectableItemBackground">
    <item name="android:theme">@style/SelectableItemTheme</item>
    <item name="android:background">?attr/selectableItemBackground</item>
</style>

অবশেষে যোগ style="@style/SelectableItemBackground"করার Viewlayout.xml হবে।

2016/ 8/ 26-এ আপডেট হয়েছে এন-এর মুক্তির পরে, আমি দেখতে পেলাম যে আমরা কখনও কখনও কোনও ধরণের View(উদাহরণস্বরূপ CardView) এর জন্য রিপল রঙ সেট করতে এই পদ্ধতিটি ব্যবহার করতে পারি না । এখন আমি বিকাশকারীদের ব্যবহারের উচ্চ পরামর্শ দিচ্ছিRippleDrawable , যা এক্সএমএলেও ঘোষণা করা যেতে পারে। এখানে একটি উদাহরণ:

আমি CardViewউপরের API21 টি স্পর্শ / ক্লিক করলে আমি একটি রিপল এফেক্ট দেখাতে চাই এবং অবশ্যই ললিপপের আগে অন্য ধরণের প্রতিক্রিয়া থাকা উচিত। সুতরাং আমার লেখা উচিত:

<android.support.v7.widget.CardView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:foreground="@drawable/selectable_item_background"/>

এবং selectable_item_backgrounddrawableফোল্ডার:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:drawable="@android:color/transparent" />
    <item android:drawable="@color/color_clicked" />
</selector>

selectable_item_backgroundমধ্যে drawable-v21ফোল্ডার:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ripple_black" />
</selector>

অবশেষে, ripple_blackইন drawable(বা drawable-v21) ফোল্ডার:

<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:color="@color/color_clicked"
    tools:ignore="NewApi" /> <!--you can remove this line if it's in v21 folder-->

এটাই. অন্যান্য মতামতের জন্য, আপনার ব্যবহার করা উচিত android:background="@drawable/selectable_item_background"। একটি সেট করতে ভুলবেন না OnClickListener, OnTouchListenerদেখাবে না বা তাদের জন্য ঐ ভালো কিছু, অন্যথায় লহরী।


14
ব্যবহার করুন colorControlHighlightপরিবর্তে android:colorControlHighlightআমার জন্য ভাল কাজ করে অন্যথায় এটি + + v21 কেবল এর
Liuting

4
এটি সঠিক উত্তর নয়, দয়া করে নীচে @ হ্যারেনের উত্তরটি দেখুন।
জিন

4
আপনি যদি একটি ক্লিকলিস্টার সেট না করে থাকেন, তবে কেবলমাত্র ভিউটিকে ক্লিকযোগ্য করে তুলুন clickable="true"এবং
রিপলের

58

প্রাক- এবং ললিপপ + ডিভাইসে রিপল প্রভাব

হারান এবং লিউটিং ঠিক আছে। গৃহীত উত্তর সেরা উপায় নয়। প্রি-ললিপপ সংস্করণ এবং উচ্চতরগুলির জন্য কীভাবে রিপলের রঙ পরিবর্তন করতে হবে তা কোডে দেখান

  1. আপনার অ্যাপপ্লেমটি কোনও অ্যাপকম্প্যাট থিম থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হওয়া উচিত এবং এতে রঙের নিয়ন্ত্রণ হাইটলাইট বৈশিষ্ট্য থাকতে হবে ('অ্যান্ড্রয়েড:' উপসর্গ ছাড়াই)

    <!-- Application theme. -->
    <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="colorControlHighlight">#40ffffff</item>
    </style>
    
  2. আপনার দৃশ্যে ক্লিকযোগ্য = "সত্য" (বা প্রোগ্রামের ভিত্তিতে ক্লিকের শ্রোতার সেট থাকা উচিত) এবং পটভূমি হওয়া উচিত "? অনুগামী / নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ডবর্ডারলেস" বা "? অ্যাট্রি / নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড":

    <LinearLayout
    ...
    android:clickable="true"
    android:background="?attr/selectableItemBackgroundBorderless"/>
    

দ্রষ্টব্য: আপনার পিতামাতার দর্শনটিতে যদি সাদা ব্যাকগ্রাউন্ড থাকে তবে আপনি সাদা হওয়ার পরে থেকে রিপাল প্রভাব দেখতে পাবেন না। ভিন্ন রঙের জন্য colorControlHightlight মান পরিবর্তন করুন

এছাড়াও, আপনি যদি বিভিন্ন ক্রিয়াকলাপের জন্য বিভিন্ন রিপল রঙ চান তবে আপনি ম্যানিফেস্ট ফাইলে প্রতিটি ক্রিয়াকলাপের জন্য ব্যক্তিগত থিম সেট করতে পারেন, উদাহরণস্বরূপ:

       <activity
        android:name="com.myapp.GalleryActivity"
        android:theme="@style/RedRippleTheme"
        />

একই ক্রিয়াকলাপে বিভিন্ন টুকরো জন্য বিভিন্ন রিপল রঙ?

আপনি রানটাইমে প্রতিটি খণ্ডের জন্য ক্রিয়াকলাপ থিমের বৈশিষ্ট্যগুলি পরিবর্তন করতে পারেন। আপনার কাস্টম শৈলীতে টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টানানোর আগে কেবল সেগুলি ওভাররাইট করুন এবং একটি বর্তমান থিমটিতে প্রয়োগ করুন:

মধ্যে মান / styles.xml

    <style name="colorControlHighlight_blue">
       <item name="colorControlHighlight">@color/main_blue_alpha26</item>
    </style>

তারপরে, মুদ্রাস্ফীতি হওয়ার আগে আপনার খণ্ডে onCreateView():

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color
       View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
       return view;
    }

এই স্টাইলটি কেবল এই খণ্ডটির জন্য কাজ করবে


বিভিন্ন দৃশ্যের জন্য বিভিন্ন রিপল রঙ? (ললিপপ +)

আপনি প্রতিটি দৃশ্যের জন্য রিপল রঙটি আলাদা করে colorControlHighlightঅ্যাট্রিবিউট ব্যবহার করে পরিবর্তন করতে পারেন, আপনি যদি এগুলি সরাসরি কোনও দৃশ্যে প্রয়োগ করেন তবে এটি কাজ করে না :

    <TextView
     ...
     colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->

আপনার এটি থিম হিসাবে প্রয়োগ করা উচিত:

<TextView
  ...
  android:theme="@style/colorControlHighlight_blue"/>

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


11

এটি এপিআই +21 এ রঙের সাথে রিপল প্রভাব এবং এপিআই -21-এর জন্য প্রেসে সাধারণ ধূসর পটভূমি প্রদর্শন করছে। এই শৈলী যুক্ত করুন:

<style name="AppTheme.MyRipple">
   <item name="colorControlHighlight">@color/your_color</item>
   <item name="android:background">?selectableItemBackgroundBorderless</item>
</style>

এবং এটি দর্শনে সেট করুন:

<Button
   ...
   android:theme="@style/AppTheme.MyRipple" />

4
এটি লক্ষ্য করা গুরুত্বপূর্ণ যে এটি আপনার লেখার মতোই রয়েছে android:theme এবং লোকেরা সাধারণত যা ব্যবহার করে তা নয় style
অ্যান্ড্রয়েড বিকাশকারী

7

গৃহীত উত্তরটি ভুল।

ব্যবহারের সঠিক উপায়টি মন্তব্যটিতে লিউটিংয়ের উল্লেখ রয়েছে mentioned এর থেকে ডিফল্ট পরিবর্তন করার colorControlHighlightপরিবর্তে ব্যবহার করুনandroid:colorControlHighlightcolorControlHighlightAppCompat

* দয়া করে দেখুন করে থিমিং বিভাগে http://android-developers.blogspot.co.uk/2014/10/appcompat-v21-matory-design-for-pre.html দেখুন


6

নীচের পদক্ষেপগুলি ব্যবহার করুন:

1. Make changes to button view in your layout.xml
2. Add new styles in styles.xml

your_layout.xML

<Button
                        android:id="@+id/setup_submit_button"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="16dp"
                        android:text="@string/action_sign_in"
                        android:textStyle="bold"
                        android:background="@color/colorPrimary"
                        android:textColor="@color/white"
                        style="@style/SelectableItemBackground"
                        android:foreground="?android:attr/selectableItemBackground"/>

শৈলীর বৈশিষ্ট্যটি আমাদের তৈরি করা স্টাইলকে কল করে।

-ফোরগ্রাউন্ড বৈশিষ্ট্যটি অ্যান্ডরিডের ডিফল্ট নির্বাচনযোগ্য বৈশিষ্ট্যটিকে কল করে।

styles.xML

 <style name="SelectableItemTheme">
        <item name="colorControlHighlight">@color/white</item>
    </style>


    <style name="SelectableItemBackground">
        <item name="android:theme">@style/SelectableItemTheme</item>
        <item name="android:background">?attr/selectableItemBackground</item>
    </style>

0

এই কোডটি আমার জন্য একটি রিপল তৈরি করতে কাজ করে:

public static void setRippleDrawable(View view, int normalColor, int touchColor) {
    try {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            RippleDrawable rippleDrawable = new RippleDrawable(ColorStateList.valueOf(touchColor), view.getBackground(), null);
            view.setBackground(rippleDrawable);
        } else {
            StateListDrawable stateListDrawable = new StateListDrawable();
            stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(touchColor));
            stateListDrawable.addState(new int[]{android.R.attr.state_focused}, new ColorDrawable(touchColor));
            stateListDrawable.addState(new int[]{}, new ColorDrawable(normalColor));
            view.setBackground(stateListDrawable);
            }
    } catch (Exception e) {
        Log.e(LOG_TAG, "" + e);
    }
}

আমি নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড বৈশিষ্ট্যটি সংশোধন করার কোনও উপায় পাইনি। এই কারণেই আমি এটি উপরের মতো করেছিলাম।


0

অন্ধকার কালো থিম (বা অন্য কোন) নিচের মত ব্যবহার করতে অ্যাপ্লিকেশান ব্যবহার করে দেখুন প্রথম তৈরি ripple_effect.xmlমধ্যে drawableফোল্ডার এবং মত কোড যোগ

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#f5f5f5">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="#f5f5f5" />

        </shape>
    </item>

</ripple>

তারপরে আপনার যেকোন দৃশ্যের মতো পটভূমি সেট করুন Linear layout, Button, TextViewetc.

 <TextView
                    android:id="@+id/tvApply"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/ripple_effect"
                    android:clickable="true"
                    android:text="APPLY"
                    android:textColor="#FFFFFF"
                    android:gravity="center"
                    android:textSize="@dimen/_8sdp"
                    android:padding="@dimen/_8sdp"
                    android:focusable="true" />

-1

অগ্রভাগের বৈশিষ্ট্যটি নির্বাচনযোগ্য আইটেমব্যাকগ্রাউন্ড এবং পটভূমির বৈশিষ্ট্য হিসাবে আপনি চান রঙ হিসাবে ব্যবহার করুন।

android:foreground="?attr/selectableItemBackground"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:background="@color/white"

4
এটি এইভাবে করে, আপনার কাছে রিপল ইফেক্টের রঙ পরিবর্তন করার বিকল্প নেই। প্রশ্ন -How can I modify ripple color when using ?attr/selectableItemBackground as background?
এইচবি।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.