Tworzę DialogFragment, aby wyświetlać komunikaty pomocy dotyczące mojej aplikacji. Wszystko działa dobrze oprócz jednej rzeczy: czarny pasek w górnej części okna pokazuje DialogFragment, który, jak zakładam, jest zarezerwowany dla tytułu, czego nie chcę używać.
Jest to szczególnie bolesne, ponieważ mój niestandardowy DialogFragment wykorzystuje białe tło, więc zmiana jest zbyt głośna, aby można ją było pominąć.
Pokażę to w bardziej graficzny sposób:
Teraz kod XML mojego DialogFragment jest następujący:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/holding"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/dialog_fragment_bg"
>
<!-- Usamos un LinearLayout para que la imagen y el texto esten bien alineados -->
<LinearLayout
android:id="@+id/confirmationToast"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView android:id="@+id/confirmationToastText"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="@string/help_dialog_fragment"
android:textColor="#AE0000"
android:gravity="center_vertical"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/confirmationButtonLL"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
>
<Button android:id="@+id/confirmationDialogButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_marginBottom="60dp"
android:background="@drawable/ok_button">
</Button>
</LinearLayout>
</LinearLayout>
</ScrollView>
I kod klasy, która implementuje DialogFragment:
public class HelpDialog extends DialogFragment {
public HelpDialog() {
// Empty constructor required for DialogFragment
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Inflate the XML view for the help dialog fragment
View view = inflater.inflate(R.layout.help_dialog_fragment, container);
TextView text = (TextView)view.findViewById(R.id.confirmationToastText);
text.setText(Html.fromHtml(getString(R.string.help_dialog_fragment)));
//get the OK button and add a Listener
((Button) view.findViewById(R.id.confirmationDialogButton)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// When button is clicked, call up to owning activity.
HelpDialog.this.dismiss();
}
});
return view;
}
}
I proces tworzenia w głównym działaniu:
/**
* Shows the HelpDialog Fragment
*/
private void showHelpDialog() {
android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
HelpDialog helpDialog = new HelpDialog();
helpDialog.show(fm, "fragment_help");
}
Naprawdę nie wiem, czy ta odpowiedź, związana z oknem dialogowym, pasuje tutaj także do Androida: jak utworzyć okno dialogowe bez tytułu?
Jak mogę pozbyć się tego tytułu?
źródło
Odpowiedzi:
Po prostu dodaj ten wiersz kodu do swojego
HelpDialog.onCreateView(...)
W ten sposób wyraźnie prosisz o okno bez tytułu :)
EDYTOWAĆ
Jak
@DataGraham
i@Blundell
wskazał na komentarzach poniżej, to bezpieczniej jest dodać wniosek o oknie tytułowym mniej wonCreateDialog()
metodzie zamiastonCreateView()
. W ten sposób możesz zapobiec narzucaniu NPE, gdy nie używasz swojego fragmentu jakoDialog
:źródło
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE)
...getDialog
, otrzymasz NPEandroid:layout_width
atrybut widoku głównego w układzie dla twojego okna dialogowego ustawiony nawrap_content
?Fragment okna dialogowego ma metodę setStyle, którą należy wywołać przed utworzeniem widoku Java Doc . Również styl okna dialogowego można ustawić tą samą metodą
źródło
źródło
Wypróbuj łatwy sposób
źródło
źródło
Ustaw styl na Theme_Holo_Dialog_NoActionBar:
źródło