আপনার DialogFragment
প্রস্থ এবং উচ্চতা নিয়ন্ত্রণ করার একটি উপায় হ'ল এটির সংলাপটি আপনার দর্শনটির প্রস্থ এবং উচ্চতা সম্মান করে কিনা তা নিশ্চিত করা makeWRAP_CONTENT
।
ব্যবহার ThemeOverlay.AppCompat.Dialog
এটি অর্জনের একটি সহজ উপায় হ'ল ThemeOverlay.AppCompat.Dialog
অ্যান্ড্রয়েড সমর্থন লাইব্রেরিতে অন্তর্ভুক্ত স্টাইলটি ব্যবহার করা ।
DialogFragment
সাথে Dialog
:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
Dialog dialog = new Dialog(getContext(), R.style.ThemeOverlay_AppCompat_Dialog);
dialog.setContentView(view);
return dialog;
}
DialogFragment
সঙ্গে AlertDialog
(সতর্কীকরণ: minHeight="48dp"
):
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getContext(), R.style.ThemeOverlay_AppCompat_Dialog);
builder.setView(view);
return builder.create();
}
ThemeOverlay.AppCompat.Dialog
আপনার ডায়লগগুলি তৈরি করার সময় আপনি নিজের অ্যাপ্লিকেশনটির এক্সএমএল থিমটিতে যুক্ত করে আপনি ডিফল্ট থিম হিসাবে সেট করতে পারেন ।
সাবধানতা অবলম্বন করুন, অনেকগুলি ডায়ালগের দেখতে ভাল লাগার জন্য ডিফল্ট ন্যূনতম প্রস্থের প্রয়োজন।
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- For Android Dialog. -->
<item name="android:dialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
<!-- For Android AlertDialog. -->
<item name="android:alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
<!-- For AppCompat AlertDialog. -->
<item name="alertDialogTheme">@style/ThemeOverlay.AppCompat.Dialog</item>
<!-- Other attributes. -->
</style>
DialogFragment
সঙ্গে Dialog
, এর ব্যবহার করে android:dialogTheme
:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
Dialog dialog = new Dialog(getContext());
dialog.setContentView(view);
return dialog;
}
DialogFragment
সঙ্গে AlertDialog
, ব্যবহার android:alertDialogTheme
বাalertDialogTheme
(সতর্কতা minHeight="48dp"
:) ব্যবহার করে:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setView(view);
return builder.create();
}
বোনাস
পুরানো অ্যান্ড্রয়েড এপিআইগুলিতে, Dialog
তাদের শিরোনামের কারণে কিছু প্রস্থ সমস্যা রয়েছে বলে মনে হয় (এমনকি আপনি যদি সেট নাও করেন)।
আপনি যদি ব্যবহার করতে না চানThemeOverlay.AppCompat.Dialog
শৈলী এবং আপনার Dialog
কোনও শিরোনামের প্রয়োজন নেই (বা কাস্টম রয়েছে) তবে আপনি এটি অক্ষম করতে চাইতে পারেন:
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
LayoutInflater inflater = LayoutInflater.from(getContext());
View view = inflater.inflate(R.layout.dialog_view, null);
Dialog dialog = new Dialog(getContext());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(view);
return dialog;
}
পুরানো উত্তর, বেশিরভাগ ক্ষেত্রে কাজ করবে না
আমি প্রোগ্রামটিমে কোনও নির্দিষ্ট আকার নির্দিষ্ট না করেই ডায়লগটি আমার বিন্যাসের প্রস্থ এবং উচ্চতার সম্মান করার চেষ্টা করছিলাম।
আমি এটি বুঝতে পেরেছিলাম android:windowMinWidthMinor
এবং android:windowMinWidthMajor
সমস্যা তৈরি করছিলাম । যদিও তারা আমার Activity
বা থিমটিতে অন্তর্ভুক্ত ছিল না, তবুও সেগুলি Dialog
থিমটিতে প্রয়োগ করা হচ্ছে Activity
, কোনওভাবে h
আমি তিনটি সম্ভাব্য সমাধান নিয়ে এসেছি।
সমাধান 1: একটি কাস্টম সংলাপ থিম তৈরি করুন এবং ডায়ালগটি তৈরি করার সময় এটি ব্যবহার করুন DialogFragment
।
<style name="Theme.Material.Light.Dialog.NoMinWidth" parent="android:Theme.Material.Light.Dialog">
<item name="android:windowMinWidthMinor">0dip</item>
<item name="android:windowMinWidthMajor">0dip</item>
</style>
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(getActivity(), R.style.Theme_Material_Light_Dialog_NoMinWidth);
}
সমাধান 2: একটি কাস্টম থিম তৈরি করতে ব্যবহার করুন যা সংলাপটির জন্য ContextThemeWrapper
পরিবেশন করবে Context
। আপনি যদি কোনও কাস্টম সংলাপ থিম তৈরি করতে না চান তবে এটি ব্যবহার করুন (উদাহরণস্বরূপ, আপনি যখন নির্দিষ্ট থিমটি ব্যবহার করতে চান android:dialogTheme
)।
<style name="Theme.Window.NoMinWidth" parent="">
<item name="android:windowMinWidthMinor">0dip</item>
<item name="android:windowMinWidthMajor">0dip</item>
</style>
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(new ContextThemeWrapper(getActivity(), R.style.Theme_Window_NoMinWidth), getTheme());
}
সমাধান 3 (একটি সঙ্গে AlertDialog
): জোরদার android:windowMinWidthMinor
এবং android:windowMinWidthMajor
মধ্যে ContextThemeWrapper
দ্বারা নির্মিত AlertDialog$Builder
।
<style name="Theme.Window.NoMinWidth" parent="">
<item name="android:windowMinWidthMinor">0dip</item>
<item name="android:windowMinWidthMajor">0dip</item>
</style>
@Override
public final Dialog onCreateDialog(Bundle savedInstanceState) {
View view = new View(); // Inflate your view here.
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setView(view);
// Make sure the dialog width works as WRAP_CONTENT.
builder.getContext().getTheme().applyStyle(R.style.Theme_Window_NoMinWidth, true);
return builder.create();
}