Dialog Layar Penuh di Android


164

Saya mencoba menampilkan DialogFragment hampir layar penuh. Tetapi saya entah bagaimana tidak dapat melakukannya.

Cara saya menunjukkan Fragmen langsung dari dokumentasi pengembang android

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

Saya tahu secara naif mencoba mengatur RelativeLayout dalam fragmen menjadi fill_parent dan beberapa minWidth dan minHeight.

<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">

Saya akan tahu mengharapkan DialogFragment untuk mengisi sebagian besar layar. Tapi sepertinya saya hanya mengubah ukuran secara vertikal tetapi hanya sampai beberapa lebar tetap secara horizontal.

Saya juga mencoba mengatur atribut Window dalam kode, seperti yang disarankan di sini: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Tapi ini juga tidak membantu.

Saya mungkin salah paham tentang bagaimana Android menangani Dialog, karena saya baru mengenalnya. Bagaimana saya bisa melakukan sesuatu seperti ini? Apakah ada cara alternatif untuk mencapai tujuan saya?


Perangkat Android:
Asus EeePad Transformer
Android 3.0.1


Pembaruan: Saya sekarang berhasil memasukkannya ke layar penuh, dengan kode berikut dalam fragmen

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

Sayangnya, ini bukan keinginan yang saya inginkan. Saya pasti membutuhkan "padding" kecil di sekitar dialog untuk menunjukkan latar belakang.

Ada ide bagaimana mencapainya?



Anda menghemat waktu saya, tysm
Arul Mani

Jawaban:


73

Cobalah beralih ke LinearLayoutbukan RelativeLayout. Saya menargetkan api 3.0 Honeycomb saat pengujian.

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

}
}

dan tata letak : fragment_dialog.xml

<?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>

Dan bagi saya, saya perlu menggunakan RelativeLayout, tetapi lebar dialog tidak menyesuaikan dengan benar ke konten, jadi saya menyarungkan RelativeLayout di LinearLayout yang satu-satunya anak adalah RelativeLayout ... ini memicu penyesuaian lebar yang tepat.
Peter Ajtai

1
Saya menguji semuanya, tetapi saya dapat mengkonfirmasi satu-satunya hal yang berfungsi untuk DialogFragment saya adalah membungkus seluruh tata letak saya dalam LinearLayout. Dengan begitu saya bisa mengatur lebar dan tinggi dari tata letak asli saya (sekarang dibungkus) ... terbuang berjam-jam untuk ini
Sampai

6
Menetapkan minWidth dan minHeight untuk menjadi sesuatu yang besar tampaknya menjadi bagian penting; tapi ini adalah retasan alih-alih solusi bersih. Jawaban yang diberikan oleh @David di bawah ini - dijelaskan lebih lanjut dalam tautan yang dia berikan - juga berfungsi dan bersih.
Garlef Wegart

@ tir38 Saya tidak berpikir itu benar karena onCreateDialog () sudah memiliki implementasi di superclass.
starkej2

Ini harus menjadi jawaban yang diterima. Rumit dan jelas
mutiemule

179

Untuk mendapatkan DialogFragment di layar penuh

Timpa onStartDialogFragment Anda seperti ini:

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

Dan terima kasih banyak untuk posting ini: The-mystery-of-androids-full-screen-dialog-fragmen


6
Tepat ini berfungsi, tetapi saya mencoba dengan Videoview dan tidak berfungsi untuk itu. StatusBar masih menunjukkan. Jadi ini memperbaiki saya di bawah kode: dialog.getWindow (). SetFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
WhiteHorse

1
akhirnya memilah, thansk untuk saran @ David
Ashu Kumar

1
Ini bekerja dengan baik untuk saya. Saya menggunakan ViewGroup.LayoutParams.WRAP_CONTENTuntuk ketinggian. Terima kasih.
Bingung

1
ini bersih dan tidak dapat
diretas

7
ini tidak berfungsi untuk kasus saya .. ini menunjukkan padding dari semua sudut. ada bantuan?
Abdul Waheed

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

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

7
Satu-satunya solusi yang sepertinya berhasil bagi saya. Yang lain kadang bekerja, kadang tidak. Semoga saja saya tidak menemukan pengecualian untuk yang satu ini :)
azertiti

12
Ini bekerja untuk saya juga. Sementara jika Anda ingin latar belakang menjadi transparan, Anda harus menggunakan '' 'android.R.style.Tema_Translucent_NoTitleBar' ''
acntwww

2
Kuncinya adalah melewati STYLE_NORMAL. Ini membuat dialog untuk mengisi layar sama seperti aktivitas lainnya. Kita bisa menggunakan tema apa saja. Untuk desain material, Anda bisa mendapatkan tema material (mis. Theme.AppCompat.NoActionBar yang menjaga dekorasi sistem tetapi menghapus panel aksi).
rpattabi

2
Ha-ha, ketika saya meluncurkan, layar hitam muncul dan saya pikir itu telah dibekukan. Lalu saya mengubah tema menjadi Theme_Light_NoTitleBar_Fullscreen. Terima kasih, dialog menempati seluruh layar (termasuk bilah status).
CoolMind

1
Theme_DeviceDefault_Light_NoActionBar_Fullscreen fow layar dialog dengan latar belakang putih.
Hitesh Sahu

45

Menurut tautan ini DialogFragment menunjukkan layar penuh padding di sisi ini akan bekerja seperti pesona.

@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
Bekerja dengan baik, bahkan pada tahun 2018! (tidak ada yang lain) Terima kasih.
AutonomousApps

2
Ini adalah jawaban sempurna bahkan di Android Studio 3.1+ pada tahun 2018, lebih baik daripada jawaban lain yang ada di sini. Jawaban lain akan mematahkan UI Android seperti cardview, spinner, dll.
Taufik Nur Rahmanda

1
Bekerja dengan apik di tahun 2020!
Yue Yin

Berfungsi tetapi jika Anda ingin mendefinisikan margin dalam tata letak XML Anda, Anda harus membungkus pandangan Anda dengan tata letak lain, jika tidak margin akan diabaikan.
Felipe Ribeiro R. Magalhaes

29

Buat DialogFragment layar penuh dengan hanya menggunakan gaya

Solusi pertama

1. Tambahkan ke Anda 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>

2. Tambahkan ke DialogFragment Anda:

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

Solusi alternatif

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

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

di mana AppThemetema yang Anda tetapkan dalam gaya.


Ini cara yang lebih elegan daripada jawaban bradley4.
MeLine

solusi satu garis sempurna
me_

Kedua solusi berhasil, tetapi yang pertama menyebabkan bug dengan popup clipboard. Alternatif bekerja dengan baik
Janusz Hain

18

Dalam kasus saya, saya menggunakan pendekatan berikut:

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

Plus LinearLayout untuk mengisi semua ruang dengan konten.

Tetapi masih ada celah kecil antara tepi kiri dan kanan dialog dan tepi layar pada beberapa perangkat Lollipop + (misalnya Nexus 9).

Itu tidak jelas tetapi akhirnya saya menemukan itu untuk membuatnya lebar penuh di semua perangkat dan platform latar belakang jendela harus ditentukan di dalam styles.xml seperti berikut:

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

Dan tentu saja gaya ini perlu digunakan ketika kita membuat dialog seperti berikut:

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

Ini jawabannya. Bagus sekali.
VonSchnauzer

2
Saya mencoba sebagian besar jawaban di utas ini, sebagian berhasil, tetapi saya kehilangan semua gaya tema aplikasi compat saya. Saya berharap yang satu ini akan berfungsi karena tema induknya adalah AppCompat. Ini hampir bekerja. Bagi saya, saya harus menambahkan 2 gaya tambahan: <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> Sumber: TechRepublic
Breeno

15

Saya bertemu masalah sebelumnya ketika menggunakan dialogFragment layar penuh: selalu ada padding saat mengatur layar penuh. coba kode ini dalam metode onActivityCreated () dari dialogFragment:

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

Ini berfungsi, solusi lain mengubah tema tombol dan elemen fragmen lainnya.
Yhondri

11

Sejauh API Android diperbarui, metode yang disarankan untuk menampilkan dialog layar penuh adalah sebagai berikut:

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

jika tidak, jika Anda tidak ingin ditampilkan dengan layar penuh, Anda dapat melakukan ini:

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

Semoga ini bisa membantu.

EDIT

Sadarilah bahwa solusi yang saya berikan berhasil tetapi memiliki kelemahan yang terkadang bisa menyusahkan. Menambahkan DialogFragment ke android.R.id.contentwadah tidak akan memungkinkan Anda untuk menanganiDialogFragment#setCancelable() fitur dengan benar dan dapat menyebabkan perilaku yang tidak terduga saat menambahkan DialogFragment itu sendiri ke tumpukan belakang juga.

Jadi saya menyarankan Anda untuk mengubah gaya DialogFragment Anda dengan metode onCreate sebagai berikut:

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

Semoga ini bisa membantu.


1
Saya setuju. Berikut penjelasan lengkap dari panduan Pengembang Android: tautan
user2274431

10

Coba gunakan setStyle () di onCreate dan ganti onCreateDialog membuat dialog tanpa judul

@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;
}

atau hanya menimpa onCreate () dan setStyle sesama kode.

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

8

Memang bisa tergantung pada bagaimana tata letak didefinisikan. Tetapi untuk memastikan bahwa dialog mendapatkan ukuran yang diperlukan, solusi terbaik adalah menyediakan LayoutParams setelah dialog ditampilkan (dan bukan saat pembuatan). Pada DialogFragment dialog ditampilkan pada metode onStart , jadi metode yang valid untuk mendapatkan lebar penuh adalah:

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

Untuk juga menyediakan tema, atau gaya, seperti gaya NO_TITLE, lokasi terbaik ada di metode onCreate :

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

6

Catatan: Bahkan orang dapat menemukan jawaban yang tepat di sini. Tetapi saya ingin mengklarifikasi kebingungan.

Gunakan kode di bawah ini untuk 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);
    }
}

Gunakan kode di bawah ini untuk 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

Dan versi kotlin!

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
Ini benar-benar berfungsi! Saya juga ingin menambahkan, pengembang harus membungkus konten dialog dengan FrameLayout transparan, untuk menghindari deformasi konten.
Georgiy Chebotarev

4

Ini adalah solusi bagaimana saya menemukan masalah ini:

@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

Buat tema di bawah ini di style.xml Anda:

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

lalu atur style di DialogFragment

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

2

Chirag Nagariya benar kecuali penambahan '_Fullscreen'. itu bisa diselesaikan menggunakan gaya dasar apa pun yang tidak berasal dari gaya Dialog. 'android.R.style.Theme_Black_NoTitleBar' dapat digunakan juga.


1

Jika ada orang lain yang menemukan ini, saya memiliki pengalaman yang serupa dengan ini tetapi ternyata masalahnya adalah saya lupa mengembalikan tampilan yang meningkat dari onCreateView (alih-alih mengembalikan super.onCreateView default). Saya hanya mengembalikan tampilan inflasi yang benar dan itu menyelesaikan masalah.


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

Solusi ini menerapkan tema layar penuh pada dialog, yang mirip dengan setStyle Chirag di onCreate. Kerugiannya adalah saveInstanceState tidak digunakan.


1

Coba ini untuk dialog fragmen umum untuk banyak kegunaan. Semoga ini bisa membantu Anda lebih baik

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

silakan lihat pertanyaan ini - stackoverflow.com/questions/45494644/…
Aman Verma

1

Inilah yang perlu Anda atur menjadi fragmen:

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

Dalam kasus Anda:

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

Dan mengapa? Karena DialogFragment (ketika tidak diberi tahu secara eksplisit), akan menggunakan gaya dalamnya yang akan membungkus tata letak khusus Anda di dalamnya (tanpa layar penuh, dll.).

Dan tata letak? Tidak perlu cara hacky, ini berfungsi dengan baik:

<?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>

Nikmati


1

Saya sangat terlambat untuk menjawab pertanyaan ini, saya masih ingin membagikan jawaban ini sehingga di masa depan siapa pun dapat menggunakan ini.

Saya telah menggunakan kode ini dalam proyek saya ini berfungsi dalam versi yang lebih rendah dan juga versi yang lebih tinggi.

Cukup gunakan tema ini di dalam onCreateDialog () seperti ini:

@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_Fullscreen - Ini adalah kode sumber untuk tema ini. Anda hanya dapat melihat tema ini cukup untuk membuat DialogFragment muncul di layar penuh.

<!-- 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>

Tolong beri tahu saya jika ada yang menghadapi masalah. Semoga ini bisa membantu. Terima kasih :)


dialog datang ke layar penuh tetapi semuanya menjadi hitam kecuali tombol. ada ide ??
Sagar Nayak

1

Cara berikut akan bekerja bahkan jika Anda mengerjakan tata letak relatif. Ikuti langkah-langkah berikut:

  1. Buka editor tema (Tersedia di Tools-> Android -> Editor Tema)
  2. Pilih tampilkan semua tema. Pilih satu dengan AppCompat.Dialog
  3. Pilih opsi latar belakang jendela android jika Anda ingin latar belakang berwarna tertentu atau transparan.
  4. Pilih warna dan tekan OK. Pilih nama tema baru.
  5. Pergi ke styles.xml dan kemudian di bawah tema yang baru saja ditambahkan, tambahkan dua atribut ini:

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

Pengaturan tema saya untuk dialog adalah seperti di bawah ini:

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

Pastikan tema memiliki orang tua sebagai Theme.AppCompat.Dialog Cara lain akan membuat gaya baru di styles.xml dan mengubahnya sesuai kode di atas.

  1. Buka kelas Dialog Fragmen Anda dan dalam metode onCreate () , atur gaya Dialog Anda sebagai:

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


1

Tambahkan baris di bawah ini dalam gaya dialog layar penuh.

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

atau: menimpa kesenangan diCreate (disimpanInstanceState: Bundel?) {super.onCreate (disimpanInstanceState) setStyle (DialogFragment.STYLE_NORMAL, R.style.BottomSheetDialogTemaNoFloating) <style name = "BottomSheetDialTemaTema" TemaTema "TemaTema> Tema <Tema> Tema> Tema item name = "android: windowIsFloating"> false </item> </style>
Filipkowicz

0

window.setLayout tidak cukup untuk perangkat yang lebih lama.

Inilah yang saya lakukan:

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

Sebuah solusi dengan menggunakan baru ConstraintLayoutyang membungkus ConstraintLayoutdalam LinearLayoutdengan minHeight dan MinWidth tetap. Tanpa pembungkus, ConstraintLayout tidak mendapatkan ukuran yang tepat untuk Dialog.

<?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

Bekerja untuk saya di Kotlin,

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

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

}

0

solusi berikut ini bekerja untuk saya solusi lain memberi saya beberapa ruang di sisi yaitu layar tidak penuh

Anda perlu membuat perubahan dalam metode onStart dan onCreate

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


   
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.