Wear-এ পূর্ণ-স্ক্রীন কার্যকলাপ থেকে প্রস্থান করুন

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

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

বাতিল করার জন্য সোয়াইপ করার অঙ্গভঙ্গি

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

  • উল্লম্ব বিন্যাস
  • বিষয়বস্তু ধারক

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

একটি কার্যকলাপ খারিজ করুন

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

একটি খণ্ডাংশ খারিজ করুন

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

কোটলিন

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.add এর পরিবর্তে FragmentManager.replace ব্যবহার করুন। এটি নিশ্চিত করতে সাহায্য করে যে, সোয়াইপ করে সরিয়ে দেওয়ার সময় আপনার পূর্ববর্তী ফ্র্যাগমেন্টটি উপরের ফ্র্যাগমেন্টের নিচে রেন্ডার হয়।

অনুভূমিক স্ক্রোলযোগ্য দৃশ্য

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

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

নিম্নলিখিত উদাহরণগুলি দেখায় কিভাবে একটি ভিউকে 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>

কোটলিন

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 রিটার্ন করে না, এবং আপনি কী ইভেন্টটি ইন্টারসেপ্ট করতে পারবেন না।

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