2011-09-13 124 views
2

我試圖做成一個圓角矩形的對話框。我通過指定以下形狀XML作爲背景的對話框layout.xml沒有背景的android圓角矩形直邊矩形

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

所得對話已倒圓的黑色90度矩形內角這樣做。我想知道我如何擺脫九十度長方形,只剩下圓角矩形。

好像矩形模板後,我的曲線留下的角落:

下面是對話的圖片的鏈接我的代碼的生成: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我實際上沒有經驗的自定義對話框,但這兩個鏈接看起來像他們可能會回答你的題。 – Jakar

+1

你的代碼適用於我,我認爲你的問題是對話框中的任何內容是填充父項,並且這個尖角已經通過了你的半徑圓角。嘗試增加填充到100dip只是爲了測試這個。 – Blundell

+0

@Blundell爲我工作 - 謝謝!一樣的問題。圓角,但在角落外面有一些不需要的背景,就好像在形狀周圍有一個矩形。我花了很多年試圖從形狀中爲背景着色,而沒有任何工作。然後,我將填充的形狀設置爲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> 

UPDATE以供將來參考(它被添加評論)

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

我對遲到的反應表示歉意,花了一些時間找出解決方案。試試這個來擺脫黑色九十度矩形: 'Context mContext = getApplicationContext();' '對話框對話框= new Dialog(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);