10

カスタムダイアログを作成していますが、タイトルバーの背景を変更する方法を知りたいです。

私は2つのアプローチを試しました:

1-AlertDialog.Builderメソッド「setCustomTitle」を試しました。レイアウトの幅と高さ'match_parent'と背景色のテキストビューで構成される単純なレイアウトビューを作成しました。アプリを実行すると、タイトルバーの上半分だけが背景色を表示しています。下半分はまだデフォルトのテーマの背景色を示しています。誰かが理由を知っていますか?

2-独自のダイアログテーマを作成しました。'@ android:style/Theme.Holo.Light.Dialog'への親の継承を持つスタイルを作成しました。次に、それをAlertDialog.Builderコンストラクター(new AlertDialog.Builder(this、R.style.test_dialog))に渡しました。良さそうですが、どういうわけかダイアログはダイアログ内にラップされています。ダイアログを四角いボックスで囲んでいます。誰かが理由を知っていますか?

4

5 に答える 5

40

次のようなスタイルを作成できます。

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

<style name="dialog_title_style" parent="android:Widget.TextView">
    <item name="android:background">@android:color/black</item>
    <item name="android:padding">10dp</item>
</style>

そして、ダイアログをインスタンス化できます。

Dialog dialog=new Dialog(this,R.style.cust_dialog);
dialog.setContentView(R.layout.fragment_features_dialog);
dialog.setTitle(R.string.features);

これで、ダイアログが黒のタイトルの背景色で表示されます。

于 2012-02-16T11:27:15.067 に答える
4

ダイアログ内でラップされたダイアログの外観は、ダイアログのウィンドウの背景が原因です。すべてのダイアログにこれがありますが、デフォルトの Android ダイアログにはウィンドウの背景が透明に設定されています。これを行うには、カスタム ダイアログ テーマに次の項目を追加します。

<style name="CustomDialog" parent="@android:style/Theme.Holo.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
</style> 
于 2013-11-18T14:13:58.807 に答える
1

Mono Android(Xamarin)を使用しています。フラグメントでダイアログを作成するために私のアプリで使用している別の代替手段を示しています:

Dialog itemDialog = new Dialog(this.Activity);  
TextView alertTitle=(TextView)itemDialog.Window.DecorView.FindViewById(Android.Resource.Id.Title);

alertTitle.SetTextColor(Android.Graphics.Color.Blue);
alertTitle.SetBackgroundColor(Android.Graphics.Color.Orange);
itemDialog.SetContentView(Resource.Layout.listview_custom_dialog);
string[] options = new string[] { "Open", "Mark as Unread","Mute","View    
Profile","Block Connection","Delete Conversation" };
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this.Activity,  
Resource.Layout.listitem_custom_dialog,Resource.Id.textViewDialogDescription,   
options);

Resource.Layout.listitem_custom_dialog: これはカスタム リストビュー レイアウトです。xml ファイルは次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent" >
<TextView
    android:id="@+id/textViewDialogDescription"
    android:layout_width="match_parent"
    android:layout_height="44dp"
    android:background="#ffffff"
    android:textColor="#386B96"
    android:paddingLeft="4dp"
    android:textSize="14dp" />
</RelativeLayout>

ListView lv = itemDialog.FindViewById<ListView> 
(Resource.Id.listViewDialogItems);
lv.Adapter = adapter;
adapter.NotifyDataSetChanged();
itemDialog.SetCancelable(true);
itemDialog.SetTitle("Conversation");
itemDialog.Show(); 

Android.Resource.Id.Title : これは、ダイアログ タイトルを含むテキストビューの ID です。そしてそれはアンドロイドによって事前定義されています。このようにして、好きなようにスタイルを設定できるダイアログが表示されます。

于 2015-02-16T17:35:56.380 に答える
1

タイトルの xml レイアウト ファイルを作成し、それを膨らませて、次のように AlertDialog に設定します。

View view = getLayoutInflater().inflate(R.layout.cust_dialog_title, null);
alertDialog.setCustomTitle(view);
于 2016-01-29T06:12:40.940 に答える