我想知道它是如何可能摆脱(或改变颜色)titleDivider的对话框。 它低于上蜂窝+装置上显示对话框标题的蓝线。
我想这是一件有关从SDK的布局,但因为没有风格属性,我不知道如何样式。 如果我用findViewById尝试没有android.R.id.titleDivider
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:fitsSystemWindows="true">
<TextView android:id="@android:id/title" style="?android:attr/windowTitleStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="@android:dimen/alert_dialog_title_height"
android:paddingLeft="16dip"
android:paddingRight="16dip"
android:gravity="center_vertical|left" />
<View android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="2dip"
android:background="@android:color/holo_blue_light" />
<FrameLayout
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical"
android:foreground="?android:attr/windowContentOverlay">
<FrameLayout android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</LinearLayout>
我试图重写dialogTitleDecorLayout这是唯一的参考,我theme.xml到dialog_title_holo.xml,但没有成功。 错误的是:
错误:错误:没有资源发现在给定名称匹配:ATTR“dialogTitleDecorLayout”。
Answer 1:
Thanku所有,但我得到的解决方案,使参考titledivider alertdialog使用下面code.Hope这有助于有人来改变它的颜色。
int divierId = dialog.getContext().getResources()
.getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(divierId);
divider.setBackgroundColor(getResources().getColor(R.color.creamcolor));
Answer 2:
您需要实现
myDialog = builder.create();
myDialog.setOnShowListener(new OnShowListenerMultiple());
//----------------------------
//Function to change the color of title and divider of AlertDialog
public static class OnShowListenerMultiple implements DialogInterface.OnShowListener {
@Override
public void onShow( DialogInterface dialog ) {
if( !(dialog instanceof Dialog) )
return;
Dialog d = ((Dialog) dialog);
final Resources resources = d.getContext().getResources();
final int color = AppUtility.getColor( resources, R.color.defaultColor );
try {
int titleId = resources.getIdentifier( "android:id/alertTitle", null, null );
TextView titleView = d.findViewById( titleId );
titleView.setTextColor( color );
}
catch( Exception e ) {
Log.e( "XXXXXX", "alertTitle could not change color" );
}
try {
int divierId = resources.getIdentifier( "android:id/titleDivider", null, null );
View divider = d.findViewById( divierId );
divider.setBackgroundColor( color );
}
catch( Exception e ) {
Log.e( "XXXXXX", "titleDivider could not change color" );
}
}
}
Answer 3:
我用DialogFragment.STYLE_NO_TITLE主题,然后伪造的对话框布局标题栏解决的问题。
Answer 4:
这是我如何解决了(感谢http://joerg-richter.fuyosoft.com/?p=181 ):
MyDialogBuilder.class
public class MyDialogBuilder extends android.app.AlertDialog.Builder {
public MyDialogBuilder(Context context) {
super(context);
}
@NonNull
@Override
public android.app.AlertDialog create() {
final android.app.AlertDialog alertDialog = super.create();
alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
int titleDividerId = getContext().getResources()
.getIdentifier("titleDivider", "id", "android");
View titleDivider = alertDialog.findViewById(titleDividerId);
if (titleDivider != null) {
titleDivider.setBackgroundColor(getContext().getResources()
.getColor(R.color.alert_dialog_divider));
}
}
});
return alertDialog;
}
}
Answer 5:
使用
<View android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="2dip"
android:background=#CC3232 />
Answer 6:
写之前dialog.show()
写:
int divierId = dialog.getContext().getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(divierId);
if(divider!=null){
divider.setBackgroundColor(getResources().getColor(R.color.transparent));}
在colors.xml:
<color name="transparent">#00000000</color>
Answer 7:
如果你不想使用默认的风格,不要使用AlertDialog。 你可以用对话框主题活动(与自定义布局)去。
<activity android:theme="@android:style/Theme.Dialog">
Answer 8:
这一个是在一些4.x的设备进行测试:
TextView title = (TextView)getWindow().getDecorView().findViewById(android.R.id.title);
((ViewGroup)title.getParent()).getChildAt(1).setVisibility(View.GONE);
Answer 9:
你的想法是正确的。 但是,你正在寻找dialogTitleDecorLayout是私有资源,所以你不能在一个正常的方式访问它。 但你仍然可以使用*语法访问它:
<item name="*android:dialogTitleDecorLayout">@layout/dialog_title</item>
添加此我自己的风格,简单地复制dialog_title.xml到我的应用程序,并改变它稍微在我的情况下解决了这个问题。
Answer 10:
你看这有是一个pcecial库,你可以看它那里 。 而最后的链接会解决你的问题
Answer 11:
你可以作出这样一个自定义对话框:
Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.custom_dialog);
Button okay = (Button) dialog.findViewById(R.id.button1);
okay.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// do your work
}
});
坐落在布局不使用Android自定义标题
dialog.setTitle();
和你的custom_dialog.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ffffff"
android:textSize="40sp"
android:text="Hello"/>
<Button
android:id="@+id/button1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_marginLeft="150dp"
android:text="OK" />
</RelativeLayout>
Answer 12:
“卸下蓝线”如果我猜得不错的下降意味着在对话框的标题,它的身体之间的边界。 这边境来自河洛主题,所以它不可能放弃它,而无需使用您的自定义布局。
用下面的内容创建一个文件名为定制dialog.xml(它只是一个example..modify它,只要你想):
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/general_dialog_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/dialogTopImage"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.12"
android:padding="10dp" />
<LinearLayout
android:id="@+id/dialogLine"
android:layout_width="fill_parent"
android:layout_height="3dp"
android:background="@drawable/green_btn"
android:orientation="vertical" />
<TextView
android:id="@+id/dialogText"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="0.32"
android:padding="5dp"
android:text=""
/>
<LinearLayout
android:id="@+id/general_dialog_layout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginBottom="5dp"
android:layout_weight="0.11"
android:gravity="center"
android:orientation="horizontal" >
<Button
android:id="@+id/dialogButton"
android:layout_width="100dp"
android:textSize="8pt"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:background="@drawable/green_btn"
android:gravity="center"
android:text="Ok" />
</LinearLayout>
正如你看到的,我使用的资源和东西不会在您的项目,但你可以安全地删除它们。 在我的情况下,结果是多还是少下列操作之一,与顶部,我会在代码编程设定的图像。
要创建对话框,然后使用类似:
private Dialog createAndShowCustomDialog(String message, Boolean positive, Drawable d, View.OnClickListener cl, String text1) {
final Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.general_dialog_layout);
// BIND
ImageView image = (ImageView) dialog.findViewById(R.id.dialogTopImage);
TextView text = (TextView) dialog.findViewById(R.id.dialogText);
Button button = (Button) dialog.findViewById(R.id.dialogButton);
LinearLayout line = (LinearLayout) dialog.findViewById(R.id.dialogLine);
// SET WIDTH AND HEIGHT
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int width = (int) (displaymetrics.widthPixels * 0.85);
int height = (int) (displaymetrics.heightPixels * 0.60);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = width;
dialog.getWindow().setLayout(width, height);
// SET TEXTS
text.setText(message);
button.setText(text1);
// SET IMAGE
if (d == null) {
image.setImageDrawable(getResources().getDrawable(R.drawable.font_error_red));
} else {
image.setImageDrawable(d);
}
// SET ACTION
if (cl == null) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
} else {
button.setOnClickListener(cl);
}
// SHOW
dialog.show();
return dialog;
}
Answer 13:
这是没有办法通过控制brotha隐藏它..我有同样的问题。 唯一可以做的事情是创建自己的CustomDialog
下面是一个示例应用程序
下载并具有看看设计模式,那么这将是容易
这里是一个教程关于制作自定义对话框
重要的部分是创建DialogObject不通过设置在的setTitle标题()创建的TextView您CustomLayout内,从findViewByID(叫),并设置您的标题后,
Answer 14:
在colors.xml:
<color name="transparent">#00000000</color>
在对话框:
INT divierId = dialog.getContext()getResources()则getIdentifier( “机器人:ID / titleDivider”,NULL,NULL);
视图分频器= d.findViewById(divierId); divider.setBackgroundColor(getResources()的getColor(R.color.transparent));
Answer 15:
为了彻底隐藏默认的蓝线(假设你在DialogFragment
):
Dialog dialog = getDialog();
if (dialog != null) {
final int dividerId = dialog.getContext().getResources()
.getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(dividerId);
if (divider != null) {
divider.setBackground(null);
}
}
文章来源: Styling titleDivider in Dialog