Festlegen der Größe eines DialogFragments

Ich habe viele Befehle versucht, die Größe meiner DialogFragment . Es enthält nur einen Farb-Picker, also habe ich den Hintergrund und den Titel des Dialogs entfernt:

 getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); getDialog().getWindow().setBackgroundDrawable( new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

Allerdings möchte ich auch den Dialog positionieren, wo ich will und es ist problematisch. Ich verwende:

  • SupportMapFragment's getMap () gibt null zurück
  • Titelleiste aus Code anzeigen
  • Wie man Sitzung für einen Benutzer verwaltet, der von der mobilen app in PHP angemeldet ist?
  • AsyncTask, der von Handler angerufen wird, führt DoInBackground nicht aus
  • Wie baue ich die v4-Unterstützungsbibliothek aus der Quelle auf
  • Wie zeichnet man einen transparenten Kreis?
  •  WindowManager.LayoutParams params = getDialog().getWindow().getAttributes(); params.width = LayoutParams.WRAP_CONTENT; params.height = LayoutParams.WRAP_CONTENT; params.gravity = Gravity.LEFT; getDialog().getWindow().setAttributes(params); 

    Aber ein (großes) Hindernis bleibt: Obwohl mein Dialogfenster unsichtbar ist, hat es immer noch eine gewisse Größe und begrenzt die Positionen meines Dialogs. Die LayoutParams.WRAP_CONTENT sind hier, um die Größe dieses Bereichs auf meinen Farbauswahl zu begrenzen, aber aus irgendeinem Grund funktioniert es nicht.

    Hat jemand etwas Ähnliches machen können?

  • Füge Ansicht über Tastatur android hinzu
  • Android: SQL rawQuery mit Platzhalter (%)
  • Umgang mit Display-Rotation in Android
  • Dialogtasten mit langem Text nicht verpackt / gequetscht - Material Thema auf Android 5.0 Lutscher
  • Benutzerdefinierte ImageView mit Schlagschatten
  • Wie überschneide ich den Filter im androiden ArrayAdapter?
  • 4 Solutions collect form web for “Festlegen der Größe eines DialogFragments”

    Ich habe eine ähnliche Frage, die Sie können nicht die dialogFragment die Breite eine Höhe in Code gesetzt, nach mehreren versuchen, fand ich eine Lösung;

    Hier sind die Schritte zum benutzerdefinierten DialogFragment:

    1.inflate benutzerdefinierte Ansicht von xml auf Methode

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); getDialog().setCanceledOnTouchOutside(true); View view = inflater.inflate(R.layout.XXX, container, false); //TODO:findViewById, etc return view; } 

    2.Siehe die Breite deines Dialogs eine Höhe in onResume (), remrember in onResume () / onStart (), scheint nicht in anderer Methode funktionieren

     public void onResume() { super.onResume(); Window window = getDialog().getWindow(); window.setLayout(width, height); window.setGravity(Gravity.CENTER); //TODO: } 

    Nach einigen Versuch und Irrtum habe ich die Lösung gefunden.

    Hier ist die Implementierung meiner DialogFragment-Klasse:

     public class ColorDialogFragment extends SherlockDialogFragment { public ColorDialogFragment() { //You need to provide a default constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_color_picker, container); // R.layout.dialog_color_picker is the custom layout of my dialog WindowManager.LayoutParams wmlp = getDialog().getWindow().getAttributes(); wmlp.gravity = Gravity.LEFT; return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NO_FRAME, R.style.colorPickerStyle); // this setStyle is VERY important. // STYLE_NO_FRAME means that I will provide my own layout and style for the whole dialog // so for example the size of the default dialog will not get in my way // the style extends the default one. see bellow. } } 

    R.style.colorPickerStyle entspricht:

     <style name="colorPickerStyle" parent="Theme.Sherlock.Light.Dialog"> <item name="android:backgroundDimEnabled">false</item> <item name="android:cacheColorHint">@android:color/transparent</item> <item name="android:windowBackground">@android:color/transparent</item> </style> 

    Ich verliere einfach einen Standard-Dialogstil mit meinen Bedürfnissen.

    Schließlich können Sie diesen Dialog mit:

     private void showDialog() { ColorDialogFragment newFragment = new ColorDialogFragment(); newFragment.show(getSupportFragmentManager(), "colorPicker"); } 

    Für meinen Anwendungsfall wollte ich das DialogFragment der Größe einer Liste von Artikeln entsprechen. Die Fragmentansicht ist ein RecyclerView in einem Layout namens fragment_sound_picker . Ich habe einen Wrapper RelativeLayout um die RecyclerView.

    Ich hatte bereits die Position der einzelnen R.attr.listItemPreferredHeight mit R.attr.listItemPreferredHeight in einem Layout namens item_sound_choice .

    Das DialogFragment erhält eine LayoutParams-Instanz aus der überlagerten View RecyclerView, optimiert die LayoutParams-Höhe auf ein Vielfaches der Listenlänge und wendet die modifizierten LayoutParams auf die aufgeblasene übergeordnete Ansicht an.

    Das Ergebnis ist, dass das DialogFragment perfekt die kurze Auswahlliste auswählt. Es enthält den Fenstertitel und die Schaltfläche Abbrechen / OK.

    Hier ist das Setup im DialogFragment:

     // SoundPicker.java // extends DialogFragment @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(getActivity().getString(R.string.txt_sound_picker_dialog_title)); LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); View view = layoutInflater.inflate(R.layout.fragment_sound_picker, null); RecyclerView rv = (RecyclerView) view.findViewById(R.id.rv_sound_list); rv.setLayoutManager(new LinearLayoutManager(getActivity())); SoundPickerAdapter soundPickerAdapter = new SoundPickerAdapter(getActivity().getApplicationContext(), this, selectedSound); List<SoundItem> items = getArguments().getParcelableArrayList(SOUND_ITEMS); soundPickerAdapter.setSoundItems(items); soundPickerAdapter.setRecyclerView(rv); rv.setAdapter(soundPickerAdapter); // Here's the LayoutParams setup ViewGroup.LayoutParams layoutParams = rv.getLayoutParams(); layoutParams.width = RelativeLayout.LayoutParams.MATCH_PARENT; layoutParams.height = getListItemHeight() * (items.size() + 1); view.setLayoutParams(layoutParams); builder.setView(view); builder.setCancelable(true); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { // ... }); builder.setPositiveButton(R.string.txt_ok, new DialogInterface.OnClickListener() { // ... }); return builder.create(); } @Override public void onResume() { Window window = getDialog().getWindow(); window.setLayout(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT); super.onResume(); } private int getListItemHeight() { TypedValue typedValue = new TypedValue(); getActivity().getTheme().resolveAttribute(R.attr.listPreferredItemHeight, typedValue, true); DisplayMetrics metrics = new android.util.DisplayMetrics(); getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics); return (int) typedValue.getDimension(metrics); } 

    Hier ist fragment_sound_picker :

     <?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="wrap_content"> <android.support.v7.widget.RecyclerView android:id="@+id/rv_sound_list" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> 

    Verwenden Sie diesen Code für die Größe von Dialog Fragment Android

     public void onResume() { super.onResume(); super.onResume(); Window window = getDialog().getWindow(); window.setLayout(250, 100); window.setGravity(Gravity.RIGHT); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.