2

有没有办法将 DialogPreference 中标题下的蓝线颜色更改为黄色或橙色等颜色?我试过了:

  1. 手动更改 AlertDialogs 的主题
  2. 使用project: android-styled-dialogs图书馆
  3. 继承DialogPreference 并customTitleViewonPrepareDialogBuilder(Builder builder). (请参阅android Theme.Holo.Dialog 将蓝线更改为橙色

这些尝试都没有成功。有没有人有这方面的经验并找到解决方案?

4

1 回答 1

0

好的,我想通了,但它是一个 hacky 解决方案。对于 DialogPreferences,直到 showDialog() 才调用 AlertDialog.Builder 方法(请参见此处)。

知道这一点并从这里修改解决方案,我们可以使用 Window.FEATURE_NO_TITLE 标志摆脱标题,并使用标题和我们自己的内置水平分隔线来膨胀我们自己的 XML:

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

其中onBindDialogView(View view)只需找到 TextViews(标题和消息)并初始化它们。onPrepareDialogBuilder()只需调用 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>
于 2013-07-23T19:07:43.417 回答