2013-12-17 54 views
1

我想做以下(漆進入):非常定製DialogFragment

enter image description here

正如你所看到的,在對話框在屏幕的中間,有一個自定義視圖。

但是,我想讓用戶能夠點擊對話框後面的「不要關閉對話框」。

我做了以下實現(DialogFragment):

** 
* Triggered when the Dialog is created. 
* 
* @param savedInstanceState - Bundle containing saved information. 
* 
* @return Dialog ready to be shown. 
*/ 
@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) 
{ 
    Dialog dialog = new Dialog(context); 

    setCancelable(false); 

    return dialog; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    setStyle(STYLE_NO_INPUT, R.style.launcherDialog); 
} 

這產生了以下內容:

enter image description here

這幾乎是正確的,現在我要做兩件事情:

  • 添加自定義視圖
  • 刪除從對話框生成的灰色背景。

所以添加自定義視圖,我的確在onCreateDialog如下:

LayoutInflater inflater = LayoutInflater.from(context) 
View progressbarLayout = inflater.inflate(R.layout.launcher_dialog_view, null); 
dialog.setContentView(progressbarLayout); 

但我得到這個異常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{SearchActivity}: android.util.AndroidRuntimeException: requestFeature() must be called before adding content 

而且不管怎麼說,我還是有缺少如何刪除由DialogFragment生成的灰色背景。

提示是soooo讚賞。我一直堅持這麼多小時。

編輯:哦,佈局:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/launcher_ad_holder" 
    android:layout_height="150dp" 
    android:layout_width="150dp" 
    android:background="@android:color/transparent"> 


    <RadioButton 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New RadioButton" 
      android:id="@+id/radioButton" android:layout_centerVertical="true" android:layout_alignParentRight="true"/> 
</RelativeLayout> 

而且款式:

<resources> 
<style name="launcherDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowIsFloating">false</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowTitleStyle">@null</item> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
    <item name="android:gravity">bottom</item> 
</style> 

+0

你可以參考這個鏈接的http://計算器。 com/questions/20258730 /定製對話框與關閉按鈕/ 20258862#20258862 –

+0

您無法與顯示的對話框背後進行交互,因此您可能需要僞造一個看起來像對話框的視圖。 – Kai

+0

@Kai你確定嗎?因爲我實際上正在與editText交互,你可以在paint中看到它。我可以輸入內容並按搜索。唯一的問題是,我不知道如何添加customView(沒有崩潰),以及如何刪除灰色背景 – Reinherd

回答

0

使用此之前您的setContentView()

requestWindowFeature(Window.FEATURE_NO_TITLE); 
+0

requestFeature()必須在添加內容 – Reinherd

+0

之前調用是的多數民衆贊成我是問你你的對話方法使用 \t \t dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)裏面做; –

+0

那就是我所做的,它仍然崩潰。我在onCreateDialog中加入了:'Dialog dialog = new Dialog(context); \t \t dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); //更多代碼[....]' – Reinherd

0

好。我回答自己。對於雙待,我只是有一個答案:

  1. 對於CustomView,我們已經重寫方法onCreateView和膨脹存在的觀點:

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 
        return inflater.inflate(R.layout.launcher_dialog_view, null); 
    } 
    

然而,還缺去除灰色背景的一部分。

實際情況:

enter image description here

0

嘗試使用此方法去除背景

Window dialogWindow = getDialog().getWindow(); 

dialogWindow.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 
dialogWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
0

試試這個

@Override 
    public void onStart() { 
     super.onStart(); 
     Window window = getDialog().getWindow(); 
     WindowManager.LayoutParams windowParams = window.getAttributes(); 
     windowParams.dimAmount = 0.0f; 
     windowParams.flags |= WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS; 
     window.setAttributes(windowParams); 
    }