webentwicklung-frage-antwort-db.com.de

Android: Wie man dialogFragment auf Vollbild hat

Hallo, ich habe versucht, das Theme für das dialogFragment für Vollbild zu überschreiben, aber der Vollbildschirm, den ich wollte, war ein Overlay über der vorherigen Aktivität. Wenn also das dialogFragment geöffnet wird, sehen wir immer noch die Aktivität zwischen dem Bildschirm und dem dialogFragment .

Dies ist der Stil, den ich für den Vollbildmodus verwendet habe

<style name="fullscreen_dialog" parent="Android:Theme" >
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowFullscreen">true</item>
    <item name="Android:windowIsFloating">false</item>
</style>
10
LittleFunny

Sie können die Layout-Parameter einfach manuell wie im Code festlegen. Ich hoffe es hilft ! :). Überprüfen Sie auch dieses SO Anpassen der Größe des benutzerdefinierten Dialogfelds in Android

Window window = myDialog.getWindow();
window.setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
0
Doug Ray

Dies ist die Lösung, die ich für Ihr Problem gefunden habe:

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

Die untenstehende Lösung hat für mich perfekt funktioniert.

Erstellen Sie einen Stil für den Fragmentdialog wie folgt:

<style name="dialog_theme" parent="Android:Theme" >
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowIsFloating">false</item>
</style>

Erstellen Sie Ihre Java-Klasse wie folgt:

public class FiltersDialogFragment extends Android.support.v4.app.DialogFragment {

    static FiltersDialogFragment newInstance() {
        FiltersDialogFragment fragment = new FiltersDialogFragment();
        return fragment;
    }

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

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

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

Viel Spaß beim Codieren !!!

12
Ahsanwarsi

Sie können auch etwas tun

@Override
  public void onCreate(@Nullable final Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
      setStyle(STYLE_NO_TITLE, Android.R.style.Theme_Material_Light_NoActionBar_Fullscreen);
    } else {
      setStyle(STYLE_NO_TITLE, Android.R.style.Theme_DeviceDefault_Light_NoActionBar);
    }
    super.onCreate(savedInstanceState);

  }
6
Vaibhav Sharma

Unten ist meine Lösung.

<style name="Dialog.App" parent="Theme.AppCompat.Dialog"></style>
<style name="Dialog.App.Fullscreen">
    <item name="Android:windowActionBar">false</item>
    <item name="Android:windowNoTitle">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:colorBackground">@null</item>
    <item name="Android:colorBackgroundCacheHint">@null</item>
    <item name="Android:windowFrame">@null</item>
    <item name="Android:windowBackground">@null</item>

    <!--the key attribute for fullscreen dialog -->
    <item name="Android:windowIsFloating">false</item>

    <!-- only width fill screen -->
    <!--<item name="Android:windowMinWidthMajor">100%</item>-->
    <!--<item name="Android:windowMinWidthMinor">100%</item>-->
</style>
3
ggaier

Es gibt eine Methode, um den Stil und das Thema zu ändern.

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

Ich habe es getestet, um Vollbild zu erhalten und es funktioniert einfach mit einem einfachen Layout.

1
arenaq
    getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
1
dinus

Wenn keine der oben genannten Funktionen funktioniert (wie bei mir nicht), finden Sie im Android Developer Dialogs Guide weitere Informationen dazu.

public void showDialog() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    CustomDialogFragment newFragment = new CustomDialogFragment();

    if (mIsLargeLayout) {
        // The device is using a large layout, so show the fragment as a dialog
        newFragment.show(fragmentManager, "dialog");
    } else {
        // The device is smaller, so show the fragment fullscreen
        FragmentTransaction transaction = fragmentManager.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, newFragment)
                   .addToBackStack(null).commit();
    }
}

Wenn Ihre ActionBar wie ich nach Verwendung der obigen Strategie immer noch angezeigt wird, müssen Sie einige Markierungen auf der Benutzeroberfläche setzen .

private fun hideSystemUI() {
    // Enables regular immersive mode.
    // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
    // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
    window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
            // Set the content to appear under the system bars so that the
            // content doesn't resize when the system bars hide and show.
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            // Hide the nav bar and status bar
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
0
airowe

Ich habe diese Frage mit Erklärung beantwortet 

In diesem Thread

Hoffe das hilft :)

0
Biswajit

FWIW, ich musste einen speziellen Stil einrichten, der von @ style/Base.Theme.AppCompat.Light subclassiert wurde. Ansonsten sah keines der Felder der Unterstützungsbibliothek richtig aus. Wenn Sie @ style/Base.Theme.AppCompat.Light.Dialog verwenden, wird der schwebende Look erstellt, den ich nicht wollte.

0
kenyee