フラグメント上にダイアログを作成する必要があります(画面全体を占有します)。ダイアログは、フラグメントの外側にフラグメントを暗くして、フラグメントの上に配置されるフローティングダイアログである必要があります。
カスタムダイアログの場合、曲線エッジを持つ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
のonCreateView
に
これを試してください( 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();
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
透明
このようにテーマを設定してください
<style name="MyDialog" parent="Base.Theme.AppCompat.Light.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
</style>
そして、このようなダイアログフラグメントセットで
public class Progress extends DialogFragment {
int style = DialogFragment.STYLE_NO_TITLE;
int theme = R.style.MyDialog;
public Progress() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(style, theme);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.progress, container, false);
}
}
完全に透過的に使用する場合:setStyle(DialogFragment.STYLE_NO_FRAME、Android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
カスタムバックグラウンドの場合、valuesフォルダー(values/style.xml)にスタイルファイルを作成して使用します。setStyle(DialogFragment.STYLE_NO_FRAME、yourpackagename.R.style.YOURE_CUSTOM_STYLE);
スタイルファイルで属性をオーバーライドします。Android:windowBackgroundに@ color/DialogBackgroundBlackSemiTransparent
onCreateDialog
の代わりにonCreateView
でAlertDialog Builderを使用している人は、次のコードのようにテーマを割り当てることができます。テーマの完全なセットは R.style から見つけることができます。それらの一部は最近サポートされ、古いデバイスの電話では利用できないことを忘れないでください。
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), Android.R.style.Theme_Translucent);
View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_album, null);
builder.setView(view);
return builder.create();
}
<style name="BaseDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">@color/colorAccent</item>
<item name="colorControlActivated">@color/colorAccent</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:colorBackgroundCacheHint">@null</item>
<item name="Android:colorBackground">@Android:color/transparent</item>
<item name="Android:windowIsTranslucent">true</item>
<item name="Android:windowIsFloating">true</item>
<item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="Android:windowActionModeOverlay">false</item>
<item name="Android:windowCloseOnTouchOutside">true</item>
<item name="Android:backgroundDimAmount">.00</item>//this line is changed alpha from 1.0 to 0.0(full transparent)
</style>
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, R.style.BaseDialogTheme);
}
これをDialog FragmentまたはBottomSheetDialogFragmentに追加することで実現できます
In onCreateDialog
Method
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.getWindow().setGravity(Gravity.BOTTOM);
dialog.getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
return dialog;
}
あなたがしたい場合はこれを試してください:
public TransparentDialog()
{
super();
setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}