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

রচনা পদ্ধতি চেষ্টা করুন
Wear OS-এ Jetpack Compose হল Wear OS-এর জন্য প্রস্তাবিত 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 ফিরে আসে। এজ সোয়াইপ ব্যবহারকারীকে ভিউতে যেকোন জায়গার পরিবর্তে স্ক্রীনের সবচেয়ে বাম 10% থেকে সোয়াইপ করে ভিউ খারিজ করতে দেয়।

নিম্নলিখিত উদাহরণগুলি দেখায় কিভাবে একটি 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 ফিরে আসে না এবং আপনি কী ইভেন্টটিকে আটকাতে পারবেন না।

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