Android:对话框的最小保证金

我用androidandroid.app.Dialog来创build一个自定义的对话框(对于button和背景)在我的对话框中,我有一个TextView里面的一个ScrollView而我有一个简短的文本,这完全显示了我想要的文本,但如果文本是非常大的对话框采取全屏幕,我想在对话框和屏幕边缘之间有一个最小的边距。

我的问题是我想对话框不能更大,然后需要,我不能在此设置修复大小?

Here is how this look today.....I what a margin like this

我的对话框现在如何。我想要这样的保证金。


GameDialog.java

 public class GameDialog extends Dialog { public GameDialog(Context ct, int titleID, int messageID) { super(ct, R.style.dialog_style); this.setContentView(R.layout.dialog_layout); } // This exist more code but this has noting with the layout to do,only set the text and show the button that exist since the XML file. } 

R.style.dialog_style

 <style name="dialog_style" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">?button_image</item> <item name="android:windowNoTitle">true</item> <item name="android:textColor">#FF000000</item> <item name="android:textSize">20sp</item> </style> 

R.layout.dialog_layout

 <?xml version="1.0" encoding="utf-8"?> <!-- Dialog layout that show title and a textarea, and under this allow a row of button that is center layout. --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="14px" android:layout_marginRight="14px"> <TextView android:layout_gravity="center_vertical" android:id="@+id/text_title" android:layout_width="fill_parent" android:layout_height="wrap_content"> </TextView> </LinearLayout> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1" android:layout_marginLeft="14px" android:layout_marginRight="14px"> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text_main" android:padding="5px" android:layout_width="fill_parent" android:layout_height="wrap_content" > </TextView> </ScrollView> </LinearLayout> <LinearLayout android:id="@+id/layout_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <!-- this will be show while need to show a button --> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> </LinearLayout> </LinearLayout> 

Solutions Collecting From Web of "Android:对话框的最小保证金"

框架实际上是在背景图片上进行的。 换句话说,如果你看看为框架定义的主题,他们的windowBackground属性只是一个清晰的颜色,即:

 <item name="android:windowBackground">@android:color/transparent</item> 

然后,放置在根布局项目上的背景图像是一个9贴图,内部填充了所有边(即图像中内置的额外空间,所以当图像拉伸以填充屏幕时,您仍然可以看到边缘) 。 看看AOSP源代码中的一个面板,了解我的意思( 链接 )。

所以对于你的解决scheme,我会推荐两件事情:

  1. 如上所述,使用windowBackground修改您的自定义样式
  2. 更新您的自定义背景图像以包含固有的透明边距

对于第2步,如果您的图片目前是9补丁,请执行与Google所做的相同的操作。 如果您使用XML创build图像,则可以像下面的示例一样使用<layer-list>将可见的矩形embedded到另一个使用padding的另一个矩形内:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle" > <solid android:color="@android:color/transparent" /> <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" /> </shape> </item> <!-- This shape will be inset by the padding set above --> <item> <shape android:shape="rectangle" > <solid android:color="#262626" /> </shape> </item> </layer-list> 

在这种情况下,填充不会传递到内容,所以您还需要将填充添加到根布局项目以使内容边界与图像显示匹配。

只需将布局边距添加到顶层ViewGroup(您的LinearLayout)即可。

此外,你有许多不必要的嵌套布局,不应该使用像素单位。 你的dialog_layout.xml应该看起来像这样:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="14dp" > <TextView android:id="@+id/text_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingRight="14dp" android:paddingLeft="14dp" /> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:paddingRight="14dp" android:paddingLeft="14dp"> <TextView android:id="@+id/text_main" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </ScrollView> <LinearLayout android:id="@+id/layout_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal"> <!-- this will be show while need to show a button --> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> <ImageView style="?icon_size.button" android:visibility="gone"/> </LinearLayout> </LinearLayout>