在Dialog中为titleDivider设置样式

我想知道如何在Dialog中摆脱(或改变颜色)titleDivider。 它是蜂窝+设备上显示的对话框标题下面的蓝线。

恼人的titleDivider线

我想这是来自SDK的相关布局,但由于没有样式属性,我不知道如何设计它。 如果我尝试使用findViewById,则没有android.R.id.titleDivider

       

我试图覆盖dialogTitleDecorLayout,它只是我的theme.xml中对dialog_title_holo.xml的引用,但没有成功。 错误是:

错误:错误:找不到与给定名称匹配的资源:attr’contactTitleDecorLayout’。

感谢所有,但我得到了解决方案,以引用alertdialog的titledivider使用下面的代码更改其颜色。希望这有助于某人。

 int divierId = dialog.getContext().getResources() .getIdentifier("android:id/titleDivider", null, null); View divider = dialog.findViewById(divierId); divider.setBackgroundColor(getResources().getColor(R.color.creamcolor)); 

你需要实施

 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" ); } } } 

我通过使用DialogFragment.STYLE_NO_TITLE主题然后在对话框布局中伪造标题栏解决了这个问题。

以下是我如何解决这个问题(感谢http://joerg-richter.fuyosoft.com/?p=181 ):

MyDialogBu​​ilder.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; } } 

使用

   

在编写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中

 #00000000 

如果您不想使用默认样式,请不要使用AlertDialog。 您可以使用Dialog Theme进行Activity(使用自定义布局)。

  

这个在一些4.x设备上测试:

  TextView title = (TextView)getWindow().getDecorView().findViewById(android.R.id.title); ((ViewGroup)title.getParent()).getChildAt(1).setVisibility(View.GONE); 

你的想法是对的。 但是,您正在寻找的dialogTitleDecorLayout是一个私有资源,因此您无法以正常方式访问它。 但您仍然可以使用*语法访问它:

 @layout/dialog_title 

将此添加到我自己的样式,只需将dialog_title.xml复制到我的应用程序并稍微更改它就解决了我的问题。

你看这个吗?有一个pcecial图书馆,你可以在那里看。 最后一个链接将解决您的问题

你可以像这样制作一个自定义对话框:

  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

      

如果我猜错了,“删除蓝线”意味着删除对话框标题与其正文之间的边框。 该边框来自Holo主题,因此如果不使用自定义布局,则无法删除它。

使用以下内容创建名为custom-dialog.xml的文件(这只是一个示例..根据需要修改它):

 < ?xml version="1.0" encoding="utf-8"?>        

如您所见,我正在使用不在您的项目中的资源和资源,但您可以安全地删除它们。 在我的情况下的结果或多或少是以下一个,顶部的图像我将在代码中以编程方式设置。

简单截图

要创建对话框,请使用以下内容:

 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; } 

这些无法通过控制brotha隐藏它。我遇到了同样的问题。 你唯一能做的就是创建自己的CustomDialog

这是一个示例应用程序

下载并查看设计模式,然后就会很容易

这是一个关于制作自定义对话框的教程

重要的部分是在创建DialogObject后不要通过setTitle()设置Title,在CustomLayout中创建TextView并从findViewByID()调用它并设置你的标题

在colors.xml中:

 #00000000 

在对话框中:

int divierId = dialog.getContext()。getResources()。getIdentifier(“android:id / titleDivider”,null,null);

查看divider = d.findViewById(divierId); divider.setBackgroundColor(getResources()的getColor(R.color.transparent));

为了完全隐藏默认的蓝线(假设你在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); } }