9

我使用androidandroid.app.Dialog创建一个自定义对话框(用于按钮和背景)在我的对话框中我有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> 
4

2 回答 2

11

该框架实际上是在背景图像本身上执行此操作的。换句话说,如果您查看为框架定义的主题,它们的windowBackground属性只是一种清晰的颜色,即:

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

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

因此,对于您的解决方案,我会推荐两件事:

  1. windowBackground用我上面描述的修改你的自定义样式
  2. 更新您的自定义背景图像以包含固有的透明边距

对于第 2 步,如果您的图像当前是 9-patch,请执行与 Google 相同的操作。如果您在 XML 中创建图像,则可以使用<layer-list>类似以下示例将可见矩形嵌入到另一个带有填充的矩形中:

<?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>

在这种情况下,内边距不会转移到内容中,因此您还需要向根布局项添加内边距,以使内容边界与图像显示相匹配。

于 2012-11-08T22:31:21.290 回答
0

只需将布局边距添加到顶级 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> 
于 2012-11-08T22:21:29.230 回答