স্ক্রিনের যে কোনও অবস্থানে সতর্কতা ডায়ালগ প্রদর্শন করুন


106

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

উত্তর:


255

বিভিন্ন পোস্টে অনুসন্ধানের পরে আমি সমাধানটি খুঁজে পেয়েছি।

কোডটি নীচে পোস্ট করা হয়েছে:

private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"};
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {

            if(item == 0) {

            } else if(item == 1) {

            } else if(item == 2) {

            }
        }
    });

     AlertDialog dialog = builder.create();
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
     WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes();

 wmlp.gravity = Gravity.TOP | Gravity.LEFT;
 wmlp.x = 100;   //x position
 wmlp.y = 100;   //y position

 dialog.show();

এখানে এক্স পজিশনের মান বাম থেকে ডানে পিক্সেল। Y পজিশনের জন্য মান নীচ থেকে উপরে।


1
আপনি একটি কাস্টম সতর্কতা ডায়ালগও তৈরি করতে পারেন। আমি সম্প্রতি এটি করেছি এবং তারপরে ডিসপ্লে প্রস্থ এবং উচ্চতা পেতে হয়েছিল এবং তারপরে এই মানগুলির শতাংশের উপর ভিত্তি করে এক্স এবং ওয়াই সেট করতে হয়েছিল, এইভাবে বিন্যাসটি সুন্দরভাবে পরিমাপ করা হয়েছিল। বিকাশকারী.অ্যান্ড্রয়েড.
com

15
এটি কাজ করে তবে আমাকে এটি যুক্ত করতে হয়েছিল: ডাব্লুএমএলপি.গ্রাভিটি = মাধ্যাকর্ষণ T টিওপি | Gravity.LEFT; অন্যথায় x এবং y মানগুলি পর্দার কেন্দ্র থেকে অফসেট হিসাবে ব্যবহৃত হত।
BoD

1
কেবল অভিজ্ঞতাটি ভাগ করে নেওয়ার জন্য: উপরের কোডটি ততক্ষণ কাজ করবে যতক্ষণ ডায়ালগটি পর্দায় পুরোপুরি থাকতে পারে। উদাহরণস্বরূপ, যদি নতুন y- স্থানাঙ্কটি খুব বড় হয় তবে ডায়ালগটি পর্দার সর্বনিম্ন অবস্থানে চলে যায় যা এখনও পুরো ডায়ালগটি দেখায়। এখানে জটিল অংশটি হ'ল লেআউট প্যারামিটারগুলির x এবং y মানগুলি তখন থেকে ডায়ালগ উইন্ডোর উপরের বাম কোণার স্থানাঙ্কগুলি আর দেখাবে না এবং উদাহরণস্বরূপ উইন্ডোটির আপেক্ষিক চলন গণনার জন্য ব্যবহার করা যাবে না একটি মোশনওয়েভে প্রতিক্রিয়া।
ন্যান্টোকা

1
কোন প্রয়োজন ..কিন্তু যাদুমন্ত্র মত কাজ করে সেট করতে wmlp.x = 100; //x position wmlp.y = 100;আপনি শুধু সেট মাধ্যাকর্ষণ wmlp.gravity = Gravity.TOP | Gravity.LEFT;যথেষ্ট
অজয় মিস্ত্রি

14

আপনি উদাহরণস্বরূপ যদি অগ্রগতি ডায়ালগটি আরও কিছুটা নিচে সরিয়ে নিতে চান এবং এক্সটাক্ট পিক্সেল অবস্থান নির্ধারণ না করে থাকেন তবে এটি যথেষ্ট:

progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;

যার মাধ্যাকর্ষণ কেন্দ্রিক সতর্কতা সংলাপে আমি প্রায় 10 ডিপি মার্জিন দিতে চাই। আমি কি উপরের কোডটি ব্যবহার করতে পারি? যদি তা না হয়, তবে এটি করার কোনও অন্য উপায় আছে?
আমান ভার্মা

5

সেটিংটি তথ্য কার্যকর করতে, আমি নিম্নলিখিত কোডটি যুক্ত করেছি
dialog.getWindow().setAttributes(wmlp);

জিপসিকোডার এর উত্তরে wmlp এর মান পরিবর্তন করার পরে, বা wmlp এর সেটিংটি আমার পরীক্ষার দ্বারা কার্যকর হয় না।


0

এই উত্তরগুলি সতর্কতা ডায়ালগের অবস্থানকে সরিয়ে ফেলবে, তবে প্রদর্শিত ডায়ালগের অবস্থানটি ডায়ালগের চারপাশে প্যাডিং অন্তর্ভুক্ত করবে।

আপনি যদি এই প্যাডিং থেকে মুক্তি পেতে চান (উদাহরণস্বরূপ, আপনার ডায়ালগটি পর্দার নীচে বিপরীতে রাখতে), আপনার উইন্ডোব্যাকগ্রাউন্ডটি নালায় সেট করতে আপনার স্টাইলস.এক্সএমএল-এ ডিফল্ট সতর্কতা ডায়ালগ স্টাইলও ওভাররাইড করতে হবে so :

<resources>
    <!--  Example app theme - mine uses the below -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:alertDialogTheme">@style/MyDialogTheme</item>
    </style>

    <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <!-- Full width -->
        <item name="android:layout_width">fill_parent</item>

    <!-- Null window background kills surrounding padding -->
        <item name="android:windowBackground">@null</item>
        <item name="android:windowNoTitle">true</item>

     </style>
</resources> 

পাশাপাশি উইন্ডোটি সেট করে নিন the

@ ডেভিড কাউন্টের জন্য বিশেষ চিৎকার - যার উত্তর: বর্ডার সরান, ডায়ালগ থেকে প্যাডিং এই ছবিটি সম্পূর্ণ করেছে completed

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