カスタムダイアログを作成していますが、タイトルバーの背景を変更する方法を知りたいです。
私は2つのアプローチを試しました:
1-AlertDialog.Builderメソッド「setCustomTitle」を試しました。レイアウトの幅と高さ 'match_parent'と背景色のテキストビューで構成される単純なレイアウトビューを作成しました。アプリを実行すると、タイトルバーの上半分だけが背景色を表示しています。下半分はまだデフォルトのテーマの背景色を示しています。誰かが理由を知っていますか?
2-独自のダイアログテーマを作成しました。 '@ Android:style /Theme.Holo.Light.Dialog'への親の継承を持つスタイルを作成しました。次に、それをAlertDialog.Builderコンストラクターに渡しました-新しいAlertDialog.Builder(this、R.style.test_dialog)。良さそうですが、どういうわけかダイアログはダイアログ内にラップされています。四角いボックスがダイアログを囲んでいます。誰かが理由を知っていますか?
次のようなスタイルを作成できます。
<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);
これで、ダイアログは黒のタイトルの背景色で表示されます。
ダイアログ内でラップされたダイアログの外観は、ダイアログのウィンドウの背景が原因で発生します。すべてのダイアログにはこれがありますが、デフォルトのAndroidダイアログでは、ウィンドウの背景が透明に設定されています。これを行うには、カスタムダイアログテーマに次のアイテムを追加します。
<style name="CustomDialog" parent="@Android:style/Theme.Holo.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
私はMonoAndroid(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です。そしてそれはAndroidによって事前定義されています。このようにして、好きなようにスタイルを設定できるダイアログが表示されます。
タイトルのxmlレイアウトファイルを作成して膨らませ、次のようにAlertDialogに設定します。
View view = getLayoutInflater().inflate(R.layout.cust_dialog_title, null);
alertDialog.setCustomTitle(view);
このようにカスタムタイトルを設定するだけです
LayoutInflater inflater = this.getLayoutInflater();
View titleView = inflater.inflate(R.layout.custom_title, null);
new AlertDialog.Builder(SubCategoryActivity.this)
.setCustomTitle(titleView);
custom_titleレイアウトでは、次のようなカスタムタイトルを作成できます
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical" Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:paddingLeft="10dp"
Android:paddingRight="10dp"
Android:id="@+id/llsubhead"
Android:background="@color/colorPrimary">
<TextView
Android:id="@+id/exemptionSubHeading4"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="10dp"
Android:layout_marginBottom="10dp"
Android:layout_weight="1"
Android:text="Exemption Sub Head"
Android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
Android:textColor="@color/white" />
</LinearLayout>
</LinearLayout>