有没有办法更改AlertDialog(android.support.v7.app.AlertDialog)的标题背景颜色? 目前在我的主题中我有
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/colorAccent</item>
</style>
我得到的就像这样,
我怎样才能让它看起来像这样,
使用
<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowTitleStyle">@style/DialogTitle</item>
</style>
<style name="DialogTitle">
<item name="android:background">@color/colorPrimary</item>
</style>
给出
关于如何实现这一目标的任何想法?
答案 0 :(得分:9)
您可以像这样设置自定义标题
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>
答案 1 :(得分:0)
使用自定义Alerbox,在click上使用此代码。我制作了自定义布局&#34; alert_input&#34;和OK和取消选项将显示
LayoutInflater layoutInflater = LayoutInflater.from(Login.this);
View promptView = layoutInflater.inflate(R.layout.alert_input, null);
final EditText editText = (EditText) promptView.findViewById(R.id.alertEdit2);
final EditText editText2 = (EditText) promptView.findViewById(R.id.alertEdit3);
final TextView at=(TextView)findViewById(R.id.alertText);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Login.this,AlertDialog.THEME_HOLO_LIGHT);
alertDialogBuilder.setView(promptView);
alertDialogBuilder.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
})
.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
// create an alert dialog
AlertDialog alert = alertDialogBuilder.create();
alert.show();
答案 2 :(得分:0)
我想,自定义样式不起作用的原因是因为默认填充(围绕整个AlertDialog布局)仍然存在:
<style name="myAlertDialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowTitleStyle">@style/myDialogTitle</item>
</style>
<style name="myDialogTitle" parent="TextAppearance.AppCompat.Title">
<item name="android:background">@color/colorPrimary</item>
</style>
getResource.getIdentifier()
和findViewByid()
也不起作用(到目前为止,我已经尝试过)。因此,setCustomTitle()
成为实现它的唯一方法。
1。为AlertDialog创建自定义标题布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_red_light"
android:orientation="vertical"
android:paddingStart="24dp" //following Material Design guideline
android:paddingTop="16dp"
android:paddingEnd="24dp"
android:paddingBottom="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Marvel Cinematic Universe"
android:textAppearance="@style/TextAppearance.AppCompat.Title" //key point 1, using AlertDialog default text style
android:textColor="@android:color/white" />
</LinearLayout>
2。使用“ setCustomTitle()”将自定义标题布局应用于AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
View titleView = getLayoutInflater().inflate(R.layout.dialog_title, null);
builder.setCustomTitle(titleView); //key point 2
builder.setMessage(R.string.main_marvel_info);
builder.setPositiveButton("OK", null);
builder.create().show();
答案 3 :(得分:0)
使用androidx.appcompat.app.AlertDialog
AlertDialog alertdialog;
...
alertdialog.show();
final View v = alertdialog.findViewById(R.id.title_template);
if (v != null)
v.setBackgroundColor(myColor);