112

フラグメント (画面全体を占める) に対してダイアログを作成する必要があります。ダイアログは、フラグメントの上に配置されるフローティング ダイアログである必要があり、フラグメントはフラグメントの外側で暗くなります。

カスタムダイアログの場合、エッジが湾曲しているlinearLayoutがあります。何をしても、ダイアログのすべての側面に黒い境界線があります(非常に小さい)。私はそれを透明にして消えるようにすべてを試しました(そのため、すべてのダイアログは線形レイアウト-曲線ボックスになります)

DialogFragment の場合、これは onCreateView 用に持っているものです

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    LinearLayout layout =(LinearLayout)inflater.inflate(R.layout.custom_dialog, null);
    LinearLayout item = (LinearLayout)layout.findViewById(R.id.display_item);
    populateItemData(item, inflater);
    return layout;
}

custom_dialog は、android:backgroung が #000000 に設定された LinearLayout です。

これは、カスタム ダイアログの私のスタイルです

<style name="CustomDialog" parent="android:style/Theme.Dialog">
    <item name="android:windowBackground">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:alwaysDrawnWithCache">false</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

私はこのスタイルであらゆる種類の組み合わせを試しました (私がオンラインで見たものから)、その厄介な黒い境界線を取り除くことはできません. #000000...

私はこれに文字通り3〜4時間費やしました。他の誰かが助けてくれることを願っています...

4

10 に答える 10

333

試す

getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

あなたDialogFragmentonCreateView

于 2012-02-16T16:43:26.723 に答える
24

これを試してください(100%カスタムDialogFragmentを作成する方法)これはダイアログで機能します

    Dialog dialog = new Dialog(getActivity());

    dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);

    dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);      

        // layout to display
    dialog.setContentView(R.layout.add_edit);

    // set color transpartent
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    dialog.show();
于 2013-02-12T10:37:41.490 に答える
12

onActivityCreated

getDialog().getWindow().getAttributes().alpha = 0.9f; // An alpha value to apply to this entire window. An alpha of 1.0 means fully opaque and 0.0 means fully transparent

DialogFragment透明用

于 2014-11-27T07:01:18.563 に答える
8

完全に透過的に使用するには: setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);

カスタム背景の場合 - 値フォルダー (values/style.xml) にスタイル ファイルを作成し、それを使用し ます。

スタイル ファイルで属性をオーバーライドします: android:windowBackground@color/DialogBackgroundBlackSemiTransparentにします。

于 2015-06-15T13:25:19.617 に答える
3

あなたがしたい場合は、これを試してください:

public TransparentDialog()
{
    super();
    setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}
于 2012-12-28T20:16:27.917 に答える