9

カスタムダイアログを作成するためにアンドロイドを使用android.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パッチです(つまり、画像が画面いっぱいに伸びても端の周りを見ることができるように、画像に余分なスペースが組み込まれています) 。AOSPソースのパネルの1つを見て、私が何を意味するのかを理解してください(リンク)。

だからあなたの解決策のために私は2つのことをお勧めします:

  1. windowBackground上記のようにカスタムスタイルを変更します
  2. カスタム背景画像を更新して、固有の透明な余白を含めます

ステップ2で、画像が現在9パッチの場合は、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 に答える