2012-01-16 5 views
1

ボタンがダイアログの下隅にあるダイアログ(ゲームのダイアログ)が必要です。 ではなく、非常に隅にあります(つまり、ボタンの一部がダイアログ上にあり、その部分がその外にあります)。Android。ダイアログの外に少しだけダイアログボタンを表示する方法

+0

、uはヒントを得ることを願って、あなたのダイアログのAlertDialog.Builderを使用しています? – Josh

+0

私はビルダーとレイアウトを試しました。私はそのメカニズムに制限がありません。私は希望の表情を達成するために私を助けるものを使用します – Taras

答えて

1

は、私が試したサンプルレイアウトです:ここ

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 

    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
<FrameLayout 
android:orientation="vertical" 
android:id="@+id/ll1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/dialog_frame"> 
</FrameLayout> 
<Button android:layout_width="wrap_content" 
android:id="@+id/button1" 
android:layout_height="wrap_content" 
android:layout_marginTop="35dp" 
android:layout_centerHorizontal="true" 
    android:text="Button"></Button> 
</RelativeLayout> 

はスクリーンショットです: layout sample

はグッドラック

+0

それを試して、私は上に描画されたすべてを含むダイアログの境界を持っている以外は大丈夫、動作します。私は[このトピック](http://stackoverflow.com/questions/1883425/android-borderless-dialog)のヒントを使ってこれを修正しました。助けてくれてありがとう! – Taras

+0

@Tarasコードを投稿できますか? –

2

まず、レイアウトの子供を親の外に移動することはできません。

あなたが行っていることを一度も試みたことはありませんでしたが、できると思います。そのトリックは、ダイアログテーマのアクティビティ(開発者サイトやAPIデモでこれらの例を見つけることができます)に行くことです。レイアウトのルートノードの幅と高さがwrap_contentに設定されていることを確認してください。あなたのルートレイアウトは、RelativeLayoutで、バックグラウンドはありません(android:background = "#0000")。

次に、背景のカスタムドロウアブル(またはデフォルトダイアログでフレームワークから使用するもの)を使用し、幅と高さをfill_parentまたはmatch_parentに設定して、ルートノードに別のレイアウトを追加します(おそらくFrameLayoutが機能します)。アンドロイドを設定する:ダイアログの端から背景を引っ張るいくつかのディップ値を埋め込む。

残りの唯一のことは、他のレイアウト要素をルートノードに追加することです。 FrameLayoutは他のすべての下に描画され、パディングはUIを含まない境界線の錯覚を作成します。

更新 Yikesは、良い結果と悪い結果で上記を試しました。

:まず、あなたは間違いなくを使用するAPIのデモから、 "カスタムダイアログ" の例を見てみたいと思うでしょう

上記のXMLレイアウトファイルを使用するアクティビティを作成し、アクティビティのスタイルをxml/styles.xmlで定義したTheme.CustomDialogに設定します。これにより、あなたの活動の赤い背景が得られます。 filled_boxシェイプファイルを編集して、1つの背景属性を不可視( "#0000")に設定することができます。結果は、背景のないダイアログ型のアクティビティーでなければなりません。

次へ私は上記の考えを使ってバックグラウンドをハックしようとしました。アイデアは、他のUI要素の背後に描かれた偽の背景が含まれているため、layout_marginを使用して「収縮」して影響を与えないようにする必要があります。ここで問題となるのは、偽の背景が他のUI要素に対して相対的な幅と高さを持つ必要があるため、それらを包含するHASを並べ替えることで、相対的な幅と高さを適切に測定できます。

だから私は、偽の背景を試してはいけないということを除いて、上記のことのほとんどを解決することができると思う。ルートレイアウトの背景に9パッチのドロアブルを使用し、背景よりも遠くに描画されるように背景のエッジを縮小してください。あなたはまだ目に見えないウィンドウのテーマで上記のカスタムテーマを使用します。ここで

関連する問題