13

Quando si utilizzano i frammenti, i miei layout vengono disturbati da uno spazio aggiuntivo nella parte superiore e non so da dove proviene. Ecco come si presenta:Margini/riempimento del layout nella parte superiore del frammento della finestra di dialogo

enter image description here

Quali sono le possibili fonti di questo spazio vuoto? Il tema o alcune impostazioni di stile che non ho ancora trovato, oppure questo spazio è riservato a una barra delle azioni? Mi piacerebbe davvero liberarmi di questo.

Ecco corrispondente xml layout e il codice per istanziare la finestra di dialogo:

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

Ho anche chiesto a questa domanda qui, pensando che sarebbe essere un problema correlato con una scrollview, ma lo spazio appare in tutti i miei frammenti:

ScrollView adds extra space on top

+0

Possibile duplicato di [Come creare un DialogFragment senza titolo?] (Http://stackoverflow.com/questions/15277460/how-to-create-a-dialogfragment-without-title) –

risposta

21

tenta di chiamare getWindow().requestFeature(Window.FEATURE_NO_TITLE); destra primasetContentView(R.layout.<dialog_layout>); in onCreate() o onCreateView() il metodo del dialogo.

+0

Grazie, ma il frammento non ha un metodo getWindon(). Il codice sopra riportato è tutto ciò che faccio per istanziare il frammento della finestra di dialogo, quindi non c'è neanche onCreate(). –

+2

Per accedere alla chiamata della finestra, getActivity(). GetWindow(). Chiamalo nel metodo onCreateView(). –

+5

Ho fatto 'getDialog(). GetWindow(). RequestFeature (Window.FEATURE_NO_TITLE);' nel metodo 'onCreateView()' e funziona. Grazie! –

12

Esistono due modi per riutilizzare/rimuovere quello spazio vuoto nella parte superiore di DialogFragment.

Se si vuole semplice rimuoverla:

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

Se si desidera riutilizzarlo per un titolo di dialogo:

@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

Ancora un'altra soluzione:

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

Questo esempio utilizza l'ap tema di default delle pliche. Si noti inoltre che è necessario chiamare setStyle() in onCreate() anziché onCreateView() per ottenere un effetto.