13

Bei der Verwendung von Fragmenten werden meine Layouts durch einen zusätzlichen Platz an der Spitze gestört und ich weiß nicht woher das kommt. Es sieht wie folgt aus:Layout Rand/Padding am oberen Rand des Dialogfragments

enter image description here

Was mögliche Quellen für diesen leeren Raum sind? Das Thema oder einige Stileinstellungen, die ich noch nicht gefunden habe, oder ist dieser Platz für eine Aktionsleiste reserviert? Ich möchte das wirklich gerne loswerden.

Hier sind die entsprechenden Layout xml und der Code den Dialog zu instanziiert:

XML:

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

     <ProgressBar 
     android:layout_margin="5dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/search_progress" 
     style="?android:attr/progressBarStyle" 
     android:indeterminate="true" /> 

     <TextView 
      android:id="@+id/textView1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_toRightOf="@+id/search_progress" 
      android:text="Searching for:" /> 

     <TextView 
      android:id="@+id/searchingNameTextView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textStyle="bold" 
      android:layout_alignBottom="@+id/search_progress" 
      android:layout_alignLeft="@+id/textView1" 
      android:text="Barcelona" /> 

</RelativeLayout> 

Java:

FragmentManager fm = this.getSupportFragmentManager(); 
mSearchingDialog = new SearchingDialogFragment(); 
Bundle bundle = new Bundle(); 
bundle.putString("name", mCityToAdd.userName()); 
mSearchingDialog.setArguments(bundle); 
mSearchingDialog.show(fm, TAG); 

ich auch gefragt, diese Frage hier, es würde denken ein Problem sein, das mit einem Scrollview korreliert ist, aber der Platz erscheint in allen meinen Fragmenten:

ScrollView adds extra space on top

+0

Mögliche Duplikate von [Wie erstellt man ein DialogFragment ohne Titel?] (Http://StackOverflow.com/questions/15277460/how-to-create-a-dialogfragment-without-title) –

Antwort

21

Try getWindow().requestFeature(Window.FEATURE_NO_TITLE); rechts vorsetContentView(R.layout.<dialog_layout>); in onCreate() oder onCreateView() Methode der Dialog aufzurufen.

+0

Danke, aber das Fragment hat keine getWindon() -Methode. Der obige Code ist alles, was ich mache, um das Dialogfragment zu instanziieren, also gibt es auch kein onCreate(). –

+2

Um auf den Fensteraufruf zuzugreifen, getActivity(). GetWindow(). Rufen Sie es in OnCreateView() -Methode auf. –

+5

Ich habe 'getDialog(). GetWindow(). RequestFeature (Window.FEATURE_NO_TITLE); 'in der' onCreateView() 'Methode und es funktioniert. Vielen Dank! –

12

Es gibt zwei Möglichkeiten, den leeren Speicherplatz am oberen Rand der DialogFragment wiederzuverwenden/zu entfernen.

Wenn Sie wollen einfach entfernen sie:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); // <-- 
    View view = inflater.inflate(R.layout.fragment_dialog, container, false); 
    return view; 
} 

Wenn Sie es für einen Dialog Titel wiederverwenden möchten:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    getDialog().setTitle("Some title..."); // <-- 
    View view = inflater.inflate(R.layout.fragment_dialog, container, false); 
    return view; 
} 
4

Noch eine andere Lösung:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setStyle(STYLE_NO_TITLE, getActivity().getApplicationInfo().theme); 
    } 

In diesem Beispiel wird ap verwendet Das Standardthema von plications. Beachten Sie auch, dass setStyle() in onCreate() im Gegensatz zu onCreateView() aufgerufen werden muss, um eine Wirkung zu haben.