Wear-এ ফুল-স্ক্রিন অ্যাক্টিভিটি থেকে বেরিয়ে আসুন

Compose-এর মাধ্যমে চেষ্টা করুন
Wear OS-এ Jetpack Compose হল Wear OS-এর জন্য সাজেস্ট করা UI টুলকিট।

ব্যবহারকারী বাঁদিক থেকে ডানদিকে সোয়াইপ করে Wear OS অ্যাক্টিভিটি থেকে বেরিয়ে আসতে পারেন। অ্যাপে অনুভূমিক স্ক্রলিং থাকলে, ব্যবহারকারী কন্টেন্টের প্রান্তে নেভিগেট করে এবং তারপরে বাঁদিক থেকে ডানদিকে সোয়াইপ করে বেরিয়ে আসেন। পাওয়ার বোতাম প্রেস করলেও ব্যবহারকারী ওয়াচফেসে ফিরে যেতে পারবেন।

বাতিল করতে সোয়াইপ করার জেসচার

বর্তমান স্ক্রিন বন্ধ করতে ব্যবহারকারীরা বাঁদিক থেকে ডানদিকে সোয়াইপ করেন। তাই, আমরা সাজেস্ট করি যে আপনি নিম্নলিখিতগুলি ব্যবহার করুন:

  • উল্লম্ব লেআউট
  • কন্টেন্ট কন্টেনার

এছাড়াও, আমরা সাজেস্ট করি যে আপনার অ্যাপে যেন হরাইজন্টাল সোয়াইপিং জেসচার না থাকে।

কোনও অ্যাক্টিভিটি বাতিল করা

অ্যাক্টিভিটি অটোমেটিক 'বাতিল করতে সোয়াইপ করুন' ফিচারকে সাপোর্ট করে। কোনও অ্যাক্টিভিটি বাঁদিক থেকে ডানদিকে সোয়াইপ করলে সেটি বাতিল হয়ে যায় এবং অ্যাপটি ব্যাক স্ট্যাক-এর নিচের দিকে নেভিগেট করে।

ফ্র্যাগমেন্ট বাতিল করা

ফ্র্যাগমেন্টে সোয়াইপ-টু-ডিসমিস ফিচার কাজ করার জন্য, আপনাকে ফ্র্যাগমেন্ট-ধারণকারী ভিউকে SwipeDismissFrameLayout ক্লাসে র‍্যাপ করতে হবে। ফ্র্যাগমেন্ট ব্যবহার করবেন কিনা সেই সিদ্ধান্ত নেওয়ার সময় এই বিষয়টি বিবেচনা করুন। নিচের উদাহরণে যেভাবে দেখানো হয়েছে সেইভাবে SwipeDismissFrameLayout ক্লাস ব্যবহার করুন:

Kotlin

class SwipeDismissFragment : Fragment() {
    private val callback = object : SwipeDismissFrameLayout.Callback() {
        override fun onSwipeStarted(layout: SwipeDismissFrameLayout) {
            // Optional
        }

        override fun onSwipeCanceled(layout: SwipeDismissFrameLayout) {
            // Optional
        }

        override fun onDismissed(layout: SwipeDismissFrameLayout) {
            // Code here for custom behavior, such as going up the
            // back stack and destroying the fragment but staying in the app.
        }
    }

    override fun onCreateView(
            inflater: LayoutInflater,
            container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View =
            SwipeDismissFrameLayout(activity).apply {

                // If the fragment should fill the screen (optional), then in the layout file,
                // in the androidx.wear.widget.SwipeDismissFrameLayout element,
                // set the android:layout_width and android:layout_height attributes
                // to "match_parent".

                inflater.inflate(
                        R.layout.swipe_dismiss_frame_layout,
                        this,
                        false
                ).also { inflatedView ->
                    addView(inflatedView)
                }
                addCallback(callback)
            }
}

জাভা

public class SwipeDismissFragment extends Fragment {
  private final Callback callback =
    new Callback() {
      @Override
        public void onSwipeStart() {
          // Optional
        }

        @Override
        public void onSwipeCancelled() {
          // Optional
        }

        @Override
        public void onDismissed(SwipeDismissFrameLayout layout) {
          // Code here for custom behavior, such as going up the
          // back stack and destroying the fragment but staying in the app.
        }
      };

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    SwipeDismissFrameLayout swipeLayout = new SwipeDismissFrameLayout(getActivity());

    // If the fragment should fill the screen (optional), then in the layout file,
    // in the androidx.wear.widget.SwipeDismissFrameLayout element,
    // set the android:layout_width and android:layout_height attributes
    // to "match_parent".

    View inflatedView = inflater.inflate(R.layout.swipe_dismiss_frame_layout, swipeLayout, false);
    swipeLayout.addView(inflatedView);
    swipeLayout.addCallback(callback);

    return swipeLayout;
    }
}

মনে রাখবেন: আপনার অ্যাক্টিভিটির মধ্যে ফ্র্যাগমেন্ট ব্যবহার করার সময়, সোয়াইপ-টু-ডিসমিস জেসচার কাজ করার জন্য FragmentManager.replace-এর পরিবর্তে FragmentManager.add ব্যবহার করুন। এটি নিশ্চিত করতে সাহায্য করে যে আপনার আগের ফ্র্যাগমেন্টটি সোয়াইপ করার সময় উপরের ফ্র্যাগমেন্টের নিচে রেন্ডার হয়।

অনুভূমিক স্ক্রলযোগ্য ভিউ

কিছু ক্ষেত্রে, যেমন প্যানিং সমর্থন করে এমন একটি ম্যাপ সহ একটি ভিউতে, ইউজার ইন্টারফেস অনুভূমিক সোয়াইপিং আটকাতে পারে না। এই পরিস্থিতিতে, দুটি বিকল্প আছে:

  • ব্যাক স্ট্যাক ছোট হলে, ব্যবহারকারী অ্যাপটি বন্ধ করে দিতে পারেন এবং পাওয়ার বোতাম টিপে ওয়াচফেস হোম স্ক্রিনে ফিরে যেতে পারেন।
  • আপনি যদি চান যে ব্যবহারকারী ব্যাক স্ট্যাকের নিচের দিকে যান, তাহলে আপনি ভিউটি একটি SwipeDismissFrameLayout অবজেক্টে র‍্যাপ করতে পারেন, যা এজ সোয়াইপকে সাপোর্ট করে। ভিউ বা তার চাইল্ড true থেকে canScrollHorizontally() কল রিটার্ন করলে এজ সোয়াইপ চালু হয়। এজ সোয়াইপ ব্যবহারকারীকে ভিউয়ের যেকোনও জায়গায় সোয়াইপ করার পরিবর্তে স্ক্রিনের বাঁদিকের ১০% থেকে সোয়াইপ করে ভিউ বাতিল করতে দেয়।

নিম্নলিখিত উদাহরণে দেখানো হয়েছে যে কীভাবে একটি ভিউকে SwipeDismissFrameLayout অবজেক্টে র‍্যাপ করতে হয়:

<androidx.wear.widget.SwipeDismissFrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/swipe_dismiss_root" >

    <TextView
        android:id="@+id/test_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="Swipe me to dismiss me." />
</androidx.wear.widget.SwipeDismissFrameLayout>

Kotlin

activity?.findViewById<SwipeDismissFrameLayout>(R.id.swipe_dismiss_root)?.apply {
    addCallback(object : SwipeDismissFrameLayout.Callback() {

        override fun onDismissed(layout: SwipeDismissFrameLayout) {
            layout.visibility = View.GONE
        }
    })
}

জাভা

SwipeDismissFrameLayout testLayout =
    (SwipeDismissFrameLayout) activity.findViewById(R.id.swipe_dismiss_root);
testLayout.addCallback(new SwipeDismissFrameLayout.Callback() {
    @Override
    public void onDismissed(SwipeDismissFrameLayout layout) {
        layout.setVisibility(View.GONE);
    }
  }
);

সাজেস্ট করা হয় না: 'বাতিল করতে সোয়াইপ করুন' ফিচার বন্ধ করুন

আমরা সাধারণত 'বন্ধ করতে সোয়াইপ করুন' ফিচার বন্ধ করার সাজেশন দিই না, কারণ ব্যবহারকারী আশা করেন যে সোয়াইপ করে যেকোনও স্ক্রিন বন্ধ করা যাবে। ব্যতিক্রমী ক্ষেত্রে, আপনি স্টাইল রিসোর্সে ডিফল্ট থিম বাড়াতে পারেন এবং android:windowSwipeToDismiss অ্যাট্রিবিউট false-এ সেট করতে পারেন, যেমনটি নিম্নলিখিত কোড স্যাম্পেলে দেখানো হয়েছে:

<resources>
  <style name="AppTheme" parent="@android:style/Theme.DeviceDefault">
    <item name="android:windowSwipeToDismiss">false</item>
  </style>
</resources>

ব্যবহারকারী প্রথমবার আপনার অ্যাপ ব্যবহার করার সময় আপনি তাকে জানাতে পারেন যে পাওয়ার বোতাম প্রেস করে তিনি অ্যাপ থেকে বেরিয়ে আসতে পারবেন।

পাওয়ার বোতামের সাহায্যে বাতিল করা

ফিজিক্যাল পাওয়ার বোতাম প্রেস করলে পাওয়ার কী ইভেন্ট পাঠানো হয়। তাই, আপনি পাওয়ার বোতামকে ফিরে যাওয়ার বোতাম হিসেবে বা সাধারণত নেভিগেশনের জন্য ব্যবহার করতে পারবেন না।

পাওয়ার বোতাম প্রেস করলে, ব্যবহারকারী ওয়াচফেস হোম স্ক্রিনে ফিরে যান। এর দুটি ব্যতিক্রম আছে:

  • ব্যবহারকারী যদি ইনপুট পদ্ধতি এডিটর (IME)-এ থাকেন, যেমন হাতের লেখা শনাক্তকরণ স্ক্রিন, তাহলে বোতামটি প্রেস করলে IME বন্ধ হয়ে যায় এবং ব্যবহারকারী অ্যাপে ফিরে আসেন।
  • ব্যবহারকারী ওয়াচফেসে থাকলে, হার্ডওয়্যার বোতাম প্রেস করলে অ্যাপ লঞ্চার খুলে যায়।

মনে রাখবেন যে পাওয়ার বোতাম প্রেস করা হলে, Activity ক্লাসের isFinishing() মেথড true রিটার্ন করে না এবং আপনি কী ইভেন্ট ইন্টারসেপ্ট করতে পারবেন না।

আরও তথ্যের জন্য, নেভিগেশন দেখুন।