স্ক্রিন অ্যান্ড্রয়েডে ডায়ালগের অবস্থান পরিবর্তন করা


111

আমি AlertDialogআমার ক্রিয়াকলাপে একটি সহজ করেছিলাম :

View view = layoutInflater.inflate(R.layout.my_dialog, null);
AlertDialog infoDialog = new AlertDialog.Builder(MyActivity.this)
                    .setView(view)  
                    .create();

infoDialog.show();

উপরের কোড সহ, ডায়ালগটি স্ক্রিনের (প্রায়) কেন্দ্রস্থলে প্রদর্শিত হয়।

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


আপনি যদি আমাদের আমার ডায়ালগ এক্সএমএল লেআউটটি দেখান তবে আমরা সম্ভবত আপনাকে পরিবর্তন করতে সহায়তা করতে পারি।
অ্যালান মুর


@ অঙ্কিত, আপনি কি উত্তর হিসাবে আপনার মন্তব্য রাখতে পারেন, কারণ আপনার লিঙ্কটি পরীক্ষা করে দেখার পরে আমার সমস্যা সমাধান হয়ে যায়।
লীম.ফিন

উত্তর:


235

আমি এই কোডটি স্ক্রিনের নীচে ডায়লগটি দেখানোর জন্য ব্যবহার করেছি:

Dialog dlg = <code to create custom dialog>;

Window window = dlg.getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();

wlp.gravity = Gravity.BOTTOM;
wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(wlp);

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


হাই, ধন্যবাদ. আমি এর মাধ্যাকর্ষণটিকে শীর্ষে রেখেছি, ডায়ালগটি স্ক্রিনের শীর্ষে চলে যায়, তবে এটি আমার অ্যাকশন বারটিও coveredেকে দেয়, আমি ডায়ালগটি শীর্ষে চাই তবে কেবল অ্যাকশন বারের নীচে ... কীভাবে এটি সামঞ্জস্য করব?
লিম.ফিন

6
আপনি ডায়ালগটির অবস্থানটি স্ক্রিনে স্পষ্টভাবে সেট করতে আপনি wlp.xএবং wlp.yক্ষেত্রগুলি চেষ্টা করতে পারেন । আমি নিজে চেষ্টা করে দেখিনি, তবে এটি সম্ভবত কাজ করা উচিত।
আলেক্স জি

4
ডিমিংয়ের ক্লিয়ারিংটি আমার পক্ষে কার্যকর হয়নি (যদিও বাকীগুলি মনোযোগের মতো কাজ করেছিল)। আমি উইন্ডো। ক্লেয়ারফ্ল্যাগস (উইন্ডো ম্যানেজ। লেআউটপ্যারামস.এফএলএজি_ডিআইএম_বিইআইএনডি) আকারে অন্য একটি স্পষ্টে ম্লানির সমাধান পেয়েছি;
রাবারডাক

@ আলেকসজি ডায়লগকে কেন্দ্রে রেখে ম্লান পটভূমির রঙ পরিবর্তন করার কোনও উপায় আছে? আমি উইন্ডোজআইফ্লোটিং = ডায়লগ শৈলীতে মিথ্যা সেট করার চেষ্টা করেছি। কিন্তু এটি শীর্ষে dailog সারিবদ্ধ!
ক্ষিতিজ

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

23
private void showPictureialog() {
    final Dialog dialog = new Dialog(this,
            android.R.style.Theme_Translucent_NoTitleBar);

    // Setting dialogview
    Window window = dialog.getWindow();
    window.setGravity(Gravity.CENTER);

    window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
    dialog.setTitle(null);
    dialog.setContentView(R.layout.selectpic_dialog);
    dialog.setCancelable(true);

    dialog.show();
}

মাধ্যাকর্ষণ এবং লেআউট পরামিতিগুলির উপর ভিত্তি করে আপনি আপনার ডায়ালগটি কাস্টমাইজ করতে পারেন আপনার প্রয়োজনীয়তার ভিত্তিতে মাধ্যাকর্ষণ এবং লেআউট প্যারামিটার পরিবর্তন করুন


1
হাই, ধন্যবাদ. আমি এর মাধ্যাকর্ষণটিকে শীর্ষে রেখেছি, ডায়ালগটি স্ক্রিনের শীর্ষে চলে যায়, তবে এটি আমার অ্যাকশন বারটিও coveredেকে দেয়, আমি ডায়ালগটি উপরে চাই তবে কেবল অ্যাকশন বারের নীচে ... কীভাবে এটি সামঞ্জস্য করব?
লিম.ফিন

3
আপনি বিন্যাসের মার্জিন শীর্ষ স্থাপন করতে পারেন
রমেশ সোলঙ্কি

'FILL_PARENT'অবচয় করা হয়। আমি এপিআই 21 এ আছি
Develop

1
@ fWd82 সুতরাং পরিবর্তে 'ম্যাচ_প্যারেন্ট' ব্যবহার করুন
উইলিয়াম

13

আমি এখানে জিপসিকোডার কোড থেকে এই কোড স্নিপেট পেয়েছি

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 পজিশনের জন্য মান নীচ থেকে উপরে।


10

আমার জন্য, এটি বেশ ভালভাবে কাজ করেছে যেখানে আমি আমার ডায়ালগটি যেখানে পাঠ্যদর্শনটি নির্বাচিত হবে তার ঠিক নীচে ঠিক কোথাও অবস্থান করার চেষ্টা করছিলাম।

public void setPosition(int yValue) {
    Window window = getWindow();
    WindowManager.LayoutParams param = window.getAttributes();
    param.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL;
    param.y = yValue;
    window.setAttributes(param);
    window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}


5

আপনার কোডে এটি যুক্ত করুন:

dialog.getWindow().setGravity(Gravity.BOTTOM);


1

আমার ডায়ালগ ক্রিয়াকলাপের জন্য আমি এটি ব্যবহার করেছি:

WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.gravity = Gravity.BOTTOM;

1

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

 @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
    Window window = dialog.getWindow();
    WindowManager.LayoutParams wlp = window.getAttributes();
    wlp.gravity = Gravity.BOTTOM;
    dialog.setContentView(R.layout.dialog_droppoint);
    dialog.show();
    window.setAttributes(wlp);
    return dialog;

}

0

নীচে ব্যবহার করুন শীট:

BottomSheetDialog dialog = new BottomSheetDialog(YourActivity.this);
dialog.setContentView(YourView);
dialog.show();

0
public class MyDialogFragment extends DialogFragment{
    protected void setDialogGravity(int gravity) {
        Dialog dialog = getDialog();
        if (dialog != null) {
            Window window = dialog.getWindow();
            if (window != null) {
                WindowManager.LayoutParams params = window.getAttributes();
                params.width = WindowManager.LayoutParams.MATCH_PARENT;
                params.height = WindowManager.LayoutParams.MATCH_PARENT;
                params.horizontalMargin = 0;
                params.gravity = gravity;
                params.dimAmount = 0;
                params.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
                window.setAttributes(params);
            }
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreateView(inflater,container,savedInstanceState);

        return inflater.inflate(R.layout.my_dialog, null);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
                super.onViewCreated(view, savedInstanceState);
                setDialogGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.