কাস্টম ডায়ালগফ্রেগমেন্টটিকে খণ্ডের তুলনায় স্বচ্ছ করতে পারে না


101

আমার একটি খণ্ডের উপরে একটি ডায়ালগ তৈরি করতে হবে (এটি পুরো পর্দা নেয়)। কথোপকথনের একটি ভাসমান সংলাপ হওয়া দরকার যা খণ্ডের বাইরে টুকরোটির অন্ধকারের সাথে খণ্ডের উপরে অবস্থান করা হবে ..

কাস্টম ডায়ালগের জন্য, আমার একটি লিনিয়ারালআউট আছে যা বাঁকা প্রান্তগুলি রয়েছে, আমি যাই করুক না কেন, ডায়ালগটির চারদিকে কালো সীমানা রয়েছে (খুব ছোট)। আমি এটিকে স্বচ্ছ করতে এবং চলে যাওয়ার জন্য সবকিছু চেষ্টা করেছি (যাতে ডায়ালগটি কেবল লিনিয়ার লেআউট - বাঁকা বাক্সে হয়)

ডায়ালগফ্রেগমেন্টের জন্য, অনক্রেটভিউয়ের জন্য আমার কাছে এটিই রয়েছে

@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;
}

কাস্টম_ডায়ালগ কেবল একটি লিনিয়ারলআউট যা অ্যান্ড্রয়েড রয়েছে: ব্যাকগ্রাউং # 000000 এ সেট করা হয়েছে

এটি কাস্টম সংলাপের জন্য আমার স্টাইল

<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 ঘন্টা অতিবাহিত করেছি, আমি আশা করি অন্য কেউ সাহায্য করতে পারে ...

উত্তর:


308

চেষ্টা করুন

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

আপনার DialogFragmentএসonCreateView


4
আপনি অর্ধেক স্বচ্ছ কালো পটভূমি (ম্লান) মুছে ফেলতেও
Andriy Bas

4
সমস্ত মার্জিন পাশাপাশি সরিয়ে দেয় .. ডায়ালগ পুরো প্রস্থে প্রসারিত।
উদয়

4
এবং এটা একটি ব্যতিক্রম কারণ হবে: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.Window android.app.Dialog.getWindow()' on a null object reference
কুলমাইন্ড

4
getDialog().getWindow().setBackgroundDrawableResource(android.R.color.transparent);পরিবর্তে আপনি কল করতে পারেন । এটি ব্যতিক্রম না করার জন্য আপনার DialogFragmentক্রিয়াকলাপ বা ফ্রেগমেন্ট থেকে dialogFragment.show(...);পদ্ধতির মাধ্যমে কল করা উচিত , ফ্রেগমেন্ট ট্রান্সজেকশন নয় add
কুলমাইন্ড

4
যদি কেউ Kotlin স্নিপেট জন্য খুঁজছেন হয়, এখানে এটি হল: dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
ফ্রান্সিস ল্যাকলি

24

এইটি চেষ্টা করুন ( আমি কীভাবে 100% কাস্টম ডায়ালগফ্রেগমেন্ট তৈরি করব ) ডায়ালগের জন্য এই কাজটি করুন

    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();

15

আপনার থিমটি আমার জন্য এটির মতো সেট করুন

<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);
}
}

11

ভিতরে 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স্বচ্ছ জন্য


8

সম্পূর্ণ স্বচ্ছ ব্যবহারের জন্য: সেটস্টাইল (ডায়ালগফ্রেগমেন্ট.এসটিইএল_নো_ফ্রেমে, অ্যান্ড্রয়েড.আর.স্টাইল।

কাস্টম ব্যাকগ্রাউন্ডের জন্য -আপনার মধ্যে একটি স্টাইল ফাইল তৈরি করুন (মান / স্টাইল.এক্সএমএল) এবং এটি ব্যবহার করুন: সেটস্টাইল (ডায়ালগফ্রেগমেন্ট.এসটিইএল_নো_ফ্রেমে, আপনার প্যাকেজ নাম.আর.স্টাইল. YOURE_CUSTOM_STYLE);

আপনার স্টাইল ফাইলটিতে অ্যাট্রিবিউট: অ্যান্ড্রয়েড: উইন্ডোব্যাকগ্রাউন্ডটি @ রঙ / ডায়ালগব্যাকগ্রাউন্ডব্ল্যাকগ্রাউন্ডস্ল্যামি ট্রান্সপারেন্ট হতে হবে


7

ডায়ালগ ফ্রেগমেন্ট বা বটমশিটডায়ালগফ্র্যাগমেন্টে এটি যোগ করে আপনি অর্জন করতে পারেন

ইন onCreateDialogপদ্ধতি

@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;
   }

setBackgroundDrawableResourceএবং clearFlagsআমার জন্য কাজ করে (কোটলিন, অ্যান্ড্রয়েড এপিআই ভি 28)
ওয়েজলি

6
<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);
    }

4

যারা onCreateDialogপরিবর্তে সতর্কতা ডায়ালগ নির্মাতা ব্যবহার করছেন তারা onCreateViewনীচের কোডের মতো থিম বরাদ্দ করতে পারেন। থিমগুলির সম্পূর্ণ সেটটি আর স্টাইল থেকে পাওয়া যাবে । ভুলে যাবেন না যে তাদের মধ্যে কয়েকটি সম্প্রতি সমর্থিত এবং পুরানো ডিভাইস ফোনে উপলভ্য নয়।

@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();
    }

ধন্যবাদ, এটি আমি অনুসন্ধান করছিলাম।
মিলাদ ফরিদনিয়া

3

আপনি যদি পছন্দ করেন তবে এটি ব্যবহার করে দেখুন:

public TransparentDialog()
{
    super();
    setStyle(STYLE_NO_FRAME, R.style.AppTheme);
}

0

উত্তর গৃহীত উত্তর, কোটলিনে

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    var v = super.onCreateView(inflater, container, savedInstanceState)
    dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    return v
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.