একটি বাটন ধূসর কিভাবে?


103

নীচে দেখানো হিসাবে আমি একটি বোতাম সংজ্ঞায়িত করেছি। আমি যখন এটি অক্ষম করতে চাই তখন আমি এটি ব্যবহার my_btn.setEnabled(false)করি তবে আমি এটিটি ধূসর করতেও চাই। আমি এটা কিভাবে করবো?

ধন্যবাদ

<Button android:id="@+id/buy_btn" style="@style/srp_button" />

শৈলী / srp_button

<style name="srp_button" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/btn_default</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:textSize">14sp</item>
    <item name="android:typeface">serif</item>
    <item name="android:paddingLeft">30dp</item>
    <item name="android:paddingRight">30dp</item>
    <item name="android:paddingTop">5dp</item>
    <item name="android:paddingBottom">5dp</item>
</style>

অঙ্কনযোগ্য / btn_default.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/pink" />
    <corners android:radius="6dp" />
</shape>

উত্তর:


57

আপনাকে btn_defaut.xmlনির্বাচক হিসাবে আপনার 3 বা 4 টি রাজ্য সরবরাহ করতে হবে ।

  1. চাপা রাষ্ট্র
  2. ডিফল্ট অবস্থা
  3. ফোকাসের অবস্থা
  4. সক্ষম রাষ্ট্র (মিথ্যা ইঙ্গিত দিয়ে রাষ্ট্র অক্ষম; মন্তব্য দেখুন)

আপনি সেই অনুযায়ী রাজ্যগুলির জন্য প্রভাব এবং পটভূমি সরবরাহ করবেন।

এখানে একটি বিস্তারিত আলোচনা রয়েছে: স্ট্যান্ডার্ড অ্যান্ড্রয়েড বোতামটি ভিন্ন রঙের সাথে


সুতরাং এটি ধূসর করতে, আমাকে অবশ্যই অক্ষম অবস্থায় পটভূমির রঙ এবং পাঠ্যের রঙ পরিবর্তন করতে হবে? কেবল স্বচ্ছ অগ্রভাগ যোগ করার কোনও উপায় নেই?
জুলাই

3
হ্যাঁ! আপনি android:state_disable="true"এটির জন্য কী সরবরাহ করবেন তা বাটনটি অক্ষম করা হলে, সহজ এবং প্রস্তাবিত উপায় show
আদিল সোমো

এবং আমি অক্ষম রাষ্ট্রের জন্য পাঠ্য রঙটি কোথায় নির্দিষ্ট করতে পারি? দেখে মনে হচ্ছে যে কেবল একটি পটভূমি নির্দিষ্ট করা যেতে পারে ... আমি তার জন্য একটি নতুন প্রশ্ন জিজ্ঞাসা করেছি: stackoverflow.com/questions/8743584/…
জুলাই

17
নেই android:state_disable="true", আছে তো? আপনি উল্লেখ করছেন android:state_enabled="false"?
কাও

@ মার্কোডাব্লু: হ্যাঁ আপনি একেবারে সঠিক। ভুল গুণাবলী জন্য ক্ষমা।
আদিল সোমো

171

আপনি এটি আলফা সেট করে (এটি অর্ধ-স্বচ্ছ তৈরি করে) অক্ষম হিসাবে প্রদর্শিত করতে পারেন। এটি বিশেষত কার্যকর যদি আপনার বোতামের পটভূমি কোনও চিত্র হয় এবং আপনি এটির জন্য রাজ্য তৈরি করতে চান না।

button.setAlpha(.5f);
button.setClickable(false);

আপডেট: আমি উপরের সমাধানটি কোটলিনের আগে লিখেছিলাম এবং যখন আমি একজন ছদ্মবেশী ছিলাম। এটি আরও একটি "চটজলদি 'নষ্ট" সমাধান, তবে আমি পেশাদার পরিবেশে এটির প্রস্তাব দিই না।

আজ, যদি আমি একটি জেনেরিক সমাধান চাইতাম যা কোনও রাজ্যের তালিকা তৈরি না করে যে কোনও বোতাম / ভিউতে কাজ করে, আমি একটি কোটলিন এক্সটেনশন তৈরি করব।

fun View.disable() {
    getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY)
    setClickable(false)
}

জাভাতে আপনি কিছু করতে পারেন একটি স্থির ব্যবহারের ফাংশনের সাথে অনুরূপ এবং আপনাকে কেবল ভেরিয়েবল হিসাবে ভিউতে যেতে হবে। এটি তেমন পরিষ্কার নয় তবে এটি কাজ করে।


4
আমি পড়েছি যে সিএলপুতে সেট আলফা কলগুলি ব্যয়বহুল। কেউ কি নিশ্চিত করতে পারবেন?
আলী কাজী

@ অলিকাজী এটি আপনার টাইপের উপর নির্ভর করে View। থেকে এই G + এ পোস্টে : "আপনার দেখুন অঙ্কন কমান্ড ওভারল্যাপিং ধারণ করে না পারেন, setAlpha()দূরে অপ্টিমাইজ করা হয় এবং আমরা কেবল রঙ সঠিক আলফা আবেদন করতে বস্তু পরিবর্তন এই ঘটনা যখন। View.hasOverlappingRendering()আয় সত্য। ImageViewS এবং TextViewকোন ব্যাকগ্রাউন্ড অঙ্কনযোগ্য সঙ্গে গুলি এই জন্য সাধারণ প্রার্থীদের অপ্টিমাইজেশন। আপনি যদি এই পরিস্থিতিতে থাকেন তবে আপনি setAlpha()যতটা চাই ব্যবহার করুন "।
সুফিয়ান

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

চাক্ষুষভাবে ব্যবহারকারী-বন্ধুত্বপূর্ণভাবে
ফরিদ

যা দেখতে দর্শনটিকে দৃশ্যত অক্ষম করে। ধন্যবাদ @ সিয়াভাশ
আকাশ বিসারিয়ার

54

সর্বাধিক সহজ সমাধানটি হ'ল এখানে যেমন দেখলাম তেমন কোনও বোতামের পটভূমির চিত্রটিতে রঙিন ফিল্টার সেট করা

আপনি নিম্নলিখিত হিসাবে করতে পারেন:

if ('need to set button disable')
    button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
    button.getBackground().setColorFilter(null);

আশা করি আমি কাউকে সাহায্য করেছি ...


আমি এই পদ্ধতির সেরা পছন্দ। ধন্যবাদ!
নব 12

2
এই পদ্ধতির সম্ভাবনা রয়েছে তবে ফলস্বরূপ রঙটি আপনি যা ভাবেন তা সবসময় হয় না। উদাহরণস্বরূপ, ধূসর রঙের একটি কমলা বোতামটি গা dark় লাল বর্ণের ফলস্বরূপ - বিবর্ণ কমলা নয়।
কেউ কোথাও

4
সম্ভবত Mode.SRC_INগুণনের পরিবর্তে ব্যবহার করা উচিত। স্ট্যাকওভারফ্লো.com
কেউ কোথাও

এটি কাজ করে, তবে দুটি রঙ মিশ্রিত হয়ে অন্য রঙে পরিণত হয়
শামসুল আরেফিন সজিব

অসাধারণ! খুব পরিষ্কার।
মিলিন্দ চৌধুরী চৌধুরী

21

প্রদত্ত সমস্ত উত্তর সূক্ষ্মভাবে কাজ করে তবে আমার মনে আছে যে সেটএল্ফা ব্যবহার করা খারাপ ধারণা কার্যকারিতা হতে পারে (আরও তথ্য এখানে )। সুতরাং একটি স্টেটলিস্টড্র্যাবেবল তৈরি করা বোতামগুলির অক্ষম অবস্থা পরিচালনা করার জন্য একটি ভাল ধারণা। এখানে কীভাবে:

রেজো / অঙ্কনযোগ্য ফোল্ডারে একটি এক্সএমএল বিটিএন_ ব্লু.এক্সএমএল তৈরি করুন:

<!-- Disable background -->
<item android:state_enabled="false"
      android:color="@color/md_blue_200"/>

<!-- Enabled background -->
<item android:color="@color/md_blue_500"/>

রেস / মান / শৈলী। এক্সএমএলে একটি বোতাম শৈলী তৈরি করুন

<style name="BlueButton" parent="ThemeOverlay.AppCompat">
      <item name="colorButtonNormal">@drawable/btn_blue</item>
      <item name="android:textColor">@color/md_white_1000</item>
</style>

তারপরে আপনার বোতামে এই স্টাইলটি প্রয়োগ করুন:

<Button
     android:id="@+id/my_disabled_button"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:theme="@style/BlueButton"/>

এখন আপনি যখন btnBlue.setEnabled(true)ওআর কল করবেন btnBlue.setEnabled(false)তখন রাষ্ট্রের রঙগুলি স্বয়ংক্রিয়ভাবে স্যুইচ হবে।


12

ক্লিকযোগ্যকে মিথ্যা হিসাবে সেট করুন এবং ব্যাকগ্রাউন্ডের রঙটি এটির মতো পরিবর্তন করুন:

callButton.setClickable(false);
callButton.setBackgroundColor(Color.parseColor("#808080"));

12

অক্ষম বোতামটির জন্য আপনার একটি এক্সএমএল ফাইল তৈরি করা উচিত ( অঙ্কনযোগ্য / btn_disable.xML )

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

এবং বোতামটির জন্য একটি নির্বাচক তৈরি করুন ( আঁকুনযোগ্য / বিটিএন_লেক্টোর.এক্সএমএল )

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/btn_disable" android:state_enabled="false"/>
    <item android:drawable="@drawable/btn_default" android:state_enabled="true"/>
    <item android:drawable="@drawable/btn_default" android:state_pressed="false" />

</selector>

আপনার বোতামে নির্বাচক যুক্ত করুন

<style name="srp_button" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/btn_selector</item>
</style>


1

আমি এটির জন্য এই কোডটি ব্যবহার করেছি:

ColorMatrix matrix = new ColorMatrix();
matrix.setSaturation(0);
ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
profilePicture.setColorFilter(filter);

0

আমি উপরের সমাধানগুলি চেষ্টা করেছিলাম কিন্তু তাদের মধ্যে কেউই আমার পক্ষে কাজ করে নি বলে মনে হয়। আমি নিম্নলিখিত বিকল্পটি দিয়ে চলেছি:

<!-- button_color_selector.xml -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_enabled="true"/>
    <item android:color="@color/colorAccentLight" android:state_enabled="false"/>
</selector>
<com.google.android.material.button.MaterialButton
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:backgroundTint="@color/button_color_selector"
                .../>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.