Ok I figured it out, but its a hacky solution. For DialogPreferences, the AlertDialog.Builder methods aren't called until showDialog() (see here).
Knowing that and modifying the solution from here, we can get rid of the title with the
Window.FEATURE_NO_TITLE flag and inflate our own XML with a title and our own horizontal divider built-int:
@Override
protected void showDialog(Bundle state) {
Context context = getContext();
AlertDialog.Builder mBuilder = new AlertDialog.Builder(context);
View view = LayoutInflater.from(context).inflate(R.layout.pref_dialog_about_title, null);
onBindDialogView(view);
mBuilder.setView(view);
onPrepareDialogBuilder(mBuilder);
// getPreferenceManager().registerOnActivityDestroyListener();
// Create the dialog
final Dialog dialog = mBuilder.create();
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
if (state != null) {
dialog.onRestoreInstanceState(state);
}
dialog.setOnDismissListener(this);
dialog.show();
Button neutralButton = ((AlertDialog)dialog).getButton(DialogInterface.BUTTON_NEUTRAL);
FontChanger.getInstance(getContext()).changeFont(neutralButton);
neutralButton.setTextColor(mColorOrangeEnabled);
neutralButton.setBackgroundDrawable(getContext().getResources().getDrawable(R.drawable.ab_background_gradient_bottom));
}
where onBindDialogView(View view)
simply locates the TextViews (title and message) and initializes them. onPrepareDialogBuilder()
just calls setNeutralButton(...).
pref_dialog_about_title.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/title_template"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="@drawable/ab_background_gradient_top">
<TextView
android:id="@+id/alertTitle"
style="?android:attr/textAppearanceLarge"
android:layout_marginTop="6dip"
android:layout_marginBottom="9dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:singleLine="true"
android:ellipsize="end"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/border">
<TextView
android:id="@+id/author"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"/>
<TextView
android:id="@+id/btag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/author"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
</LinearLayout>
ab_background_gradient_top:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Bottom Line -->
<item>
<shape android:shape="rectangle">
<solid android:color="@color/orange" />
</shape>
</item>
<!-- Color of your action bar -->
<item android:bottom="2dip">
<shape android:shape="rectangle">
<gradient
android:angle="90"
android:centerColor="#3b0808"
android:endColor="#570b0b"
android:startColor="#1d0404"
android:type="linear" />
<corners
android:radius="0dp"/>
</shape>
</item>
</layer-list>