অ্যান্ড্রয়েডে পূর্ণ স্ক্রিন ডায়ালগফ্রেগমেন্ট


165

আমি প্রায় একটি পূর্ণস্ক্রিন ডায়ালগফ্র্যাগমেন্ট দেখানোর চেষ্টা করছি। তবে আমি একরকম তা করতে পারছি না।

আমি যেভাবে খণ্ডটি দেখিয়ে দিচ্ছি তা অ্যান্ড্রয়েড বিকাশকারী ডকুমেন্টেশন থেকে সরাসরি

FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
    ft.remove(prev);
}
ft.addToBackStack(null);

// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");

আমি জানি যে নির্লজ্জভাবে ভরাট_পিতা এবং কিছু মিনিডথ এবং মিনিটহাইটে টুকরোটিতে রিলেটিভলআউট সেট করার চেষ্টা করেছিলেন।

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"  
    android:minWidth="1000px" 
    android:minHeight="600px"
    android:background="#ff0000">

আমি জানতে পারি ডায়ালগফ্রেগমেন্টটি স্ক্রিনের বেশিরভাগ অংশ পূরণ করবে। তবে আমি কেবল অনুভূমিকভাবে কিছুটা প্রস্থের অনুভূমিকভাবে আকার পরিবর্তন করতে চাইছি।

আমি এখানে পরামর্শ হিসাবে উইন্ডো বৈশিষ্ট্যগুলি কোডে সেট করার চেষ্টাও করেছি: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec । তবে এটিও কোনও কাজে লাগেনি।

অ্যান্ড্রয়েড কীভাবে ডায়ালগগুলি পরিচালনা করে সে সম্পর্কে আমি সম্ভবত কিছু ভুল বুঝছি কারণ এটিতে আমি একেবারেই নতুন। আমি এই জাতীয় কিছু করতে পারি? আমার লক্ষ্যে পৌঁছানোর কোনও বিকল্প উপায় আছে কি?


অ্যান্ড্রয়েড ডিভাইস:
আসুস আইপ্যাড ট্রান্সফর্মার
অ্যান্ড্রয়েড 3.0.০.১


আপডেট: খণ্ডে নিম্নলিখিত কোড সহ আমি এখন এটি পূর্ণ স্ক্রিনে উঠতে পরিচালিত করেছি

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}

দুর্ভাগ্যক্রমে, এটি আমি চাই পুরোপুরি চাই না। ব্যাকগ্রাউন্ডটি দেখানোর জন্য আমার ডায়ালগটির চারপাশে অবশ্যই একটি ছোট "প্যাডিং" দরকার।

কোনও ধারণা কীভাবে এটি সম্পাদন করবেন?



আপনি আমার সময় বাঁচান, জটিল
মণি

উত্তর:


73

এর LinearLayoutপরিবর্তে কোনওটিতে স্যুইচ করার চেষ্টা করুন RelativeLayout। আমি পরীক্ষার সময় 3.0 মধুচক্র এপিআই লক্ষ্য করেছিলাম।

public class FragmentDialog extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button button = (Button) findViewById(R.id.show);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            showDialog();
        }
    });
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

void showDialog() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    DialogFragment newFragment = MyDialogFragment.newInstance();
    newFragment.show(ft, "dialog");
}

public static class MyDialogFragment extends DialogFragment {

    static MyDialogFragment newInstance() {
        MyDialogFragment f = new MyDialogFragment();
        return f;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_dialog, container, false);
        return v;
    }

}
}

এবং লেআউটগুলি : খণ্ড_ডায়ালগ.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:minWidth="1000dp"  
    android:minHeight="1000dp"> 
 </LinearLayout> 

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"
    android:background="#ffffff">
    <Button android:id="@+id/show"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="show">
    </Button>
</LinearLayout>

এবং আমার জন্য, আমার একটি রিলেটিভলআউট ব্যবহার করা দরকার, তবে ডায়ালগের প্রস্থ সামগ্রীগুলির সাথে সঠিকভাবে সামঞ্জস্য করা হচ্ছে না, তাই আমি একটি লিনিয়ারলয়েটে রিলেটিভলআউটকে নীস্ট করেছিলাম, যার একমাত্র সন্তান ছিল রিলেটিভলআউট ... এটি যথাযথ প্রস্থের সামঞ্জস্যকে ট্রিগার করেছিল।
পিটার আজতাই

1
আমি সমস্ত কিছু পরীক্ষা করেছি, তবে আমি নিশ্চিত করতে পারি যে আমার ডায়ালগফ্র্যাগমেন্টের জন্য কাজ করা একমাত্র আমার সম্পূর্ণ বিন্যাসটি একটি লিনিয়ারলআউটে মোড়ানো ছিল। এই ভাবে আমি এই প্রস্থ এবং আমার (বর্তমানে আবৃত) মূল বিন্যাস ... বরবাদ ঘন্টার উচ্চতা সেট পারে
পর্যন্ত

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

@ tir38 আমি এটি সত্য বলে মনে করি না কারণ অনক্রিটডায়ালগ () ইতিমধ্যে সুপারক্লাসে বাস্তবায়ন করেছে।
স্টারকেজ 2

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। বিস্তৃত এবং স্পষ্ট
মুটিমেউল

179

পূর্ণ স্ক্রিনে ডায়ালগফ্রেগমেন্ট পেতে

onStartআপনার ডায়ালগফ্র্যাগমেন্টটি এর মতো ওভাররাইড করুন :

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

এবং এই পোস্টটির জন্য আপনাকে অনেক ধন্যবাদ: অ্যান্ড্রয়েডস-এর পূর্ণ-স্ক্রিন-সংলাপ-টুকরা-এর রহস্য


6
ঠিক এই কাজ করে, কিন্তু আমি ভিডিওভিউ দিয়ে চেষ্টা করেছি এবং এটি তার পক্ষে কাজ করে না। স্ট্যাটাসবার এখনও দেখায়। সুতরাং এটি আমাকে কোডের নীচে স্থির করেছে: কথোপকথন উইন্ডো ()। সেটফ্লে্যাগস (উইন্ডো ম্যানেজ .লাইআউটপ্যারামস.ফ্ল্যাজ_ফুলসক্রেন, উইন্ডো ম্যানেজ.আরলআউটপ্যারামস.ফ্ল্যাগ_ফুলসক্রেন);
হোয়াইটহর্স

1
অবশেষে সাজানোর জন্য, @ ডেভিডের পরামর্শের জন্য থ্যাঙ্কস
আশু কুমার

1
এটি আমার পক্ষে খুব ভাল কাজ করেছে। আমি ViewGroup.LayoutParams.WRAP_CONTENTউচ্চতার জন্য ব্যবহার করেছি । ধন্যবাদ।
ধাঁধা

1
এটি পরিষ্কার এবং অ-হ্যাকি
রোমেক্স

7
এটি আমার ক্ষেত্রে কাজ করছে না .. এটি সমস্ত কোণ থেকে কিছু প্যাডিং দেখাচ্ছে। কোন সাহায্য?
আব্দুল ওয়াহেদ

144
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setStyle(DialogFragment.STYLE_NORMAL,
             android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

7
একমাত্র সমাধান যা আমার পক্ষে কাজ করেছিল বলে মনে হয়েছিল। অন্যরা কখনও কখনও কাজ করতেন, কখনও কখনও ছিলেন না। আসুন আশা করি আমিও এর ব্যতিক্রম
পাব

12
এটি আমার পক্ষেও কাজ করে W তবে আপনি যদি পটভূমিটি স্বচ্ছ হতে চান তবে আপনার উচিত '' 'android.R.style.Theme_Translucent_NoTitleBar' '
acntwww

2
কীটি STYLE_NORMAL দিয়ে যাচ্ছে। এটি অন্য ক্রিয়াকলাপের মতো স্ক্রিনটি পূরণ করতে ডায়লগটিকে তৈরি করে। আমরা যে কোনও থিম ব্যবহার করতে পারি। উপাদান ডিজাইনের জন্য, আপনি একটি উপাদান থিম অর্জন করতে পারেন (যেমন থিম.অ্যাপকম্প্যাট.নো অ্যাকশনবার যা সিস্টেম সজ্জা রাখে তবে অ্যাকশন বার সরিয়ে দেয়)।
আরপট্টবী

2
হা-হা, যখন আমি চালু করলাম তখন একটি কালো পর্দা উপস্থিত হয়েছিল এবং আমি ভেবেছিলাম এটি হিম হয়ে গেছে। তারপরে আমি থিম_লাইট_নাইটিটলবার_ফুলস্ক্রিনে একটি থিম পরিবর্তন করেছি। ধন্যবাদ, একটি ডায়ালগ পুরো পর্দা দখল করে (স্ট্যাটাসবার সহ)।
কুলমাইন্ড

1
থিম_ডভাইস ডিফল্ট_লাইট_নো অ্যাকশনবার_ফুলস্ক্রিন ফো ডায়ালগ সহ ডায়ালগ।
হিতেশ সাহু

45

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

@Override
public Dialog onCreateDialog(final Bundle savedInstanceState) {

    // the content
    final RelativeLayout root = new RelativeLayout(getActivity());
    root.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

    // creating the fullscreen dialog
    final Dialog dialog = new Dialog(getActivity());
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(root);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

    return dialog;
}

4
2018 সালেও দুর্দান্ত কাজ করে! (অন্য কিছু করেনি) ধন্যবাদ।
স্বায়ত্তশাসিত

2
এটি 2018 এর Android স্টুডিও 3.1+ তেও সঠিক উত্তর, এখানে অন্য উত্তরগুলির চেয়ে ভাল। অন্য উত্তরটি অ্যান্ড্রয়েড ইউআই যেমন কার্ডভিউ, স্পিনার ইত্যাদি ভেঙে ফেলবে
তৌফিক নূর রাহমান্দা

1
2020 সালে মোহনীয় কাজ!
ইউ ইয়িন

কাজ করে তবে আপনি যদি আপনার এক্সএমএল লেআউটে মার্জিনগুলি সংজ্ঞায়িত করতে চান তবে আপনাকে অন্য লেআউট দিয়ে আপনার দৃষ্টিভঙ্গি আবদ্ধ করতে হবে, অন্যথায় মার্জিনগুলি উপেক্ষা করা হবে।
ফিলিপ রিবেইরো আর। ম্যাগালহেস

29

শুধুমাত্র স্টাইল ব্যবহার করে একটি পূর্ণ স্ক্রিন ডায়ালগফ্রেগমেন্ট করুন

প্রথম সমাধান

1. আপনার যুক্ত করুন style.xml:

    <style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:backgroundDimEnabled">false</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:padding">0dp</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowBackground">@android:color/transparent</item>
    </style>

২. আপনার ডায়ালগফ্রেগমেন্টে যুক্ত করুন:

@Override
public int getTheme() {
    return R.style.FullScreenDialog;
}

বিকল্প সমাধান

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    setStyle(DialogFragment.STYLE_NO_FRAME, R.style.AppTheme)
}

AppThemeআপনি শৈলীতে সংজ্ঞায়িত থিমটি কোথায় ।


এটি ব্র্যাডলি 4 এর উত্তরের চেয়ে আরও মার্জিত উপায়।
মাইলাইন

নিখুঁত এক লাইন সমাধান
me_

উভয় সমাধান কাজ করে, তবে প্রথমটি ক্লিপবোর্ড পপআপ সহ বাগ তৈরি করেছিল। বিকল্প কাজ সূক্ষ্ম
জানুশ হেইন

18

আমার ক্ষেত্রে আমি নিম্নলিখিত পদ্ধতিটি ব্যবহার করেছি:

    @Override
    public void onStart() {
        super.onStart();
        getDialog().getWindow().setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

প্লাস লিনিয়ারালাউট সামগ্রী সহ সমস্ত স্থান পূরণ করতে।

কিন্তু এখনও ছোট ফাঁক ছিল কিছু ললিপপ + ডিভাইস (যেমন নেক্সাস 9) এর ডায়ালগের বাম এবং ডান প্রান্ত এবং পর্দার প্রান্তগুলির মধ্যে রয়েছে।

এটি সুস্পষ্ট ছিল না তবে শেষ পর্যন্ত আমি বুঝতে পেরেছিলাম যে এটির সমস্ত ডিভাইস এবং প্ল্যাটফর্মের উইন্ডো ব্যাকগ্রাউন্ডে পুরো প্রস্থ তৈরি করতে নীচের মত স্টাইলস.এক্সএমএল এর ভিতরে নির্দিষ্ট করা উচিত :

<style name="Dialog.NoTitle" parent="Theme.AppCompat.Dialog">
    <item name="android:windowNoTitle">true</item>
    <item name="android:padding">0dp</item>
    <item name="android:windowBackground">@color/window_bg</item>
</style>

এবং নিচের মত ডায়লগটি তৈরি করার সময় অবশ্যই এই স্টাইলটি ব্যবহার করা দরকার:

    public static DialogFragment createNoTitleDlg() {
        DialogFragment frag = new Some_Dialog_Frag();
        frag.setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Dialog_NoTitle);
        return frag;
}

এই উত্তর। দুর্দান্ত কাজ করে।
ভনশনাউজার

2
আমি এই থ্রেডে বেশিরভাগ উত্তর চেষ্টা করেছি, কিছু কাজ করেছে, তবে আমি আমার অ্যাপ্লিকেশানের সমস্ত কমপিট থিমের শৈলী হারিয়েছি। আমি আশা করি যে এটি পিতামহীন থিমটি অ্যাপকম্প্যাট হিসাবে কাজ করবে। এটি প্রায় কাজ করে। : আমার জন্য, আমি 2 অতিরিক্ত শৈলী যোগ করার জন্য ছিল <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> : উত্স TechRepublic
Breeno

15

পূর্ণস্ক্রিন ডায়ালগ ব্যবহারের আগে আমি এই সমস্যাটির মুখোমুখি হয়েছি ফ্রেগমেন্ট: ফুলস্ক্রিন সেট করার সময় সর্বদা প্যাডিং থাকে। এই কোডটি ডায়ালগফ্র্যাগমেন্টেরঅ্যাক্টিভিটি ক্রিয়েটেড () পদ্ধতিতে ব্যবহার করে দেখুন:

public void onActivityCreated(Bundle savedInstanceState)
{   
    super.onActivityCreated(savedInstanceState);
    Window window = getDialog().getWindow();
    LayoutParams attributes = window.getAttributes();
    //must setBackgroundDrawable(TRANSPARENT) in onActivityCreated()
    window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    if (needFullScreen)
    {
        window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
    }
}

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

11

যতক্ষণ না অ্যান্ড্রয়েড এপিআই আপডেট হয়েছে, পূর্ণ স্ক্রিন ডায়ালগ দেখানোর জন্য প্রস্তাবিত পদ্ধতিটি হ'ল:

FragmentTransaction transaction = this.mFragmentManager.beginTransaction();
// For a little polish, specify a transition animation
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
// To make it fullscreen, use the 'content' root view as the container
// for the fragment, which is always the root view for the activity
transaction.add(android.R.id.content, this.mFragmentToShow).commit();

অন্যথায়, আপনি যদি এটি সম্পূর্ণ স্ক্রিন প্রদর্শিত না চান আপনি এইভাবে করতে পারেন:

this.mFragmentToShow.show(this.mFragmentManager, LOGTAG);

আশা করি এটা সাহায্য করবে.

সম্পাদনা

সচেতন থাকুন যে সমাধানটি আমি দিয়েছি তবে এটি একটি দুর্বলতা পেয়েছে যা কখনও কখনও কষ্টকর হতে পারে। ডায়ালগফ্রেগমেন্টটি ধারকটিতে যুক্ত করা android.R.id.contentআপনাকে পরিচালনা করতে দেয় নাDialogFragment#setCancelable() বৈশিষ্ট্যটি সঠিকভাবে এবং ডায়ালগফ্র্যাগমেন্টটি নিজেই পিছনের স্ট্যাকটিতে যুক্ত করার সময় অপ্রত্যাশিত আচরণের দিকে পরিচালিত করতে পারে।

সুতরাং আমি আপনাকে নীচের অনুসারে অনক্রিট পদ্ধতিতে আপনার ডায়ালগফ্রেগমেন্টের স্টাইলটি পরিবর্তন করার পরামর্শ দিয়েছি:

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Translucent_NoTitleBar);
}

আশা করি এটা সাহায্য করবে.


1
আমি রাজী. এখানে অ্যান্ড্রয়েড বিকাশকারী গাইডের সম্পূর্ণ ব্যাখ্যা এখানে রয়েছে: লিঙ্ক
ব্যবহারকারী 2274431

10

অনক্রিটে সেটস্টাইল () ব্যবহার করার চেষ্টা করুন এবং অনক্রিটডায়ালগের শিরোনাম ছাড়াই ডায়ালগ তৈরি করতে ওভাররাইড করুন

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme);        
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);        
    return dialog;
}

অথবা কেবল ওক্রাইট () ওভাররাইড করুন এবং স্টাইল স্টাইলকে কোডটি ফেলুন।

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);    
    setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme);        
}

8

এটি প্রকৃতপক্ষে কীভাবে লেআউটটি সংজ্ঞায়িত হয় তার উপর নির্ভর করে। তবে ডায়ালগটি প্রয়োজনীয় আকার পেয়েছে তা নিশ্চিত করার জন্য, ডায়ালগটি প্রদর্শিত হওয়ার পরে (এবং তৈরিতে নয়) একবার লেআউটপ্যারাম সরবরাহ করা সবচেয়ে ভাল সমাধান। একটি DialogFragment উপর ডায়ালগ দেখানো হয়েছে onStart পুরো প্রস্থ পেতে পদ্ধতি, তাই একটি বৈধ পদ্ধতি হল:

@Override public void onStart() {
    super.onStart();
    Dialog d = getDialog();
    if (d!=null){
        d.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

একটি থীম, বা শৈলী প্রদান করতে, একটি NO_TITLE শৈলী মত, আপনাকে সর্বোত্তম অবস্থানের উপর onCreate পদ্ধতি:

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(STYLE_NO_TITLE, android.R.style.Theme_Holo_Light_Dialog);
}

7

দ্রষ্টব্য: এমনকি কেউ এখানে সঠিক উত্তর খুঁজে পেতে পারেন। তবে আমি একটি বিভ্রান্তি স্পষ্ট করতে চাই।

নীচে কোড ব্যবহার করুন android.app.DialogFragment

@Override
public void onStart()
{
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}

নীচে কোড ব্যবহার করুন android.support.v4.app.DialogFragment

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
}

6

আর কোটলিন সংস্করণ!

override fun onStart() {
    super.onStart()
    dialog?.let {
        val width = ViewGroup.LayoutParams.MATCH_PARENT
        val height = ViewGroup.LayoutParams.MATCH_PARENT
        it.window?.setLayout(width, height)
    }
}

1
এটা সত্যিই কাজ করেছে! এছাড়াও আমি যুক্ত করতে চাই, বিকাশকারীদের ডায়ালগের সামগ্রীটি স্বচ্ছ ফ্রেমলাইআউট দ্বারা মোড়ানো উচিত, যাতে সামগ্রীর বিকৃতি এড়ানো যায়।
জর্জিবি চেবোটারেভ

4

আমি এই সমস্যাটি কীভাবে আবিষ্কার করেছি তার সমাধান এটি:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = super.onCreateDialog(savedInstanceState);    
    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);   

    return dialog;
}

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null) {
            dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    }
}

3

আপনার স্টাইল.এক্সএমএলে নীচে থিম তৈরি করুন:

<style name="DialogTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   <item name="android:paddingRight">0dp</item>
   <item name="android:paddingLeft">0dp</item>
   <item name="android:layout_width">match_parent</item>
   <item name="android:windowNoTitle">true</item>
</style>

তারপরে ডায়ালগফ্রেগমেন্টে স্টাইলটি সেট করুন

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, R.style.DialogTheme);
}

2

চিরাগ নগরিয়া '_ফুলস্ক্রিন' সংযোজন বাদে ঠিক আছে। এটি কোনও বেস স্টাইল ব্যবহার করে সমাধান করা যেতে পারে যা ডায়ালগ স্টাইল থেকে প্রাপ্ত নয়। 'android.R.style.Theme_Black_NoTitleBar' পাশাপাশি ব্যবহার করা যেতে পারে।


1

অন্য কেউ যদি এদিকে আসে তবে আমার কাছে এটির একই অভিজ্ঞতা ছিল তবে দেখা যাচ্ছে যে সমস্যাটি হ'ল আমি অনক্রিটভিউ থেকে স্ফীত দৃষ্টিটি ফিরিয়ে দিতে ভুলে গিয়েছিলাম (পরিবর্তে ডিফল্ট সুপার.কনরেটভিউ ফিরে আসছি)। আমি কেবল সঠিক স্ফীত দৃষ্টিভঙ্গি ফিরিয়েছি এবং এটি সমস্যার সমাধান করেছে।


1
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Holo_Light);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    return dialog;
}

এই সমাধানটি ডায়ালগটিতে একটি পূর্ণ স্ক্রিন থিম প্রয়োগ করে, যা অনক্রিটে চিরাগের সেট স্টাইলের অনুরূপ। একটি অসুবিধা হ'ল সেভড ইনস্ট্যান্সস্টেট ব্যবহার হয় না।


1

একাধিক ব্যবহারের জন্য সাধারণ খণ্ড সংলাপের জন্য এটি ব্যবহার করে দেখুন। আশা করি এটি আপনাকে আরও ভালভাবে সহায়তা করবে

public class DialogFragment extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_visit_history_main, container, false);

        getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        initializeUI(rootView);
        return rootView;
    }

    @Override
    public void onStart() {
        super.onStart();
        Dialog dialog = getDialog();
        if (dialog != null) {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }
    }
    private void initializeUI(View rootView) {
    //getChildFragmentManager().beginTransaction().replace(R.id.fv_container,FragmentVisitHistory.getInstance(), AppConstant.FRAGMENT_VISIT_HISTORY).commit();
    }
}

দয়া করে এই প্রশ্নটি দেখুন - stackoverflow.com/questions/45494644/…
আমান ভার্মা

1

এটি আপনার খণ্ডকে সেট করতে হবে:

/* theme is optional, I am using leanback... */
setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);

তোমার ক্ষেত্রে:

DialogFragment newFragment = new DetailsDialogFragment();
newFragment.setStyle(STYLE_NORMAL, R.style.AppTheme_Leanback);
newFragment.show(ft, "dialog");

এবং কেন? কারণ ডায়ালগফ্রেগমেন্ট (যখন স্পষ্টভাবে বলা হবে না), এর অভ্যন্তরীণ শৈলীগুলি ব্যবহার করবে যা এতে আপনার কাস্টম বিন্যাসটিকে আবৃত করবে (পূর্ণস্ক্রিন নয়)।

এবং লেআউট? কোনও হ্যাকি উপায় প্রয়োজন নেই, এটি ঠিক কাজ করছে:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    ...
</RelativeLayout>

উপভোগ করুন


1

এই প্রশ্নের উত্তরের জন্য আমি খুব দেরি করছি এখনও আমি এই উত্তরটি ভাগ করতে চাই যাতে ভবিষ্যতে যে কেউ এটি ব্যবহার করতে পারে।

আমি আমার প্রকল্পে এই কোডটি ব্যবহার করেছি এটি নিম্ন সংস্করণের পাশাপাশি উচ্চতর সংস্করণেও কাজ করে।

কেবলমাত্র এই থিমটি অনক্রিটডায়ালগের ভিতরে ব্যবহার করুন ():

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_pump_details, null);

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
    return builder.create();
}

android.R.style.Theme_Black_NoTitleBar_Fulscreen - এই থিমটির সোর্স কোড এখানে আপনি কেবলমাত্র এই থিমটি দেখতে পাবেন ডায়ালগফ্র্যাগমেন্টটি পুরো স্ক্রিনে উপস্থিত হওয়ার জন্য যথেষ্ট।

<!-- Variant of {@link #Theme_Black} that has no title bar and
     no status bar.  This theme
     sets {@link android.R.attr#windowFullscreen} to true.  -->
<style name="Theme.Black.NoTitleBar.Fullscreen">
    <item name="windowFullscreen">true</item>
    <item name="windowContentOverlay">@null</item>
</style>

কেউ যদি কোনও সমস্যার মুখোমুখি হন তবে আমাকে জানান let আশা করি এটি সহায়ক। ধন্যবাদ :)


ডায়লগ পূর্ণ স্ক্রিনে আসে তবে একটি বোতাম বাদে সবকিছু কালো হয়ে যায়। কোন ধারণা ??
সাগর নায়ক 18'18

1

আপনি যদি কোনও আপেক্ষিক বিন্যাসে কাজ করে থাকেন তবে নীচের উপায়টি কাজ করবে work নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:

  1. থিম সম্পাদকটিতে যান (সরঞ্জাম-> অ্যান্ড্রয়েড -> থিম সম্পাদক এর অধীন উপলব্ধ)
  2. সমস্ত থিম প্রদর্শন নির্বাচন করুন। অ্যাপকম্প্যাট.ডায়ালগ সহ একটি নির্বাচন করুন
  3. বিকল্পটি অ্যান্ড্রয়েড উইন্ডো ব্যাকগ্রাউন্ডটি চয়ন করুন যদি আপনি এটি কোনও নির্দিষ্ট রঙিন পটভূমি বা স্বচ্ছ হতে চান।
  4. রঙ নির্বাচন করুন এবং ঠিক আছে চাপুন new নতুন থিমের একটি নাম নির্বাচন করুন।
  5. স্টাইল.এক্সএমএল এ যান এবং তারপরে সবে যুক্ত থিমের অধীনে এই দুটি বৈশিষ্ট্য যুক্ত করুন:

    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

সংলাপটির জন্য আমার থিম সেটিংটি নীচে রয়েছে:

<style name="DialogTheme" parent="Theme.AppCompat.Dialog" >
    <item name="android:layout_width">match_parent</item>
    <item name="android:layout_height">match_parent</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">false</item>

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

  1. আপনার ডায়ালগ ফ্রেগমেন্ট ক্লাসে যান এবং অনক্রিয়েট () পদ্ধতিতে আপনার ডায়ালগের স্টাইলটি সেট করুন:

    @ ওভাররাইড পাবলিক অকার্যকর অনক্রিট (@ ন্যারেবল বান্ডেল সেভড ইনস্টান্সস্টেট) {সুপার.অনক্রিয়েট (সেভড ইনস্ট্যান্সস্টেট); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }


1

পূর্ণ স্ক্রিন কথোপকথনের শৈলীতে এটি নীচের লাইনগুলি যুক্ত করুন।

<item name="android:windowNoTitle">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>

বা: ওভাররাইড মজা অনক্রিট (সেভডআইনস্ট্যান্সস্টেট: বান্ডেল?) {সুপার.অনক্রিট (সেভড ইনস্ট্যান্সস্টেট) সেট স্টাইল (ডায়ালগফ্রেগমেন্ট.এসটিইএল_নির্মাল, আর.স্টাইল.বটমশীটডায়ালজি থিমনিটলটিং) <শৈল নাম = "বটমথিটোগলিটথাইটিংথাইটথাইটথাইট আইটেমের নাম = "অ্যান্ড্রয়েড windowIsFloating"> মিথ্যা </ আইটেমটি> </ শৈলী>
Filipkowicz

0

window.setLayout পুরানো ডিভাইসের জন্য যথেষ্ট নয়।

আমি যা করি তা এখানে:

try {
    ViewGroup parent = (ViewGroup) view;
    do {
        parent = (ViewGroup) parent.getParent();
        if (parent == null)
            break;

        parent.getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.getLayoutParams().width = ViewGroup.LayoutParams.MATCH_PARENT;
        parent.requestLayout();
    } while (true);
} catch (Exception e){}

0
This below answer works for me in fragment dialog.  


  Dialog dialog = getDialog();
        if (dialog != null)
        {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.MATCH_PARENT;
            dialog.getWindow().setLayout(width, height);
        }

0

নতুন ব্যবহার করে একটি সমাধান ConstraintLayoutমোড়কে হয় ConstraintLayoutএকটি LinearLayoutminHeight এবং minWidth সঙ্গে ঠিক করেছি। মোড়ানো ছাড়া, কনস্ট্রেটলআউট ডায়ালগের জন্য সঠিক আকার পাচ্ছে না।

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="1000dp"
    android:minHeight="1000dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/background_color"
        android:orientation="vertical">
        <!-- some constrained views -->
    </androidx.constraintlayout.widget.ConstraintLayout>

</LinearLayout>

0

কোটলিনে আমার জন্য কাজ করেছেন,

 override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

    dialog?.window?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)

}

0

নিম্নলিখিত সমাধানটি আমার পক্ষে কাজ করেছে অন্য সমাধান আমাকে পক্ষগুলির কিছু জায়গা দিয়েছে পুরো পর্দা নয়

আপনাকে অন স্টার্ট এবং অনক্রিট পদ্ধতিতে পরিবর্তন করা দরকার

@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null)
    {
        int width = ViewGroup.LayoutParams.MATCH_PARENT;
        int height = ViewGroup.LayoutParams.MATCH_PARENT;
        dialog.getWindow().setLayout(width, height);
    }
}


 public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    final Dialog dialog = new Dialog(requireContext());
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
 }


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