নতুন উপাদান উপাদান লাইব্রেরির সাহায্যে আপনি আপনার স্টাইলের বৈশিষ্ট্যটি ব্যবহার করে আপনার উপাদানটির আকারটি কাস্টমাইজ করতে পারেন shapeAppearanceOverlay
( দ্রষ্টব্য: এটির সংস্করণ 1.1.0 প্রয়োজন )
কেবল BottomSheetDialogFragment
ওভাররাইডিং onCreateView
পদ্ধতিটি ব্যবহার করুন এবং তারপরে নীচে শীট ডায়ালগগুলির জন্য আপনার কাস্টম স্টাইলটি সংজ্ঞায়িত করুন।
আপনার অ্যাপ্লিকেশন থিমটিতে bottomSheetDialogTheme
বৈশিষ্ট্যটি সংজ্ঞায়িত করুন styles.xml
:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<item name="colorPrimary">@color/colorPrimary</item>
....
<item name="bottomSheetDialogTheme">@style/CustomBottomSheetDialog</item>
</style>
তারপরে আপনার পছন্দসই আকারটি কেবল সাথে সংজ্ঞা দিন shapeAppearanceOverlay
<style name="CustomBottomSheetDialog" parent="@style/ThemeOverlay.MaterialComponents.BottomSheetDialog">
<item name="bottomSheetStyle">@style/CustomBottomSheet</item>
</style>
<style name="CustomBottomSheet" parent="Widget.MaterialComponents.BottomSheet">
<item name="shapeAppearanceOverlay">@style/CustomShapeAppearanceBottomSheetDialog</item>
</style>
<style name="CustomShapeAppearanceBottomSheetDialog" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopRight">16dp</item>
<item name="cornerSizeTopLeft">16dp</item>
<item name="cornerSizeBottomRight">0dp</item>
<item name="cornerSizeBottomLeft">0dp</item>
</style>
আপনি নিজের পদ্ধতিতে BottomSheetDialogFragment
( bottomSheetDialogTheme
আপনার অ্যাপ্লিকেশন থিমটিতে যুক্ত করার পরিবর্তে) এই পদ্ধতিটিকে ওভাররাইড করে একই আচরণ অর্জন করতে পারেন :
@Override public int getTheme() {
return R.style.CustomBottomSheetDialog;
}
এই ক্ষেত্রে আপনি এই থিমটি ওভারলে কেবল একক ক্ষেত্রে ব্যবহার BottomSheetDialogFragment
করছেন এবং সমস্ত অ্যাপ্লিকেশনটিতে নয়।
প্রসারিত রাষ্ট্র সম্পর্কে গুরুত্বপূর্ণ নোট :
প্রসারিত অবস্থায় নীচের অংশে সমতল কোণ রয়েছে । আপনি গিথুব রেপোতে সরকারী মন্তব্যটি পরীক্ষা করতে পারেন :
আমাদের নকশা দলটি দৃ strongly়তার সাথে মতামত দেয় যে বৃত্তাকার কোণগুলি স্ক্রোলযোগ্য সামগ্রী নির্দেশ করে এবং সমতল কোণগুলি দেখায় যে কোনও অতিরিক্ত সামগ্রী নেই। যেমনটি, তারা চায় না যে আমরা এই পরিবর্তনটি ফিটটোকন্টেন্টের সাথে যুক্ত করব to
এই আচরণটি সরবরাহ করেছে BottomSheetBehavior
এবং এটিকে ওভাররাইড করা অসম্ভব।
তবে সেখানে একটি কার্যনির্বাহী আছে -> অস্বীকৃতি: এটি পরবর্তী প্রকাশগুলিতে কাজ বন্ধ করতে পারে !!
আপনি একটি যোগ করতে পারেন BottomSheetCallback
মধ্যে BottomSheetDialogFragment
:
@NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
((BottomSheetDialog)dialog).getBehavior().addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
MaterialShapeDrawable newMaterialShapeDrawable = createMaterialShapeDrawable(bottomSheet);
ViewCompat.setBackground(bottomSheet, newMaterialShapeDrawable);
}
}
@Override public void onSlide(@NonNull View bottomSheet, float slideOffset) {
}
});
return dialog;
}
@NotNull private MaterialShapeDrawable createMaterialShapeDrawable(@NonNull View bottomSheet) {
ShapeAppearanceModel shapeAppearanceModel =
ShapeAppearanceModel.builder(getContext(), 0, R.style.CustomShapeAppearanceBottomSheetDialog)
.build();
MaterialShapeDrawable currentMaterialShapeDrawable = (MaterialShapeDrawable) bottomSheet.getBackground();
MaterialShapeDrawable newMaterialShapeDrawable = new MaterialShapeDrawable((shapeAppearanceModel));
newMaterialShapeDrawable.initializeElevationOverlay(getContext());
newMaterialShapeDrawable.setFillColor(currentMaterialShapeDrawable.getFillColor());
newMaterialShapeDrawable.setTintList(currentMaterialShapeDrawable.getTintList());
newMaterialShapeDrawable.setElevation(currentMaterialShapeDrawable.getElevation());
newMaterialShapeDrawable.setStrokeWidth(currentMaterialShapeDrawable.getStrokeWidth());
newMaterialShapeDrawable.setStrokeColor(currentMaterialShapeDrawable.getStrokeColor());
return newMaterialShapeDrawable;
}