1. ホーム
  2. android

[解決済み] カスタムDialogFragmentをFragmentの上に透過させることができない

2022-09-26 21:25:59

質問

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

カスタムダイアログのために、私は湾曲したエッジを持つ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>

このスタイルであらゆる組み合わせを試しましたが(ネットで見た限り)、あの煩わしい黒枠を取り除くことができません。LinearLayoutの背景を#000000以外に設定すれば、白や他の色に塗ることができるのですが...。

このために文字通り 3 ~ 4 時間費やしてきました。

どのように解決するのですか?

試してみてください。

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

の中に DialogFragment 's onCreateView