2012-12-11 89 views
1

我試圖做一個彈出窗口,在我的應用程序中單擊按鈕時顯示一個由適配器填充的listview。目前,我正在使用DialogFragment,它工作正常。但我希望能夠調整大小和理想的對話位置。Android PopupWindow與DialogFragment

在做了一些研究之後,PopupWindow允許您調整框的大小和位置,但是在實例化視圖內的片段時效果不佳。 DialogFragment很適合使用fragment和listview,但據我所知,你無法控制它的大小和位置。

有沒有人在創建動態彈出窗口時有類似的情況或經驗?

+0

我現在正在做這件事......我有一個DialogFragment作爲彈出式對話框來輸入新聯繫人的信息。此對話框中的其中一個下拉菜單是作爲彈出窗口實現的。我確實設法改變了DialogFragment的位置和大小。我會在下面發佈一些代碼。 – samosaris

+0

爲了澄清,您是使用「原始」DialogFragment還是AlertDialog?前者是用OnCreate和OnCreateView實例化的,還有一個靜態的NewInstance方法。帶有OnCreateDialog的梯子。 – samosaris

回答

2

要改變DialogFragment的大小,我做了以下withing的OnCreateView方法

注:代碼在C#中MonoDroid的; eaisly翻譯爲Java原生Android

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    base.OnCreateView(inflater, container, savedInstanceState); 

    View thisView = inflater.Inflate(Resource.Layout.NewContactDialog, container, false); 

    thisView.Post(() => 
     { 
      ViewGroup.LayoutParams lp = thisView.LayoutParameters; 

      lp.Width = 500; 

      thisView.LayoutParameters = lp; 

      thisView.Invalidate(); 
     } 

    ); 

    return thisView; 
} 

此代碼是來自實驗。我所定下的就是使用一個居中的DialogFragment(默認行爲)並調整背景。您可以覆蓋的DF的風格,無論是它的基礎上現有的主題

<style name="MyDialogFragment" parent="android:Theme.Holo.Dialog"> 
    <item name="android:windowIsFloating">true</item> 
</style> 

或完全風格它從地上爬起來

<style name="MyDialogFragment"> 
    ... (set all items, check docs) 
</style> 

對於開始嘗試使用MyDialogFragment風格上面,並設置windowIsFloating到假 並查看效果(只需使用SetStyle成員將您的主題設置爲此)。

的風格,你需要做自己的風格主題並重寫默認一些很好的鏈接:

http://www.therealjoshua.com/2012/01/styling-android-with-defaults/

http://developer.android.com/guide/topics/ui/themes.html/

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml/

https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml/

我說實話,使用DialogFragments和PopupWindo ws是一種痛苦,但它們是解決一些真正的GUI問題的專業化視圖,所以不要放棄。如果您需要更多信息,只需在下面的評論中提問(我意識到這不是一個答案,我只是想幫助,我正在做這件事情的B/C現在)。

+0

有關如何刪除背景的信息,請參見http://stackoverflow.com/questions/13822842/dialogfragments-with-clear-background-not-dimmed/13823466#13823466。 – samosaris

+0

Android文檔http://developer.android.com/reference/android/app/DialogFragment.html – samosaris