অ্যান্ড্রয়েড 5 এ আমি কীভাবে ডিফল্ট ডায়লগ বোতামের পাঠ্যের রঙ পরিবর্তন করতে পারি


160

আমার অ্যাপে আমার অনেক সতর্ক সংলাপ রয়েছে। এটি একটি ডিফল্ট লেআউট তবে আমি ডায়ালগটিতে ইতিবাচক এবং নেতিবাচক বোতাম যুক্ত করছি। সুতরাং বোতামগুলি অ্যান্ড্রয়েড 5 (সবুজ) এর ডিফল্ট পাঠ্যের রঙ পায়। আমি সফলতা ছাড়াই এটি পরিবর্তন করার চেষ্টা করেছি। এই লেখার রঙ কীভাবে পরিবর্তন করবেন?

আমার কাস্টম সংলাপ:

public class MyCustomDialog extends AlertDialog.Builder {

    public MyCustomDialog(Context context,String title,String message) {
        super(context);

        LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        View viewDialog = inflater.inflate(R.layout.dialog_simple, null, false);

        TextView titleTextView = (TextView)viewDialog.findViewById(R.id.title);
        titleTextView.setText(title);
        TextView messageTextView = (TextView)viewDialog.findViewById(R.id.message);
        messageTextView.setText(message);

        this.setCancelable(false);

        this.setView(viewDialog);

    } }

কথোপকথন তৈরি করা হচ্ছে:

MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage);
builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) {
                            ...
                        }
}).show();

সেই নেগেটিভবাটনটি একটি ডিফল্ট ডায়ালগ বোতাম এবং অ্যান্ড্রয়েড 5 ললিপপ থেকে ডিফল্ট সবুজ রঙ নেয়।

অনেক ধন্যবাদ

সবুজ বোতামের সাথে কাস্টম সংলাপ


প্রায় ডুপ্লিকেট প্রশ্ন / উত্তর স্ট্যাকওভারফ্লো.com / a / 29810469 / 2291 আমার মনে হয় যে এই দিনগুলিতে বেশি প্রযোজ্য।
জন অ্যাডামস

উত্তর:


191

আপনি AlertDialogপ্রথমে অবজেক্টটি তৈরি করার চেষ্টা করতে পারেন , এবং তারপরে বোতামটির রঙ পরিবর্তন করতে সেট আপ করতে এটি ব্যবহার করতে পারেন এবং তারপরে এটি প্রদর্শন করতে পারেন। (দ্রষ্টব্য যে builderবস্তুর উপরে show()কল create()করার পরিবর্তে আমরা কল করার জন্য কল করছি AlertDialog:

//1. create a dialog object 'dialog'
MyCustomDialog builder = new MyCustomDialog(getActivity(), "Try Again", errorMessage); 
AlertDialog dialog = builder.setNegativeButton("OK", new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    ...
                }

            }).create();

//2. now setup to change color of the button
dialog.setOnShowListener( new OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(COLOR_I_WANT);
    }
});

dialog.show()

onShow()আপনার ডায়ালগটি তৈরি করার পরে আপনাকে এটিটি করতে হবে এবং কেবলমাত্র সেই বোতামটি পেতে পারা যায় না তা হ'ল বোতামটি এখনও তৈরি না হত।

আমি পরিবর্তন AlertDialog.BUTTON_POSITIVEকরতে AlertDialog.BUTTON_NEGATIVEআপনার প্রশ্নের পরিবর্তন প্রতিফলিত। যদিও এটি অদ্ভুত যে "ঠিক আছে" বোতামটি নেতিবাচক বোতাম হবে। সাধারণত এটি পজিটিভ বোতাম।


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

5
এই পদ্ধতিটি সতর্কতা ডায়ালগ ক্লাসে রয়েছে, বিল্ডার শ্রেণিতে নয়। সুতরাং বিল্ডার.শো () কল করার পরিবর্তে আপনি বিল্ডার.ক্রেট () করতে পারেন, যা সতর্কতা ডায়ালগ ক্লাসটি দেয়। এর পরে আপনি শ্রোতা এবং তারপর কল প্রদর্শনী () AlertDialog বস্তুর উপর সেট আপ
trungdinhtrong

3
তবে এটি করার জন্য আরও একটি উপায় থাকতে হবে। এটি থিমের রঙের মতো বলে মনে হচ্ছে, আমরা কী থিম / স্টাইলের মাধ্যমে এটি পরিবর্তন করতে পারি?
milosmns

এটি নিখুঁত। মাত্র Xamarin.Android এ চেষ্টা করেছেন এবং এটি নিখুঁতভাবে কাজ করে। আপনাকে অনেক ধন্যবাদ.
পেরোজো

280

শৈলীগুলির সাথে এটি করার একটি প্রাকৃতিক উপায়:

আপনার AppThemeযদি উত্তরাধিকার সূত্রে প্রাপ্ত হয় Theme.MaterialComponentsতবে:

<style name="AlertDialogTheme" parent="ThemeOverlay.MaterialComponents.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">#f00</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
    <item name="android:textColor">#00f</item>
</style>

আপনার AppThemeযদি উত্তরাধিকার সূত্রে প্রাপ্ত হয় Theme.AppCompat:

<style name="AlertDialogTheme" parent="ThemeOverlay.AppCompat.Dialog.Alert">
    <item name="buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
</style>

<style name="NegativeButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">#f00</item>
</style>

<style name="PositiveButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog">
    <item name="android:textColor">#00f</item>
</style>

আপনার আপনার ব্যবহার AlertDialogThemeকরুনAppTheme

<item name="alertDialogTheme">@style/AlertDialogTheme</item>

বা নির্মাণকারী মধ্যে

androidx.appcompat.app.AlertDialog.Builder(context, R.style.AlertDialogTheme)

34
আমাকে বাটন বারনেজিটিভ বাটনস্টাইলটি অ্যান্ড্রয়েডে পরিবর্তন করতে হয়েছিল: বাটনবারনেজিটিভ বাটনস্টাইল এবং বোতামবারপোসিটিভ বাটনস্টাইল অ্যান্ড্রয়েডে: বোতামবারপোজটিভ বাটনস্টাইল। তারপরে এটি কাজ করেছে (এআইপি 21+)।
ভ্লাদ

23
অ্যান্ড্রয়েড.সপ্প.আরলেটডায়ালগের পরিবর্তে অ্যান্ড্রয়েড.সপ্পোর্ট.ভ ..অ্যাপ.এলার্টডায়ালগ ব্যবহার করতে ভুলবেন না। বুলশিট ভুলটি আমাকে 2 ঘন্টা সময় নিয়েছিল
Thanhbinh84

2
আমাকে সতর্কতা ডায়ালগ থিমের পিতামাতার কাছে "বেস.থিম.এপ.কম্প্যাট.লাইট.ডায়ালগ.আলার্ট" তে পরিবর্তন করতে হয়েছিল। এবং বারবারনেজিটিভ বাটন স্টাইল এবং বোতাম বারপোসিটিভ বাটনস্টাইল সরান। সতর্কতা ডায়ালগ থিমটিতে <আইটেমের নাম = "রঙআসেন্ট"> @ রঙ / ড্যাশবোর্ড_যুক্ত_ রঙ </item> এ যুক্ত করুন। এনডি পুরোপুরি কাজ করে।
Zephyr

3
নতুন মেটেরিয়াল লাইব্রেরি ব্যবহার করার সময় এটি কাজ করে না com.google.android.material:material:1.0.0-beta01এবং আমি থিম.মেটারিয়াল কম্পোনেন্টস.লাইট.ডায়ালগ.এলার্ট
সঞ্জীব

2
উপাদানগুলির উপাদান থিম অন্তর্ভুক্ত করার জন্য @ এলএক্স আপডেট উত্তর
আলেকজান্ডার পারফিল্যায়েভ

120

বোতামের রঙ এবং অন্যান্য পাঠ্যের থিমের মাধ্যমেও পরিবর্তন করা যেতে পারে:

মান-21 / styles.xml

<style name="AppTheme" parent="...">
  ...
  <item name="android:timePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="android:datePickerDialogTheme">@style/AlertDialogCustom</item>
  <item name="android:alertDialogTheme">@style/AlertDialogCustom</item>
</style>

<style name="AlertDialogCustom" parent="android:Theme.Material.Light.Dialog.Alert">
  <item name="android:colorPrimary">#00397F</item>
  <item name="android:colorAccent">#0AAEEF</item>
</style>

ফলাফল:

কথোপকথন খেঁজুর সংগ্রাহক


1
বর্তমানে আমি কেবলমাত্র চেকবক্সের রঙ বা বোতামের রঙ পরিবর্তন করার কোনও উপায় জানি না। অ্যাকসেন্ট রঙ তাদের উভয় পরিবর্তন।
পিস্পস

4
আমি এই পদ্ধতিটি পছন্দ করেছিলাম তবে স্ট্যাকওভারফ্লো . com/ a/ 29810469/2291 এ উত্তরটি আমার কাছে মনে হচ্ছে এটি করার কিছুটা পরিষ্কার উপায়।
জন অ্যাডামস

12
আমার প্রকল্পে এটি কাজ করতে, আমাকে android:অংশটি থেকে android:alertDialogThemeএবং থেকে সরিয়ে ফেলতে হয়েছিল android:colorAccent
নিষিদ্ধ-জিওঞ্জিনিয়ারিং

2
অ্যান্ড্রয়েড থাকা: মানগুলিতে উপসর্গ নির্ভর করে আপনি কোথায় স্টাইলস.এক্সএমএল রাখবেন, মানগুলিতে বা মান-ভিএক্সএক্স
মুহূর্তে 10

1
অ্যাপকম্প্যাট এবং একটি সাধারণ মান ফোল্ডার দিয়ে এই কাজটি করার জন্য, কেবল @ নিষেধাজ্ঞাসমূহের প্রস্তাবিত পরিবর্তনগুলি অনুসরণ করুন
ফেলিক্স

94

সবচেয়ে সহজ সমাধানটি হ'ল:

dialog.show(); //Only after .show() was called
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(neededColor);
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(neededColor);

4
এই ক্ষেত্রগুলি অ স্থিতিশীল পরিবর্তনশীল থেকে উল্লেখ করা উচিত নয়, AlertDialog.BUTTON_NEGATIVEইত্যাদি হওয়া উচিত
জো মাহের

এটি করার সর্বোত্তম এবং সহজ উপায় ছিল। দ্রষ্টব্য যে আমি "তৈরি" ব্যবহার না করে শো () এর পরে ডায়ালগটি ধরলাম। অ্যালার্টডায়ালগ ডায়ালগের মত = builder.show ();
স্টিফেন

2
যদিও এই সমাধানটি কার্যকর হতে পারে তবে যৌক্তিকভাবে এটি ত্রুটিযুক্ত। এখানে যা হয় তা আপনি প্রথমে ডায়ালগটি দেখান এবং তারপরে আপনি এর উপস্থিতি পরিবর্তন করেন। অন্তর্নিহিত বাস্তবায়ন (যা সময়ের সাথে সাথে পরিবর্তিত হতে পারে) এবং ডিভাইসের কার্যকারিতা উপর নির্ভর করে আপনি তাত্ত্বিকভাবে এমন একটি "ঝাঁকুনি" দেখতে পাবেন যেখানে ব্যবহারকারী একটি ডায়ালগ দেখায় এবং তারপরে দ্রুত তার উপস্থিতি পরিবর্তন করতে পারে।
ট্রুঙ্গদিনহ্রটং

31

ডায়লগ বোতামের রঙ পরিবর্তন করার দুটি উপায় রয়েছে।

বেসিক ওয়ে

আপনি যদি কেবল কোনও ক্রিয়াকলাপ পরিবর্তন করতে চান তবে নীচের দুটি লাইন পরে লিখুন alertDialog.show();

alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.colorPrimary));
alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.colorPrimaryDark));

প্রস্তাবিত

আমি একটি থিম যোগ সুপারিশ করব AlertDialogমধ্যে styles.xmlযাতে আপনি প্রতিটি কার্যকলাপ / ডায়ালগ কলে আবার এবং আবার একই কোড লিখতে হবে না। আপনি কেবল একটি স্টাইল তৈরি করতে পারেন এবং ডায়ালগ বাক্সে সেই থিমটি প্রয়োগ করতে পারেন। সুতরাং আপনি যখনই সতর্কতা ডায়ালগ বাক্সের রঙ পরিবর্তন করতে চান, কেবল স্টাইল.এক্সএমএল রঙ পরিবর্তন করুন এবং সমস্ত ডায়ালগ বাক্স পুরো অ্যাপ্লিকেশনটিতে আপডেট হবে।

<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorPrimary</item>
</style>

এবং থিমটি প্রয়োগ করুন AlertDialog.Builder

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.AlertDialogTheme);

এখনও সঠিক থাকা অবস্থায় এই উত্তরটি সবচেয়ে পরিষ্কার।
বিগ_চায়ার

11

আপনি যদি বোতামের পাঠ্যের রঙ পরিবর্তন করতে চান (ধনাত্মক, নেতিবাচক, নিরপেক্ষ) কেবল আপনার কাস্টম সংলাপের স্টাইলে যুক্ত করুন:

<item name="colorAccent">@color/accent_color</item>

সুতরাং, আপনার কথোপকথনের শৈলীটি অবশ্যই দেখতে হবে:

<style name="AlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColor">@android:color/black</item>
    <item name="colorAccent">@color/topeka_accent</item>
</style>

6
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:colorPrimary">#00397F</item>
    <item name="android:textColorPrimary">#22397F</item>
    <item name="android:colorAccent">#00397F</item>
    <item name="colorPrimaryDark">#22397F</item>
</style>

বোতামগুলির রঙ এবং অন্যান্য পাঠ্য অ্যাপকম্প্যাট ব্যবহার করেও পরিবর্তন করা যেতে পারে:


থিম.এপকম্প্যাট.লাইট.ডায়ালগ.এলার্ট বোতামের রঙকে সাদা করার জন্য দুর্দান্ত কাজ করে।
লিও কে

6
  1. আপনার অ্যাপের থিম / শৈলীতে নিম্নলিখিত লাইনগুলি যুক্ত করুন:

    <item name="android:buttonBarNegativeButtonStyle">@style/NegativeButtonStyle</item>
    <item name="android:buttonBarPositiveButtonStyle">@style/PositiveButtonStyle</item>
    <item name="android:buttonBarNeutralButtonStyle">@style/NeutralButtonStyle</item>
  2. তারপরে নিম্নলিখিত শৈলীগুলি যুক্ত করুন:

    <style name="NegativeButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">@color/red</item>
    </style>
    
    <style name="PositiveButtonStyle" parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">@color/red</item>
    </style>
    
    <style name="NeutralButtonStyle" 
    parent="Widget.MaterialComponents.Button.TextButton.Dialog">
        <item name="android:textColor">#00f</item>
    </style>

এই পদ্ধতিটি ব্যবহার করে সতর্কতা ডায়ালগ নির্মাতাকে থিমটি সেট করা অনিবার্য করে তোলে।


4

পার্শ্ব নোট হিসাবে:

বোতামগুলির রঙগুলি (এবং পুরো শৈলী) বর্তমান থিমের উপরও নির্ভর করে যা আপনি যখন ব্যবহার করেন তখন ভিন্ন হতে পারে

android.app.AlertDialog.Builder builder = new AlertDialog.Builder()

অথবা

android.support.v7.app.AlertDialog.Builder builder = new AlertDialog.Builder()

(দ্বিতীয়টি ব্যবহার করা ভাল)


3

আপনি এটি কীভাবে করেন তা এখানে Simple

// Initializing a new alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.message);
builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        doAction();
    }
});
builder.setNegativeButton(R.string.cancel, null);

// Create the alert dialog and change Buttons colour
AlertDialog dialog = builder.create();
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface arg0) {
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.red));
        dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.blue));
        //dialog.getButton(AlertDialog.BUTTON_NEUTRAL).setTextColor(getResources().getColor(R.color.black));
    }
});
dialog.show();

1

আমার জন্য এটি আলাদা ছিল, আমি একটি বোতাম থিম ব্যবহার করেছি

<style name="ButtonLight_pink" parent="android:Widget.Button">
      <item name="android:background">@drawable/light_pink_btn_default_holo_light</item>
      <item name="android:minHeight">48dip</item>
      <item name="android:minWidth">64dip</item>
      <item name="android:textColor">@color/tab_background_light_pink</item>
    </style>

এবং কারণ

অ্যান্ড্রয়েড textcolor

সেখানে সাদা ছিল ... আমি কোনও বোতামের পাঠ্য দেখতে পাইনি (ডায়ালগ বোতামগুলি মূলত বোতামগুলিরও হয়)। আমরা সেখানে যাই, এটি পরিবর্তন করেছি, এটি ঠিক করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.