অ্যাপকম্প্যাট 22.1 এবং উপরের থেকে কীভাবে নতুন অ্যালার্টডায়ালগ ব্যবহার এবং স্টাইল করা যায়


154

আমি ডিফল্ট অ্যান্ড্রয়েড AlertDialogথেকে অ্যাপকম্প্যাট -২২.১ এ অন্তর্ভুক্ত থাকা নতুনটিতে স্থানান্তরিত করার চেষ্টা করছি এখন পর্যন্ত আমি বুঝতে পেরেছি android.support.v7.app.AlertDialogএটি ব্যবহারের জন্য আপনাকে কেবল প্যাকেজ আমদানি করতে হবে।

তবে আমি কীভাবে এটি স্টাইল করব? উদাহরণস্বরূপ ইতিবাচক / নেতিবাচক বোতামের রং, শিরোনামের রঙ, বার্তার রঙ এবং পটভূমির রঙ পরিবর্তন করবেন?

উত্তর:


448

তৈরি করার সময় AlertDialogআপনি কোনও থিম ব্যবহার করতে পারেন।

উদাহরণ - সংলাপ তৈরি করা

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyAlertDialogStyle);
builder.setTitle("AppCompatDialog");
builder.setMessage("Lorem ipsum dolor...");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

styles.xML - কাস্টম শৈলী

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>
</style>

ফলাফল

স্টাইলযুক্ত সতর্কতা

সম্পাদন করা

শিরোনাম উপস্থিতি পরিবর্তন করতে, আপনি নিম্নলিখিত করতে পারেন। প্রথমে একটি নতুন স্টাইল যুক্ত করুন:

<style name="MyTitleTextStyle">
    <item name="android:textColor">#FFEB3B</item>
    <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
</style>

এরপরে আপনার এই স্টাইলটি কেবল রেফারেন্স করুন MyAlertDialogStyle:

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    ...
    <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
</style>

এইভাবে আপনি textColorবার্তার মাধ্যমে মেসেজের android:textColorPrimaryজন্য আলাদা এবং শৈলীর মাধ্যমে শিরোনামের জন্য পৃথক করতে পারবেন ।


2
আপনাকে আর একটি জিনিস ধন্যবাদ। অনেক লাইব্রেরিতে আলাদা আলাদা শিরোনাম এবং পাঠ্য রঙ থাকতে দেয়। আপনি কি জানেন যে এখানেও এটি সম্ভব কিনা?
থানোস ফিশারম্যান

3
ওহে আবার! বার্তার পাঠ্য আকার পরিবর্তন করার কোনও উপায় আছে?
থ্যানোস ফিশারম্যান

1
@ থ্যানোসএফ দুর্ভাগ্যক্রমে আমি এমন কোনও এক্সএমএল বৈশিষ্ট্য সম্পর্কে অবগত নই যা এটি করে। তবে এটি অবশ্যই জাভা-কোডের মাধ্যমে সম্ভব।
পুনর্বিবেচনা করুন

2
@ সুমার্স জুপ এটি মূলত ধারণা appcompat-v7- এটি এপিআই লেভেল 7 (অ্যান্ড্রয়েড 2.1) এর নিচে নতুন উপাদানগুলির সামঞ্জস্যতা পিছনে
আনছে

1
21++ এ বোতামের পাঠ্যের রঙের কাজ করার জন্য, আমাকে কাস্টম বোতাম শৈলীতে একটি "অ্যান্ড্রয়েড: বোতামস্টাইল আইটেমটি" মাইআলার্টডায়ালগ স্টাইল "এবং একটি অ্যান্ড্রয়েড: পাঠ্য রঙের আইটেমটি থাকতে হয়েছিল।
টিম অটিন

61

সমস্ত অ্যাপ্লিকেশনের জন্য একটি থিম ব্যবহার করতে এবং আপনার ডায়ালগটি স্টাইল করার জন্য দ্বিতীয় পরামিতি ব্যবহার করবেন না

<style name="MyTheme" parent="Base.Theme.AppCompat.Light">
    <item name="alertDialogTheme">@style/dialog</item>
    <item name="colorAccent">@color/accent</item>
</style>

<style name="dialog" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/accent</item>
</style>

আমার অ্যাপ্লিকেশনে থিমের রঙিন অ্যাকসেন্ট ব্যবহার করে থিম রঙের সাথে সতর্কতা ডায়ালগের বোতামগুলি দেখাবেন না তবুও আমাকে থিমটিতে একটি ডায়ালগ শৈলী যুক্ত করতে হবে।


এপিআই 10 (অ্যান্ড্রয়েড 2.3) এ কাজ করে না, সম্ভবত কেবলমাত্র এপিআই 11+ on
অলিভ

2
এপিআই 15+ এ হতে পারে। আমি শুধু API- এর উপর নতুন প্রকল্প শুরু 15+, আমি মনে করি যা Android সামনে 4 2015. অপ্রচলিত
neoteknic

@ অলিভ এটি নির্ভরশীলতা com.android.support:design:23.2.1
passerby

আইডিইএ বলছে যে বেস 21.২০ + এ ​​থিম.এপ.কম্প্যাট.লাইট.ডায়ালগ.আরল্ট 'কম.অ্যান্ড্রয়েড.সাম্পোর্ট: ডিজাইন২২.২.১' ব্যবহার করে
ফিলিপ

@ ফিলিপ অ্যান্ড্রেড আলওয়ে সর্বশেষতম এসডিকে সংস্করণটি লক্ষ্য করুন, এটি কাজ করা উচিত! আমার মিনি মিনি এপি 15 এবং টার্গেট 25 ডিজাইন সহ একটি প্রজেক্ট রয়েছে: 22.x অপ্রচলিত, 25.1.x এবং আরও বেশি ব্যবহার করুন
নিউটেকনিক

19

আপনি যদি নতুন android.support.v7.app.AlertDialog ব্যবহার করতে চান এবং বোতামগুলির জন্য বিভিন্ন রঙ এবং কাস্টম লেআউট পেতে চান তবে আমার https://gist.github.com/JoachimR/6bfbc175d5c8116d411e দেখুন

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.custom_layout, null);

    initDialogUi(v);

    final AlertDialog d = new AlertDialog.Builder(activity, R.style.AppCompatAlertDialogStyle)
            .setTitle(getString(R.string.some_dialog_title))
            .setCancelable(true)
            .setPositiveButton(activity.getString(R.string.some_dialog_title_btn_positive),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            doSomething();
                            dismiss();
                        }
                    })
            .setNegativeButton(activity.getString(R.string.some_dialog_title_btn_negative),
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dismiss();
                        }
                    })
            .setView(v)
            .create();

    // change color of positive button         
    d.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = d.getButton(DialogInterface.BUTTON_POSITIVE);
            b.setTextColor(getResources().getColor(R.color.colorPrimary));
        }
    });

    return d;
}

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


দারুণ! ধন্যবাদ
থ্যানোস ফিশারম্যান

ধন্যবাদ, এটি আমার পক্ষে কাজ করার একমাত্র উপায়, তবে আপনি কী আমাকে চেকবক্সের জন্য রঙ পেতে পারেন তা আমাকে বলতে পারেন? আমার অ্যাপ্লিকেশনে, একটি সংলাপ রয়েছে যার মাধ্যমে তৈরি রেডিও বোতামগুলির একটি তালিকা রয়েছে Builder setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)। আমি অ্যাডাপ্টারের সাবক্লাসিং এবং সেখানে দৃশ্যটি টুইট করার মতো যেতে চাই না।
গ্যাবর

ভারী আর্টিলারি সবসময় কাজ করে! আমাকে এটি 2 বিদ্রোহী বোতামগুলির যত্ন নিতে ব্যবহার করতে হয়েছে যা সর্বদা অ্যাকসেন্টের রঙে পরিবর্তন করতে অস্বীকার করেছিল!
রুপস

7

@ReVerse উত্তরের অনুসরণ করুন তবে আমার ক্ষেত্রে আমার ইতিমধ্যে আমার AppThemeমতো কিছু সম্পত্তি ছিল

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
    <item name="android:textColor">#111</item>
    <item name="android:textSize">13sp</item>
</style>

সুতরাং আমার ডায়ালগটি দেখতে ভাল লাগবে
এখানে চিত্র বর্ণনা লিখুন

আমি এটি দ্বারা সমাধান

1) পরিবর্তন করুন থেকে আমদানি android.app.AlertDialogকরতে android.support.v7.app.AlertDialog
2) আমি 2 সম্পত্তি ওভাররাইড AppThemeনাল মান

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Used for the buttons -->
    <item name="colorAccent">#FFC107</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">#FFFFFF</item>
    <!-- Used for the background -->
    <item name="android:background">#4CAF50</item>


    <item name="android:textColor">@null</item>
    <item name="android:textSize">@null</item>
</style>

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.MyAlertDialogStyle);

আশা করি এটি অন্য লোকেদের সহায়তা করবে

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


আহ, আপনাকে ধন্যবাদ! আমি সমর্থন সতর্কতা ডায়ালগ ব্যবহার করছিলাম না।
মাস্টারওয়াক

1

আপনি যদি আমার মতো হন তবে আপনি কেবল অ্যাপকম্পেটের কয়েকটি রঙ পরিবর্তন করতে চান এবং ডায়ালগটিতে অনন্যভাবে পরিবর্তন করার জন্য আপনার কেবলমাত্র রঙের ব্যাকগ্রাউন্ড। তারপরে আপনাকে যা করতে হবে তা হল একটি রঙ সেট করা colorBackgroundFloating

এখানে আমার মূল থিমটি যা কোনও নেস্টেড থিমগুলি সহ কিছু রঙকে কেবল পরিবর্তন করে:

    <style name="AppTheme" parent="Theme.AppCompat">
        <item name="colorPrimary">@color/theme_colorPrimary</item>
        <item name="colorPrimaryDark">@color/theme_colorPrimaryDark</item>
        <item name="colorAccent">@color/theme_colorAccent</item>
        <item name="colorControlActivated">@color/theme_colorControlActivated</item>
        <item name="android:windowBackground">@color/theme_bg</item>
        <item name="colorBackgroundFloating">@color/theme_dialog_bg</item><!-- Dialog background color -->
        <item name="colorButtonNormal">@color/theme_colorPrimary</item>
        <item name="colorControlHighlight">@color/theme_colorAccent</item>
    </style>

-3
    <item name="editTextColor">@color/white</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textColorHint">@color/gray</item>
    <item name="android:textColorPrimary">@color/gray</item>
    <item name="colorControlNormal">@color/gray</item>
    <item name="colorControlActivated">@color/white</item>
    <item name="colorControlHighlight">#30FFFFFF</item>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.