2014-12-06 118 views
8

我想創建一個帶有角點的對話框片段。 這個問題我有對話框中的Android圓角佈局

enter image description here

正如你看到的,如果在上面一個TextView,會有它的某些部分是在對話,這是壞的透明部分。 這也發生在該列表視圖中的滾動條上。 我想「剪切」那部分..或者像第二張照片一樣掩蓋它們。 這可能嗎?

形狀

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#FFF" /> 
    <corners android:topLeftRadius="20dp" android:topRightRadius="20dp" 
     android:bottomLeftRadius="20dp" android:bottomRightRadius="20dp"/> 
    <stroke android:color="#7F7F7F" android:width="1dp" /> 
</shape> 

我使用的片段的線性佈局,在上述的背景。 我打電話

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
     getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

爲了擺脫背景顏色&標題欄。

+0

您可以嘗試新的CardView,它具有圓角和海拔屬性,看起來不錯 – 2014-12-06 19:14:20

+0

我想使用DialogFragment ..卡片視圖是一個視圖..我想實現像Facebook註釋對話框(我知道這是一個彈出窗口,但我想用片段對話框做類似的事情) – 2014-12-06 19:15:02

回答

3

簡單的(非削波)方式

最簡單的方法是簡單地添加填充到您的佈局。然後你的文字將不會與圓角重疊。

如果你必須有圓角沒有填充,是我所知道的其他幾個選項:

選項1:剪輯

clipping views支持添加到瀏覽次數(API 21+)在View類API 21.如果你不需要較早API級別,它真的很容易使用這個內置的夾子功能:

  • 設置你的圓形繪製爲佈局背景。
  • 根據文檔,你只需要設置你的佈局XML剪輯屬性android:clipToOutline="true"

遺憾的是,a bug這個屬性似乎並沒有工作。幸運的是,我們可以在Java設置剪裁:

  • 在您的活動或片段,只是做:View.setClipToOutline(true)

我測試過它,和它的作品:

View Clipping ON View Clipping OFF

選項2:九貼片框架掩模

如果您需要支持的設備< API 21圓角裁剪,您可以使用此一般方法:

  • 使用FrameLayoutRelativeLayout,創建一個圓角nine-patch爲「框架」內容的其餘部分。
  • 這個9貼片圖像應該是透明的(alpha 0%),除了角落,這應該是不透明的(alpha 100%)。
  • 將9-patch設置爲視圖的背景,並將該視圖作爲佈局中的最後一個子視圖(這會使其在其他視圖之上堆疊)。
  • 然後文本將通過透明九貼片顯示,但將在角落被遮罩。

如果您使用這種方法,只需讓您的九貼片角落匹配您的背景顏色。