स्क्रीन एंड्रॉइड पर डायलॉग की स्थिति बदलना


111

मैंने AlertDialogअपनी गतिविधि में एक सरल बनाया :

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

infoDialog.show();

उपरोक्त कोड के साथ, संवाद स्क्रीन के केंद्र पर (के बारे में) दिखाता है।

मैं सोच रहा हूं, मैं इसे केवल शीर्ष एक्शन बार के तहत दिखाने के लिए संवाद स्थिति को कैसे अनुकूलित कर सकता हूं? (वहाँ वैसे भी गुरुत्वाकर्षण या संवाद के कुछ बदलने के लिए है?) और यह मेरे कोड के आधार पर कैसे करें ??


यदि आप हमें अपना my_dialog xml लेआउट दिखाते हैं, तो शायद हम आपको बदलाव करने में मदद कर सकें।
एलन मूर


@ अंकित, क्या आप अपनी टिप्पणी एक उत्तर के रूप में दे सकते हैं, क्योंकि मेरी समस्या आपके लिंक की जाँच के बाद हल हो जाती है।
Leem.fin

जवाबों:


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);

यदि आपको आवश्यकता हो तो यह कोड Android को संवाद की पृष्ठभूमि को बनाए रखने से भी रोकता है। आपको संवाद को स्थानांतरित करने के लिए गुरुत्वाकर्षण पैरामीटर को बदलने में सक्षम होना चाहिए


धन्यवाद। मैंने इसके गुरुत्वाकर्षण को शीर्ष पर सेट किया है, संवाद स्क्रीन के शीर्ष पर जाता है, लेकिन इसने मेरे एक्शन बार को भी कवर किया है, मैं शीर्ष पर संवाद को पसंद करूंगा लेकिन एक्शन बार के तहत ... इसे कैसे समायोजित किया जाए?
लेम.फिन

6
आप स्क्रीन पर संवाद का स्थान स्पष्ट रूप से सेट करने के लिए फ़ील्ड wlp.xऔर wlp.yफ़ील्ड का उपयोग करने का प्रयास कर सकते हैं। मैंने खुद इसकी कोशिश नहीं की है, लेकिन यह शायद काम करना चाहिए।
एलेक्स जी

4
डिमिंग की समाशोधन ने मेरे लिए काम नहीं किया (हालांकि बाकी ने एक आकर्षण की तरह काम किया)। मुझे एक अन्य स्थान पर डिमिंग के लिए एक समाधान मिला: window.clearFlags (WindowManager.LayoutParams.FLAG_DIM_BEHIND);
रबरडक

@AleksG भी मंद पृष्ठभूमि के रंग को बदलने का एक तरीका है जो केंद्र में डैलॉग को रखता है? मैंने windowIsFloating = dailog स्टाइल को झूठा साबित करने की कोशिश की। लेकिन यह शीर्ष पर dailog संरेखित करें!
क्षितिज

@ क्षितिज यदि आप केंद्र में संवाद रखना चाहते हैं, तो आपको इस कोड की कोई आवश्यकता नहीं है - डिफ़ॉल्ट रूप से Android केंद्र संवाद। मंद रंग बदलने के लिए, इस विषय द्वारा नियंत्रित किया जाता है। आप अपने ऐप में संबंधित थीम को शामिल करके इसे ओवरराइड करने में सक्षम हो सकते हैं। मैंने हालांकि कभी इसकी कोशिश नहीं की।
एलेक्स जी

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
धन्यवाद। मैंने इसके गुरुत्वाकर्षण को शीर्ष पर सेट किया है, संवाद स्क्रीन के शीर्ष पर जाता है, लेकिन इसने मेरे एक्शन बार को भी कवर किया है, मैं शीर्ष पर संवाद को पसंद करूंगा लेकिन एक्शन बार के तहत ... इसे कैसे समायोजित किया जाए?
लेम.फिन

3
आप लेआउट का मार्जिन टॉप सेट कर सकते हैं
रमेश सोलंकी

'FILL_PARENT'पदावनत किया गया है। मैं एपीआई 21 पर हूं। डेवलपर संदर्भ के अनुसार
fwd82

1
@ fWd82 इसके बजाय 'MATCH_PARENT' का उपयोग करें
विलियम

13

मैं @gypsicoder कोड से इस कोड स्निपेट पाया यहाँ

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();

यहां x स्थिति का मान बाएं से दाएं पिक्सेल है। 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);
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.