2012-04-19 35 views
5

我有一个AlertDialog,我使用自定义对话框视图。自定义标题视图的想法似乎很简单,但自定义标题周围有一个黑色边框,我似乎无法摆脱它。顶部,左侧和右侧具有单像素边框,而底部具有约5个像素边框。AlertDialog自定义标题有黑色边框

使用Java创建对话框:

View titleView = inflater.inflate(R.layout.part_list_item, parent, false); 
((TextView) titleView.findViewById(R.id.partName)).setText(titleText); 
AlertDialog productDialog = new AlertDialog.Builder(getContext()) 
    .setCustomTitle(titleView) 
    .setAdapter(adapter, doNothingClickListener) 
    .create(); 

自定义标题视图布局,part_list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#ff0000" 
    android:id="@+id/partName" 
    android:layout_marginLeft="6dip" 
    android:textAppearance="?android:attr/textAppearanceLargeInverse" 
    /> 

我看到:

screenshot broken

我希望看到的:

screenshot fixed

任何想法?

+0

是相对布局和阴影填充在TextView的必要..? – ngesh 2012-04-19 05:40:32

+1

@sandy公平的问题。我删除了这些位,结果是相同的,只是底部的黑色边框现在变大了。 – 2012-04-19 05:43:53

+0

尝试在膨胀XML时将'attachToRoot'设置为true。 – dreamtale 2012-04-19 05:55:28

回答

0

这是在警报上有标题时由android创建的结果。从我所看到的屏幕截图中,警报的“正文”也是自定义视图,而不是警报消息属性。

因此,获得所需结果的最简单方法是在警报的自定义视图中添加标题布局。

例如:

View titleView = inflater.inflate(R.layout.part_list_item, parent, false); 

View bodyView = .... 
bodyView.addview(titleView); 
((TextView) itleView.findViewById(R.id.partName)).setText(titleText); 

AlertDialog productDialog = new AlertDialog.Builder(getContext()); 
productDialog.setView(bodyView); 
... 

productDialog.create(); 

bodyView.addview(titleView);增加了对你的戒备体标题布局。

productDialog.setView(bodyView);将自定义视图设置为警报的主体。

+1

你的方法有什么好处,删除'AlertDialog'有利于自定义'Dialog'?对我来说,使用'AlertDialog'的要点是已经有一个标题和一个我可以简单填写的主体。 – 2012-04-19 06:05:32

+0

我只是建议你可以在“body”视图中添加titleView。这将解决边界问题。因为标题和消息之间默认设置了边框! – 2012-04-19 06:33:41

3

试试这个:

LayoutInflater inflater = (LayoutInflater)yourClass.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View titleView = inflater.inflate(R.layout.custom_dialog, null); 

((TextView) titleView.findViewById(R.id.partName)).setText("Your Title"); 
alert1.setCustomTitle(titleView);