20

現在、独自のDialogFragmentテーマを構築しようとしています。

私の要件の 1 つは、タイトルの右側にあるアイコンを使用することです。

最初のアイデア

単に使用する:

this.getDialog().getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.dialog_title);

残念ながら、このコード行には結果がありません。

2番目のアイデア

このテキストビューを使用して、独自のレイアウト -this.setContentView()- を提供します。

<TextView
    android:id="@+id/tvTitle"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="From XML"
    android:textAppearance="@android:style/TextAppearance.DialogWindowTitle" />

テキストを読むことができるため、これは機能しますが、デフォルトの黒のフォントで書かれています。

TextAppearance.DialogWindowTitle がテキストにタイトルの外観を与えることを期待していました (Holo では大きなフォント サイズの青)。

アイデアや提案はありますか?

編集

これはほぼトリックを行いました:

<style name="Dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
</style>

<style name="MyOwnDialogTitle">
    <item name="android:drawableRight">@drawable/MyRightImage</item>
</style>

しかし android:drawableRight はタイトルのレイアウトを壊しただけです:

ここに画像の説明を入力

2回目の編集

これは少し良いです:

<style name="Dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
</style>

<style name="MyOwnDialogTitle">
    <item name="android:textAppearance">@android:style/TextAppearance.DialogWindowTitle</item>
    <item name="android:drawableRight">@drawable/icon</item>
</style>

ここに画像の説明を入力

4

3 に答える 3

19

たぶん、あなたはこの方法でデフォルトのスタイルを拡張することができます:

res/values/dialogstyles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="Dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
    </style>
    <style name="MyOwnDialogTitle">
        <item name="android:drawableRight">@drawable/MyRightImage</item>
    </style>
</resources>

res/values-v11/dialogstyles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
     <style name="Dialog" parent="@android:style/Theme.Holo.Dialog">
          <item name="android:windowTitleStyle">@style/MyOwnDialogTitle</item>
     </style>
</resources>

そして、DialogFragmentのonCreate:をオーバーライドします。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setStyle(DialogFragment.STYLE_NORMAL, R.style.Dialog);
}

実例

于 2013-01-30T00:51:42.553 に答える
1

私はあなたの最初の要件を探しています。しかし、2番目の要件については、カスタムスタイルでTextAppearance.DialogWindowTitleの色をスタイルに変更してみませんか?

以下のようなスタイルがあるAndroidリソースを確認しました:

  <style name="DialogWindowTitle">
    <item name="android:maxLines">1</item>
    <item name="android:scrollHorizontally">true</item>
    <item name="android:textAppearance">@style/TextAppearance.DialogWindowTitle</item>
</style>

TextAppearance.DialogWindowTitle スタイルの場合:

 <style name="TextAppearance.DialogWindowTitle">
    <item name="android:textSize">18sp</item>
    <item name="android:textStyle">normal</item>
    <item name="android:textColor">?textColorPrimary</item>
</style>

これで、TextAppearance.DialogWindowTitle スタイルの色を変更して、必要に応じて実行できます。

あなたが要点を得たことを願っています。

お気軽にコメントください。

于 2013-01-29T04:31:46.733 に答える
0

@android:style/Theme.Holo.Light.Dialogあなたはあなたparentのスタイルで使用しようとしましたか?以前のバージョンにはテーマHoloがないため、これはAndroid 3以降でのみ機能しますが、Androidの下位バージョンのように独自のテーマを作成できます。

于 2013-01-30T12:43:10.473 に答える