স্ট্যান্ডার্ড অ্যান্ড্রয়েড বোতামটি ভিন্ন রঙের সাথে


735

ক্লায়েন্টের ব্র্যান্ডিংয়ের সাথে আরও ভালভাবে মেলে যাতে আমি একটি স্ট্যান্ডার্ড অ্যান্ড্রয়েড বোতামের রঙ কিছুটা পরিবর্তন করতে চাই।

এখন পর্যন্ত এটি করার সবচেয়ে ভাল Buttonউপায়টি হ'ল এর অঙ্কনটি এখানে অবস্থিত আঁকতে পরিবর্তনযোগ্য res/drawable/red_button.xml:

<?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
    <item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
    <item android:drawable="@drawable/red_button_rest" />
</selector>

তবে এটি করার জন্য প্রয়োজন যে আমি প্রতিটি কাস্টমাইজ করতে চাই প্রতিটি বাটনের জন্য তিনটি আলাদা আঁকিয়ে তৈরি করতে পারি (বিশ্রামে থাকা বোতামটির জন্য একটি, যখন দৃষ্টি নিবদ্ধ করা হয় তখন একটি এবং চাপলে একটি)। এটি আমার প্রয়োজনের চেয়ে আরও জটিল এবং অ-ডিআরওয়াই বলে মনে হচ্ছে।

আমি যা করতে চাই তা হ'ল বাটনে কিছু ধরণের রঙ রূপান্তর প্রয়োগ করা। আমি যেভাবে করছি তার চেয়ে বাটনটির রঙ পরিবর্তন করার কী সহজ উপায় আছে?


উত্তর:


723

আমি আবিষ্কার করেছি যে এটি খুব সহজেই একটি ফাইলে করা যায়। নামের একটি ফাইলটিতে নিম্নলিখিত কোডের মতো কিছু রাখুন custom_button.xmlএবং তারপরে background="@drawable/custom_button"আপনার বোতাম ভিউতে সেট করুন :

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

    <item android:state_pressed="true" >
        <shape>
            <gradient
                android:startColor="@color/yellow1"
                android:endColor="@color/yellow2"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                android:endColor="@color/orange4"
                android:startColor="@color/orange5"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>

    <item>        
        <shape>
            <gradient
                android:endColor="@color/blue2"
                android:startColor="@color/blue25"
                android:angle="270" />
            <stroke
                android:width="3dp"
                android:color="@color/grey05" />
            <corners
                android:radius="3dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

42
এটি ব্যাকগ্রাউন্ড রঙের জন্য ভাল কাজ করে - আপনি কি একইভাবে পাঠ্য রঙ সেট করতে পারেন?
রাচেল

8
এটি আমাকে দেয় "Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')" রঙগুলিতে অন্তর্নির্মিত এই উল্লেখগুলি কি? দেখে মনে হচ্ছে এই কাজটি করার জন্য আমার কাছে একটি res / মান / color.xML দরকার
হ্যারি উড

8
@ হ্যারিউড আপনাকে আপনার রঙ / মান / রং.এক্সএমএলগুলিতে এই রঙগুলি সংজ্ঞায়িত করতে হবে। বিকল্প হিসাবে, তাদের পরীক্ষার উদ্দেশ্যে "# ff0000", "# 00ff00" দ্বারা প্রতিস্থাপন করুন @ cfarm54 সেই ফাইলটি পুনরায় / অঙ্কনযোগ্য / কাস্টম_বাটন.এক্সএমএল ফোল্ডারে রাখতে হবে @ এমএমবি কোড স্নিপেটের জন্য ধন্যবাদ!
এস্পিনিচি

17
দুর্দান্ত পয়েন্টার, ধন্যবাদ! অন্যান্য লোকেরা এটি চেষ্টা করে দেখতে চেষ্টা করুন, নির্বাচকদের আইটেমগুলির ক্রমটি উল্লেখযোগ্য। আপনি যদি <item> কোনও রাজ্য ফিল্টার না রেখে প্রথমে ফাইলটিতে রাখেন তবে এটি বাকি অংশগুলিকে ওভাররাইড করে।
মিকারোহেল

9
এই কাজ, আপনার মাঝামাঝি / "অঙ্কনযোগ্য" ফোল্ডারে রাখা custom_button.xml করতে - এবং একটি ফাইল মাঝামাঝি / মান / এই বিষয়বস্তু সঙ্গে colors.xml তৈরি করুন: stackoverflow.com/questions/3738886/... - হয় ফাইলে রঙ নাম পরিবর্তন এটি কাজ করতে
sami

308

টমাসজ এর উত্তর অনুসরণ করে, আপনি পোর্টারডাফ মাল্টিপল মোড ব্যবহার করে প্রোগ্রাম্যিকভাবে পুরো বোতামের ছায়া সেট করতে পারেন। এটি কেবল রঙের পরিবর্তে বোতামের রঙ পরিবর্তন করবে।

যদি আপনি একটি স্ট্যান্ডার্ড ধূসর ছায়াময় বোতামটি দিয়ে শুরু করেন:

button.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);

আপনাকে একটি লাল শেড বোতাম দেবে,

button.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);

আপনাকে একটি সবুজ শেডযুক্ত বোতাম ইত্যাদি দেবে, যেখানে প্রথম মান হেক্স ফর্ম্যাটে রঙ।

এটি আপনার রঙের মান দ্বারা বর্তমান বোতামের রঙ মানকে গুণিত করে কাজ করে। আমি নিশ্চিত যে এই মোডগুলি সহ আপনি আরও অনেক কিছু করতে পারেন।


2
বাহ, এটি চেষ্টা করে দেখুন এবং এটি সম্পূর্ণ দুর্দান্ত। ধন্যবাদ! কোনওভাবে এক্সএমএল এর মাধ্যমে এটি সম্পাদন করার উপায় আছে কিনা তা কি আপনি জানতে পেরেছেন?
emmby

4
ছেলেরা, এটি এইচটিসি ডিজায়ারে পরীক্ষা করে দেখুন! তাদের বিভিন্ন স্ট্যান্ডার্ড বোতাম রয়েছে। এই কোডটি ব্যবহার করে আমার বোতামগুলি অবাক করে দেখায় যখন "40dp" এর মতো একটি নির্দিষ্ট বিন্যাস_ প্রস্থ নির্ধারণ করে। "মোড়ানো_ কনটেন্ট" দিয়ে এটি ঠিক আছে।
ওয়ানওয়ার্ল্ড

5
নিশ্চিত হয়েছে, এইচটিসি
সেনস ইউআইতে

19
গ্রহণটি এটি কোনও সম্ভাব্য সংশোধন হিসাবে দেখায় না:import android.graphics.PorterDuff;
কেউ কেউ কোথাও

2
আইসিএসে কাজ না করে কারও কি কোনও সমস্যা হয়েছে? এটি আমার জন্য এমুলেটর বা ফোনে কাজ করছে বলে মনে হচ্ছে না ..
স্টিভ_কে

149

মাইক, আপনি রঙিন ফিল্টারগুলিতে আগ্রহী হতে পারেন।

একটি উদাহরণ:

button.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));

আপনি চান রঙ অর্জন করতে এটি চেষ্টা করুন।


সেটকলার ফিল্টার পদ্ধতিতে নাল পাস করার চেষ্টা করুন। এটি চেষ্টা করে দেখেনি তবে এটি কাজ করা উচিত।
টমাসজ

6
আনসেট করতে প্যাসিয়ার: বোতাম.টেটব্যাকগ্রাউন্ড () ক্লিয়ার কালারফিল্টার ();
স্টান কুর্দিজিল

3
আমি রঙিন ক্লাস ব্যবহার করে একটি রঙ বাছাইয়ের পরামর্শ দিচ্ছি: developer.android.com/references/android/ographicics/Color.html
Mugen

অন্ধকার থিম জন্য নিখুঁত! আমি ধরে নিয়েছি যে অন্যান্য শীর্ষ উত্তর (সেটকলারফিল্টার (0xFFFF0000, পোর্টারডাফ.মড.মুলটিপ্লি)) হালকা থিমগুলির জন্য আরও ভাল কাজ করে।
java.is.for.desktop

85

এটি আমার সমাধান যা এপিআই 15 থেকে শুরু করে পুরোপুরি কাজ করে । এই সমাধানটি সামগ্রীর মতো সমস্ত ডিফল্ট বোতাম ক্লিক প্রভাব রাখে RippleEffect। আমি এটি নিম্ন এপিআইতে পরীক্ষা করিনি, তবে এটি কাজ করা উচিত।

আপনাকে যা করতে হবে তা হ'ল:

1) একটি স্টাইল তৈরি করুন যা কেবল পরিবর্তিত হয় colorAccent:

<style name="Facebook.Button" parent="ThemeOverlay.AppCompat">
    <item name="colorAccent">@color/com_facebook_blue</item>
</style>

ThemeOverlay.AppCompatআপনার AppThemeবাকী স্টাইলগুলি রাখার জন্য আমি বা আপনার প্রধানটিকে অভিভাবক হিসাবে ব্যবহার করার পরামর্শ দিচ্ছি ।

2) আপনার buttonউইজেটে এই দুটি লাইন যুক্ত করুন :

style="@style/Widget.AppCompat.Button.Colored"
android:theme="@style/Facebook.Button"

কখনও কখনও আপনার নতুন colorAccentঅ্যান্ড্রয়েড স্টুডিও পূর্বরূপে প্রদর্শিত হয় না, তবে আপনি যখন ফোনে আপনার অ্যাপ্লিকেশন চালু করবেন তখন রঙটি পরিবর্তন হয়ে যাবে।


নমুনা বোতাম উইজেট

<Button
    android:id="@+id/sign_in_with_facebook"
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/sign_in_facebook"
    android:textColor="@android:color/white"
    android:theme="@style/Facebook.Button" />

কাস্টম রঙের সাথে নমুনা বোতাম


1
এই লাইনটি কি করে? "শৈলী =" @ শৈলী / উইজেট। অ্যাপকম্প্যাট.বটন.ক্লোরড ""
চার্লস লি

2
এটি আমাকে শৈলী এবং থিমের মধ্যে পার্থক্য বুঝতে সাহায্য করেছিল। ধন্যবাদ.
আরপট্টবী

2
গৃহীত উত্তর সঠিক তবে খুব পুরানো। এই এক সহজ এবং সবচেয়ে আধুনিক উত্তর।
白 布鞋

এই উত্তরটি সহ সমস্যাটি হ'ল, সেটিংসটি colorAccentকেবলমাত্র বোতামটির ব্যাকগ্রাউন্ডের চেয়ে বেশি প্রভাবিত করে।
ব্ল্যাকনএক্স

@ ব্ল্যাকএনএক্স উদাহরণস্বরূপ কী?
RediOne1

61

আপনি এখন বৈশিষ্ট্য সহ অ্যাপকম্প্যাট- ভি 7 এর অ্যাপকম্প্যাটবটন ব্যবহার করতে পারেন backgroundTint:

<android.support.v7.widget.AppCompatButton
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:backgroundTint="#ffaa00"/>

4
"অ্যান্ড্রয়েড:" নাম স্থানটি ব্যবহার করে আমার পক্ষে কাজ করেনি। আমি যখন এর পরিবর্তে "অ্যাপ:" নাম স্থানটি ব্যবহার করেছি তখন এটি কাজ করেছিল।
ডেভিড ভেলাস্কেজ

@ ডেভিডভেলাস্কেজ অ্যান্ড্রয়েডের সময় অ্যান্ড্রয়েড ললিপপ নিয়ে আমার পক্ষেও কাজ করেছেন: নেমস্পেসে কোনও পরিবর্তন হয়নি। সাহায্যের জন্য ধন্যবাদ!
অবিনাশ প্রভাকর

এটি সহজ সমাধান এবং এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। অ্যান্ড্রয়েড ব্যবহার: ব্যাকগ্রাউন্ড টিন্ট আমার জন্য কাজ করে।
রমাশীষ বড়ানওয়াল

1
অ্যাপকম্প্যাট ব্যবহার করার app:backgroundTintপরিবর্তে হওয়া উচিত android:backgroundTint
হাফেজ দিবান্ডারী

23

আমি পূর্ববর্তী উত্তরগুলিতে রঙিন ফিল্টার পরামর্শ পছন্দ করি @ সংযুক্তি নির্দেশিকা এবং @ টমাসজ থেকে; তবে, আমি দেখতে পেয়েছি যে এখন পর্যন্ত সরবরাহ করা কোডটি আমার প্রত্যাশার মতো সহজে প্রয়োগ করা হয়নি।

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

মূল প্রশ্নটি আমার পড়া থেকে, আদর্শ সমাধানটি এমন কোনও হবে যা কোনও চিত্র জড়িত না। @ এমএমবি থেকে কাস্টম_বাটন.এক্সএমএল ব্যবহার করে গৃহীত উত্তর হ'ল এটি যদি আপনার লক্ষ্য হয় তবে রঙ ফিল্টারগুলির চেয়ে ভাল ফিট। আমার ক্ষেত্রে, আমি একটি ইউআই ডিজাইনারের পিএনজি চিত্র দিয়ে শুরু করছি যা বোতামটির মতো দেখতে হবে। যদি আমি এই চিত্রটিতে বোতামের পটভূমি সেট করি তবে ডিফল্ট হাইলাইট প্রতিক্রিয়াটি পুরোপুরি হারিয়ে যায়। এই কোডটি সেই আচরণকে একটি প্রোগ্রাম্যাটিক গাening় প্রভাব দিয়ে প্রতিস্থাপন করে।

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // 0x6D6D6D sets how much to darken - tweak as desired
                setColorFilter(v, 0x6D6D6D);
                break;
            // remove the filter when moving off the button
            // the same way a selector implementation would 
            case MotionEvent.ACTION_MOVE:
                Rect r = new Rect();
                v.getLocalVisibleRect(r);
                if (!r.contains((int) event.getX(), (int) event.getY())) {
                    setColorFilter(v, null);
                }
                break;
            case MotionEvent.ACTION_OUTSIDE:
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:
                setColorFilter(v, null);
                break;
        }
        return false;
    }

    private void setColorFilter(View v, Integer filter) {
        if (filter == null) v.getBackground().clearColorFilter();
        else {
            // To lighten instead of darken, try this:
            // LightingColorFilter lighten = new LightingColorFilter(0xFFFFFF, filter);
            LightingColorFilter darken = new LightingColorFilter(filter, 0x000000);
            v.getBackground().setColorFilter(darken);
        }
        // required on Android 2.3.7 for filter change to take effect (but not on 4.0.4)
        v.getBackground().invalidateSelf();
    }
});

আমি একাধিক বোতামে প্রয়োগের জন্য এটি একটি পৃথক শ্রেণি হিসাবে উত্তোলন করেছি - কেবল ধারণা পেতে বেনামি অভ্যন্তর শ্রেণি হিসাবে দেখানো হয়েছে।


এটাই ছিল দুর্দান্ত সমাধান! ডিফল্টরূপে আপনি আইওএসে
উঠার সাথে

আমি একই পটভূমি সঙ্গে একই পর্দায় 2 বাটন সঙ্গে এই চেষ্টা করেছি এবং প্রভাব উভয় বোতাম প্রযোজ্য onTouch
নির্বোধ

16

আপনি যদি এক্সএমএল দিয়ে রঙিন বোতাম তৈরি করে থাকেন তবে আপনি আলাদা ফাইলে ফোকাসড এবং চাপযুক্ত স্থিতি উল্লেখ করে কোডটি কিছুটা পরিষ্কার করতে পারেন এবং সেগুলি পুনরায় ব্যবহার করতে পারেন। আমার সবুজ বোতামটি এমন দেখাচ্ছে:

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

    <item android:state_focused="true" android:drawable="@drawable/button_focused"/>
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed"/>

    <item>
        <shape>
            <gradient android:startColor="#ff00ff00" android:endColor="#bb00ff00" android:angle="270" />
            <stroke android:width="1dp" android:color="#bb00ff00" />
            <corners android:radius="3dp" />
            <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
        </shape>
    </item>

</selector>

1
সুন্দর। কীভাবে কেউ বোতামগুলির জন্য স্ট্যান্ডার্ড অ্যান্ড্রয়েড সংজ্ঞাগুলিকে আবার কেন্দ্রীভূত এবং চাপযুক্ত স্থিতি উল্লেখ করতে পারে?
লার্হাম 1

আমি নিশ্চিত যে আপনি স্ট্যান্ডার্ড অ্যান্ড্রয়েড বোতামগুলি 9-প্যাচ বিটম্যাপ হিসাবে প্রয়োগ করা হয়নি don't
হেমিশ

12

সংক্ষিপ্ততম সমাধান যা কোনও অ্যান্ড্রয়েড সংস্করণ নিয়ে কাজ করছে:

<Button
     app:backgroundTint="@color/my_color"

নোট / প্রয়োজনীয়তা :

  • ব্যবহার করুন app:নামস্থান এবং নাandroid: নামস্থান!
  • অ্যাপকম্প্যাট সংস্করণ> 24.2.0

    নির্ভরতা com সংকলন 'com.android.support:appcompat-v7:25.3.1'}

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


1
মজার বিষয় হচ্ছে, আমার app:backgroundTint="@color/my_color"পক্ষে কাজ হয়নি। android:backgroundTint="@color/my_color"নিখুঁতভাবে কাজ যদিও।
ইগোর

এটি আমার পক্ষে সবচেয়ে সংক্ষিপ্ত এবং পরিষ্কার সমাধান এবং এগুলিই।
মার্টি

11

আমি এই পদ্ধতির ব্যবহার করছি

style.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:colorPrimaryDark">#413152</item>
    <item name="android:colorPrimary">#534364</item>
    <item name="android:colorAccent">#534364</item>
    <item name="android:buttonStyle">@style/MyButtonStyle</item>
</style>

<style name="MyButtonStyle" parent="Widget.AppCompat.Button.Colored">
    <item name="android:colorButtonNormal">#534364</item>
    <item name="android:textColor">#ffffff</item>
</style>

উপরে থেকে আপনি দেখতে পাচ্ছেন, আমি আমার বোতামটির জন্য একটি কাস্টম স্টাইল ব্যবহার করছি। বোতামের রঙ অ্যাকসেন্ট রঙের সাথে মিলে যায়। android:backgroundগুগল যে রিপল এফেক্টটি হারাবে তা হারাবে না বলে সেট করার চেয়ে আমি এটিকে অনেক ভাল পন্থা মনে করি।


8

এখন আরও সহজ উপায় রয়েছে: android-holo-colors.com

এটি আপনাকে সহজেই সমস্ত হলো ড্রয়াবল (বোতাম, স্পিনার, ...) এর রঙ পরিবর্তন করতে দেবে। আপনি রঙটি নির্বাচন করুন এবং তারপরে সমস্ত রেজোলিউশনের জন্য ড্রয়েবলযুক্ত একটি জিপ ফাইল ডাউনলোড করুন।



4

ইন <Button>ব্যবহার android:background="#33b5e5"। বা আরও ভালandroid:background="@color/navig_button"


3

DroidUX উপাদান গ্রন্থাগার টি ColorButtonযাতে আপনি এমনকি আপনার অ্যাপটি পারবেন বোতাম রঙ / থিম সেট করতে ব্যবহারকারী দেওয়া যাবে, উইজেট যার রঙ XML সংজ্ঞা মাধ্যমে এবং প্রোগ্রামেটিক্যালি রান সময়ে উভয়, সহজে পরিবর্তন করা যাবে।


3

এছাড়াও আপনি আপনার বাটন কাস্টমাইজ করতে এই অনলাইন সরঞ্জামটি ব্যবহার করতে পারেন http://angrytools.com/android/button/ এবং ব্যবহার android:background="@drawable/custom_btn"আপনার লেআউট কাস্টমাইজ বোতাম সংজ্ঞায়িত করতে।


2

আপনি এটিতে আপনার বোতামের থিম সেট করতে পারেন

<style name="AppTheme.ButtonBlue" parent="Widget.AppCompat.Button.Colored">
 <item name="colorButtonNormal">@color/HEXColor</item>
 <item name="android:textColor">@color/HEXColor</item>
</style>

1

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

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

ফলাফল (কোনও পটভূমি নির্বাচক ব্যবহৃত হয়নি)।

সাধারণ বোতাম

সাধারণ চিত্র

বোতাম টিপুন

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


0

আমি যেভাবে ভিন্ন স্টাইলযুক্ত বোতামটি বেশ ভালভাবে কাজ করি তা হ'ল বাটন অবজেক্টটি সাবক্লাস করা এবং একটি রঙিন ফিল্টার প্রয়োগ করা। এটি বোতামে একটি আলফা প্রয়োগ করে সক্ষম ও অক্ষম রাষ্ট্রগুলি পরিচালনা করে।

import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.LightingColorFilter;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.Button;

public class DimmableButton extends Button {

    public DimmableButton(Context context) {
        super(context);
    }

    public DimmableButton(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DimmableButton(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @SuppressWarnings("deprecation")
    @Override
    public void setBackgroundDrawable(Drawable d) {
        // Replace the original background drawable (e.g. image) with a LayerDrawable that
        // contains the original drawable.
        DimmableButtonBackgroundDrawable layer = new DimmableButtonBackgroundDrawable(d);
        super.setBackgroundDrawable(layer);
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    @Override
    public void setBackground(Drawable d) {
        // Replace the original background drawable (e.g. image) with a LayerDrawable that
        // contains the original drawable.
        DimmableButtonBackgroundDrawable layer = new DimmableButtonBackgroundDrawable(d);
        super.setBackground(layer);
    }

    /**
     * The stateful LayerDrawable used by this button.
     */
    protected class DimmableButtonBackgroundDrawable extends LayerDrawable {

        // The color filter to apply when the button is pressed
        protected ColorFilter _pressedFilter = new LightingColorFilter(Color.LTGRAY, 1);
        // Alpha value when the button is disabled
        protected int _disabledAlpha = 100;
        // Alpha value when the button is enabled
        protected int _fullAlpha = 255;

        public DimmableButtonBackgroundDrawable(Drawable d) {
            super(new Drawable[] { d });
        }

        @Override
        protected boolean onStateChange(int[] states) {
            boolean enabled = false;
            boolean pressed = false;

            for (int state : states) {
                if (state == android.R.attr.state_enabled)
                    enabled = true;
                else if (state == android.R.attr.state_pressed)
                    pressed = true;
            }

            mutate();
            if (enabled && pressed) {
                setColorFilter(_pressedFilter);
            } else if (!enabled) {
                setColorFilter(null);
                setAlpha(_disabledAlpha);
            } else {
                setColorFilter(null);
                setAlpha(_fullAlpha);
            }

            invalidateSelf();

            return super.onStateChange(states);
        }

        @Override
        public boolean isStateful() {
            return true;
        }
    }

}

0

মান \ styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="RedAccentButton" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">#ff0000</item>
</style>

তারপর:

<Button
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="text" />

<Button
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:enabled="false"
    android:text="text" />

<Button
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="text"
    android:theme="@style/RedAccentButton" />

<Button
    style="@style/Widget.AppCompat.Button.Colored"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:enabled="false"
    android:text="text"
    android:theme="@style/RedAccentButton" />

ফলাফল


0

উপাদান নকশা গাইডলাইন প্রতি আপনার নীচের কোড মত স্টাইল ব্যবহার করা প্রয়োজন

<style name="MyButton" parent="Theme.AppCompat.Light>
    <item name="colorControlHighlight">#F36F21</item>
    <item name="colorControlHighlight">#FF8D00</item>
</style>

এবং বিন্যাসে আপনার বোতামে এই সম্পত্তি যুক্ত করুন

    android:theme="@style/MyButton"

0

এটি সহজ .. আপনার প্রকল্পে এই নির্ভরতা যুক্ত করুন এবং 1 দিয়ে একটি বোতাম তৈরি করুন 1. যে কোনও আকার 2 কোনও রঙ 3. কোনও সীমানা 4. উপাদান প্রভাব সহ

https://github.com/manojbhadane/QButton

<com.manojbhadane.QButton
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="OK"
       app:qb_backgroundColor="@color/green"
       app:qb_radius="100"
       app:qb_strokeColor="@color/darkGreen"
       app:qb_strokeWidth="5" />
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.