Android'de Tam Ekran İletişim Kutusu


165

Neredeyse tam ekran DialogFragment göstermeye çalışıyorum. Ama bir şekilde yapamıyorum.

Parçayı gösterme şeklim doğrudan android geliştirici belgelerinden

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

Ben saf olarak dolgu_eklemeli ve bazı minWidth ve minHeight parçasında RelativeLayout ayarlamak çalıştı biliyorum.

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

DialogFragment ekranın çoğunu doldurmak bekliyoruz biliyorum. Ama sadece dikey olarak yeniden boyutlandırıyorum ama sadece yatay olarak sabit bir genişliğe kadar.

Ayrıca burada önerildiği gibi kodda Pencere Özelliklerini ayarlamaya çalıştım: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Ama bu da yardımcı olmadı.

Muhtemelen Android'de Dialog'ları nasıl ele aldığı hakkında bir şeyler yanlış anlıyorum, çünkü ben onun için yepyeni biriyim. Nasıl böyle bir şey yapabilirim? Hedefime ulaşmak için başka alternatif yollar var mı?


Android Cihaz:
Asus EeePad Transformer
Android 3.0.1


Güncelleme: Şimdi tam ekranda almayı başardım, parçada aşağıdaki kodla

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

Ne yazık ki, bu tam istediğim değil. Kesinlikle arka planı göstermek için iletişim kutusunun etrafında küçük bir "dolgu" gerekir.

Bunu nasıl başaracağınıza dair bir fikrin var mı?



Zamanımı kurtarıyorsun, tysm
Mani

Yanıtlar:


73

LinearLayoutBunun yerine yerine geçmeyi deneyin RelativeLayout. Test sırasında 3.0 Honeycomb api'yi hedefliyordum.

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

}
}

ve düzenler : 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>

Ve benim için, bir RelativeLayout kullanmam gerekiyordu, ancak iletişim kutusu genişliği içeriğe doğru ayarlanmıyordu, bu yüzden RelativeLayout'u tek çocuğu RelativeLayout olan bir LinearLayout'a yerleştirdim ... bu uygun genişlik ayarlamalarını tetikledi.
Peter Ajtai

1
Her şeyi test ettim, ancak DialogFragment'ım için çalışan tek şeyin tüm düzenimi bir LinearLayout'a kaydırdığını doğrulayabilirim. Bu şekilde Bu konuda genişlik ve benim (şimdi sarılı) orijinal düzeni ... boşa saat yüksekliğini ayarlayabilirsiniz
Till

6
MinWidth ve minHeight'ı büyük bir şey olarak ayarlamak çok önemli bir parça gibi görünüyor; ama bu temiz bir çözüm yerine bir hack. @David tarafından verilen cevap - verdiği bağlantıda daha fazla açıklanmıştır - ayrıca çalışır ve temizdir.
Garlef Wegart

@ tir38 Bunun doğru olduğunu düşünmüyorum çünkü onCreateDialog () üst sınıfta zaten bir uygulamaya sahip.
starkej2

Bu kabul edilen cevap olmalı. Ayrıntılı ve açık
mutiemule

179

DialogFragment'ı tam ekranda almak için

onStartDialogFragment'inizi şu şekilde geçersiz kılın :

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

Ve bu gönderiye çok teşekkürler: androidlerin gizemi-tam ekran-iletişim-parçaları


6
Tam olarak çalışır, ancak Videoview ile denedim ve bunun için çalışmıyor. StatusBar hala gösteriyor. Bu beni kodun altına sabitledi: dialog.getWindow (). SetFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
WhiteHorse

1
sonunda sıralamak, thansk öneri @David
Ashu Kumar

1
Bu benim için iyi çalıştı. Ben ViewGroup.LayoutParams.WRAP_CONTENTyükseklik için kullandım . Teşekkürler.
sersemlemiş

1
Bu temiz ve hacky değil
rommex 29:17

7
Bu benim durumum için çalışmıyor .. her köşesinden bazı dolgu gösteriyor. herhangi bir yardım?
Abdul Waheed

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

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

7
Benim için işe yarayan tek çözüm. Diğerleri bazen çalışıyor, bazen çalışmıyor. Umarım ben de bu konuda bir istisna bulamıyorum :)
azertiti

12
Eğer arka plan şeffaf olmak istiyorsanız bu sizin kullanmanız gereken benim için too.While işleri ' 'android.R.style.Theme_Translucent_NoTitleBar''
acntwww

2
Anahtar STYLE_NORMAL geçiyor. Bu, iletişim kutusunun ekranı diğer tüm etkinlikler gibi doldurmasını sağlar. Herhangi bir temayı kullanabiliriz. Malzeme tasarımı için, bir malzeme teması türetebilirsiniz (örn. Sistem dekorunu koruyan ancak eylem çubuğunu kaldıran Theme.AppCompat.NoActionBar).
rpattabi

2
Ha-ha, başlattığımda siyah bir ekran belirdi ve dondurulduğunu sanıyordum. Sonra bir temayı Theme_Light_NoTitleBar_Fullscreen olarak değiştirdim. Teşekkürler, bir iletişim kutusu tüm ekranı kaplar (durum çubuğu dahil).
Mayıs 16:22

1
Theme_DeviceDefault_Light_NoActionBar_Fullscreen fow iletişim beyaz arka plana sahip.
Hitesh Sahu

45

Bu bağlantıya göre DialogFragment tam ekranı yanlarda dolgu gösterir, bu bir cazibe gibi çalışacaktır.

@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'de bile harika çalışıyor! (başka hiçbir şey yapmadı) Teşekkürler.
AutonomousApps

2
Bu, 2018'de Android Studio 3.1+'de bile mükemmel cevap, burada diğer cevaplardan daha iyi. Diğer cevap cardview, spinner, vb gibi android UI kırdı
Taufik Nur Rahmanda 19:18

1
2020'de büyüleyici çalışıyor!
Yue Yin

Çalışır, ancak XML mizanpajınızda kenar boşlukları tanımlamak istiyorsanız, görünümlerinizi başka bir mizanpajla sarmanız gerekir, aksi takdirde kenar boşlukları yok sayılır.
Felipe Ribeiro R. Magalhaes

30

Yalnızca stili kullanarak Tam ekran İletişim Kutusu Yapma

İlk çözüm

1. ekleyin 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. DialogFragment'ınıza ekleyin:

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

Alternatif çözüm

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

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

AppThemestillerde tanımladığınız tema nerede .


Bu bradley4'ün cevabından daha zarif bir yoldur.
MeLine

mükemmel bir hat çözümü
me_

Her iki çözüm de işe yaradı, ancak birincisi pano pop-up'ında hataya neden oldu. Alternatif işler iyi
Janusz Hain

18

Benim durumumda şu yaklaşımı kullandım:

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

Artı tüm alanı içerikle doldurmak için LinearLayout.

Ama hala küçük boşluklar vardı , bazı Lollipop + cihazlarında iletişim kutusunun sol ve sağ kenarları ile ekran kenarları arasında (örn. Nexus 9).

Açık değildi ama nihayet tüm cihazlarda ve platformlarda pencere genişliği arka planının tam genişliğini yapmak için styles.xml içinde aşağıdaki gibi belirtilmesi gerektiğini anladım :

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

Ve elbette, aşağıdaki gibi bir iletişim kutusu oluştururken bu stilin kullanılması gerekir:

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

İşte cevap. Harika çalışıyor.
VonSchnauzer

2
Bu konudaki cevapların çoğunu denedim, bazıları çalıştı, ancak tüm uygulama uyumlu tema stillerimi kaybettim. Bu bir üst tema AppCompat olarak işe yarayacağını umuyordu. O neredeyse çalıştı. Benim için 2 ek stil eklemek zorunda kaldım: <item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item> Kaynak: TechRepublic
Breeno

15

Tam ekran iletişim kutusu kullanırken daha önce bir sorunla karşılaştım Parça: tam ekran ayarlanırken her zaman bir dolgu var. dialogFragment'ın onActivityCreated () yönteminde bu kodu deneyin:

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

Çalışır, diğer çözümler düğmenin temasını ve parçanın diğer öğelerini değiştirir.
Yhondri

11

Android API'sı güncellendiğinde, tam ekran iletişim kutusunu göstermenin önerilen yöntemi şudur:

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

aksi takdirde, tam ekran olarak gösterilmesini istemiyorsanız şu şekilde yapabilirsiniz:

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

Umarım yardımcı olur.

DÜZENLE

Verdiğim çözümün işe yaradığını ancak bazen zahmetli olabilecek bir zayıflığının olduğunu unutmayın. DialogFragment öğesini android.R.id.contentkaba eklemek ,DialogFragment#setCancelable() özelliği doğru ve DialogFragment'ın kendisini arka yığınına eklerken beklenmedik davranışlara yol açabilir.

Bu yüzden onCreate yönteminde DialogFragment'inizin stilini basitçe aşağıdaki gibi değiştirmenizi öneririm:

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

Umarım yardımcı olur.


1
Katılıyorum. İşte Android Geliştirici kılavuzundan tam bir açıklama: link
user2274431

10

OnCreate'de setStyle () öğesini kullanmayı deneyin ve onCreateDialog make iletişim kutusunu başlık olmadan geçersiz kılın

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

veya sadece onCreate () ve setStyle kodlarını geçersiz kılın.

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

8

Gerçekten de mizanpajın nasıl tanımlandığına bağlı olabilir. Ancak iletişim kutusunun gerekli boyutu almasını sağlamak için en iyi çözüm, iletişim kutusu gösterildiğinde (oluşturma sırasında değil) LayoutParams'ı sağlamaktır. DialogFragment öğesinde iletişim kutusu onStart yönteminde gösterilir , bu nedenle tam genişlik elde etmek için geçerli bir yöntem:

@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 stili gibi bir tema veya stil sağlamak için en iyi konum onCreate yöntemindedir:

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

7

Not: Burada bile doğru cevap bulunabilir. Ama bir karışıklığı açıklığa kavuşturmak istiyorum.

İçin aşağıdaki kodu kullanın 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);
    }
}

İçin aşağıdaki kodu kullanın 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

Ve kotlin versiyonu!

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
Gerçekten çalışıyor! Ayrıca eklemek istiyorum, geliştirici içerik deformasyonu önlemek için şeffaf FrameLayout tarafından iletişim kutusu içeriği sarmak gerekir.
Georgiy Chebotarev

4

Bu sorunu nasıl çözdüğümün çözümü budur:

@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.xml dosyasında aşağıdaki temayı oluşturun:

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

ardından stili DialogFragment'ta ayarlayın

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

2

Chirag Nagariya '_Fullscreen' ilavesi dışında haklı. Diyalog stilinden türetilmemiş herhangi bir temel stil kullanılarak çözülebilir. 'android.R.style.Theme_Black_NoTitleBar' da kullanılabilir.


1

Başkasıyla karşılaşırsa, buna benzer bir deneyim yaşadım ama sorunun şişirilmiş görünümü onCreateView'den (varsayılan super.onCreateView döndürerek) döndürmeyi unuttuğum ortaya çıktı. Ben sadece doğru şişirilmiş görünümü döndü ve bu sorunu çözdü.


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

Bu çözüm, iletişim kutusuna Chirag'ın onCreate'deki setStyle öğesine benzer bir tam ekran teması uygular. Bir dezavantaj, saveInstanceState öğesinin kullanılmamasıdır.


1

Birden çok kullanım için ortak parça iletişim kutusu için bunu deneyin. Umarım bu size yardımcı olur

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


1

Parçalara ayırmanız gereken şey budur:

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

Senin durumunda:

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

Ve neden? DialogFragment (açıkça belirtilmediğinde), özel mizanpajınızı içine alacak iç stillerini kullanacaktır (tam ekran vb. Yok).

Peki ya düzen? Keskin bir yola gerek yok, bu iyi çalışıyor:

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

Zevk almak


1

Bu soruyu cevaplamak için çok geç kaldım hala bu yanıtı paylaşmak istiyorum böylece gelecekte herkes bunu kullanabilir.

Projemde bu kodu daha düşük sürümde olduğu gibi daha yüksek sürümde de kullandım.

Bu temayı onCreateDialog () içinde şu şekilde kullanın:

@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 - İşte bu temanın kaynak kodu sadece DialogFragment tam ekranda görünmesi için bu temanın yeterli olduğunu görebilirsiniz.

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

Herhangi bir sorunla karşılaşırsanız lütfen bize bildirin. Umarım bu yardımcı olur. Teşekkürler :)


iletişim kutusu tam ekrana gelir ancak bir düğme dışında her şey karardı. Herhangi bir fikir ??
Sagar Nayak

1

Göreli bir düzen üzerinde çalışıyor olsanız bile aşağıdaki yol işe yarar. Aşağıdaki adımları izleyin:

  1. Tema düzenleyicisine git (Araçlar-> Android -> Tema Düzenleyicisi altında bulunur)
  2. Tüm temaları göster'i seçin. AppCompat.Dialog ile bir tane seçin
  3. Belirli bir renkli arka plan veya şeffaf bir arka plan olmasını istiyorsanız android pencere arka plan seçeneğini belirleyin.
  4. Rengi seçin ve Tamam'a basın. Yeni temanın adını seçin.
  5. Git styles.xml ve sonra sadece eklenen tema altında, bu iki sıfatı ekleyin:

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

İletişim kutusu için tema ayarım aşağıdaki gibidir:

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

Temanın Theme.AppCompat.Dialog olarak bir üst öğesi olduğundan emin olun Başka bir yol da styles.xml dosyasında yeni bir stil oluşturmak ve yukarıdaki koda göre değiştirmek olacaktır.

  1. İletişim Kutusu Parçası sınıfınıza gidin ve onCreate () yönteminde İletişim Kutunuzun stilini şu şekilde ayarlayın:

    @ Public void onCreate (@Nullable Bundle savedInstanceState) {super.onCreate (savedInstanceState) 'u geçersiz kılın; setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }


1

Aşağıdaki satırları tam ekran iletişim kutusu tarzında ekleyin.

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

veya: eğlenceyi geçersiz kıl onCreate (savedInstanceState: Bundle?) {super.onCreate (savedInstanceState) setStyle (DialogFragment.STYLE_NORMAL, R.style.BottomSheetDialogThemeNoFloating) <style name = "BottomSheetDialogThemeNoFloating" parent = Design. item name = "android: windowIsFloating"> yanlış </item> </style>
Filipkowicz

0

window.setLayout eski cihazlar için yeterli değildir.

İşte yaptığım şey:

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

Yeni kullanılarak çözeltisi ConstraintLayoutsarma ConstraintLayouta LinearLayoutMinHeight ve minWidth sabitlenmiştir. Sarma olmadan, ConstraintLayout İletişim Kutusu için doğru boyutu almıyor.

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

Kotlin'de benim için çalıştı,

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

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

}

0

aşağıdaki çözüm benim için çalıştı diğer çözüm bana biraz boşluk verdi yani tam ekran

OnStart ve onCreate yönteminde değişiklik yapmanız gerekir

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


   
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.