2011-09-13 7 views
2

丸い四角形で表示されるダイアログを作成しようとしています。私は、表示されたダイアログが黒90度の長方形の内側の角を丸めたダイアログlayout.xml背景の真っ直ぐな四角形を持たないアンドロイドの丸い四角形

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

    <solid android:color="#FFFFFF"/> 
    <corners android:radius="40dp"/> 
    <padding android:left="10dp" 
      android:right="10dp" 
      android:top="10dp" 
      android:bottom="10dp"/> 
</shape> 

の背景として、以下の形状XMLを指定することによって、これをやっています。私はどのようにして90度の四角形を取り除いて丸い四角形を残すことができるか知りたい。

矩形テンプレートはコーナーIカーブの後の後ろにとどまるように思える:ここ

ダイアログの画像へのリンクです私のコードの生成: http://img577.imageshack.us/img577/8292/photoon20110912at2032.jpg

+1

つを助けることがあります。http://stackoverflow.com/questions/6101623/how-to-add-rounded-corners-半透明の背景やhttp://developer.android.com/guide/topics/ui/themes.html私は実際にカスタムダイアログの経験はありませんが、これらの2つのリンクはあなたの質問。 – Jakar

+1

あなたのコードは私のために働く、私はあなたの問題は、ダイアログボックスの中には、親を塗っていると思うと、これはあなたの半径丸い角を通過している鋭いコーナーを持っています。これをテストするためにパッドを100dipに増やしてみてください。 – Blundell

+0

@ブルンデル私のために働いた - ありがとう!同じ問題。丸みのあるコーナーですが、コーナーの外側では、周囲に矩形があるように、不必要な背景があります。私は年齢を過ごして、その中からその背景を色づけしようとしましたが、何も効果がありませんでした。私は100dpに形状のパディングを設定し、問題が親にあることがわかりました。私は余分な詰め物を入れるとすぐに分かりました。簡潔に言うと、丸みを帯びたボタンの標準的な解決策で、形状とコーナーがあり、ちょうど丸い形がバックグラウンドに配置されます。 –

答えて

4

ことは、これを試してみてください:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:shape="rectangle"> 
<solid android:color="#B7B7B7"/> 
<corners android:bottomLeftRadius="8dip" 
    android:bottomRightRadius="8dip" 
    android:topLeftRadius="8dip" 
    android:topRightRadius="8dip"/> 
</shape> 
+0

これは私がすでに持っているコードとは違うとは思わない。この場合、向き、幅、高さのプロパティがどのように異なっているのかよく分かりませんが、ダイアログに変更がないことはわかりました。私の四角形はTextViewを囲んでいるので、私のダイアログのサイズはテキストビューとパディングだけで決まるようです。 – Jays

+0

まあ、私はあなたのために働いてくれました。あなたは今あなたが得ているもののスクリーンショットを与えることができますか?他の方法ではうまくいきません。 – Lavanya

3

これにより、背景のない丸い四角形が必要になります。

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 

<gradient 
    android:angle="270"/> 
<stroke 
    android:width="2dp" 
    android:color="#FFF"/> 
<corners 
    android:radius="40dp"/>  

</shape> 

将来の参照用の更新プログラム(それはコメントとして追加されました)

Context mContext = getApplicationContext(); 
Dialog dialog = new Dialog(mContext,android.R.style.Theme_Translucent_NoTitleBar); 
dialog.setContentView(R.layout.custom_dialog); dialog.show(); 
+0

そのままコピーしましたが、違いは黒い四角形内の四角形の輪郭です。私が投稿したコードから何を得ているかを示す画像を追加しました。グラデーションは何をしますか?私はそれがダイアログ全体の色の変更に使用されたことを理解しています。これがあなたのために働くならば、私は間違ったことをする必要があります。 – Jays

+1

私は後半の対応についてお詫び申し上げます。解決策を理解するまでには時間がかかりました。黒90度の四角形を取り除くために、これを試してみてください: 'コンテキストmContext = getApplicationContext();' ' ダイアログ]ダイアログ=新しいダイアログ(mContext、android.R.style.Theme_Translucent_NoTitleBar);' ' dialog.setContentView(R .layout.custom_dialog); ' ' dialog.show(); ' これは役に立ちます。 – Permita

5

としてあなたのコンストラクタを書く:私は同じ問題を発生したときに、解決策でもあるショックを受けた

public CustomDialog(Context context, int theme) { super(context, theme); getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); }

+0

ありがとう!それは私のために働いた –

+0

ありがとう。まさに私が探していたもの。 また、独自のコンストラクタなしで使用することもできます。MyDialog.getWindow()。setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); –

+0

ありがとう@Ishlfa。わたしにはできる... –

0

少し変だ。たとえば、下記のように独自のカスタムドロウアブルを作成します。

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

    <solid android:color="@color/text_highlight" /> 

    <stroke 
     android:width="5dp" 
     android:color="@color/text_highlight" /> 

    <corners android:radius="12dp" /> 

    <stroke 
     android:width="1dp" 
     android:color="@android:color/transparent" /> 

</shape> 

あなたのダイアログに以下の行を追加します。以下の

dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

// This is line that does all the magic 
dialog.getWindow().setBackgroundDrawableResource(        
R.drawable.dialog_rounded); 
関連する問題