টাইলসে গতিশীল আপডেট দেখান

টাইলস ১.২ থেকে শুরু করে, আপনি গতিশীল এক্সপ্রেশন ব্যবহার করে প্ল্যাটফর্ম ডেটা আপডেট স্ট্রিম করতে পারেন। এরপর আপনি এই আপডেটগুলিকে আপনার টাইলসের অ্যানিমেশনের সাথে সংযুক্ত করতে পারেন। আপনার অ্যাপ প্রতি সেকেন্ডে এই মানের আপডেট পায়।

ডায়নামিক এক্সপ্রেশন ব্যবহার করে, যখন এর কন্টেন্ট পরিবর্তন হয় তখন আপনাকে পুরো টাইলটি রিফ্রেশ করতে হবে না। আপনার টাইলগুলিতে আরও আকর্ষণীয় অভিজ্ঞতা তৈরি করতে, সেই ডায়নামিক অবজেক্টগুলিকে অ্যানিমেট করুন।

ডেটা উৎসের সাথে গতিশীল এক্সপ্রেশন সংযুক্ত করুন

androidx.wear.protolayout এবং androidx.wear.protolayout.material নেমস্পেসে অনেক ক্লাস রয়েছে যাদের ক্ষেত্রগুলি গতিশীল এক্সপ্রেশন গ্রহণ করে। বেশ কয়েকটি উদাহরণের মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত রয়েছে:

আপনার টাইলে একটি এলিমেন্টের সম্ভাব্য মান হিসেবে একটি ডাইনামিক এক্সপ্রেশন ব্যবহার করতে, এলিমেন্টের সংশ্লিষ্ট *Prop ডাইনামিক প্রোপার্টি টাইপ ব্যবহার করুন এবং ডাটা সোর্সটি ডাইনামিক প্রোপার্টি টাইপের বিল্ডার ক্লাসের setDynamicValue() পদ্ধতিতে পাস করুন।

টাইলস এই গতিশীল সম্পত্তির ধরণগুলিকে সমর্থন করে:

  • ডিসপ্লে-স্বাধীন পিক্সেলে পরিমাপ করা রৈখিক মাত্রার জন্য, DimensionBuilders.DpProp ব্যবহার করুন।
  • ডিগ্রীতে পরিমাপ করা কৌণিক মাত্রার জন্য, DimensionBuilders.DegreesProp ব্যবহার করুন।
  • স্ট্রিং মানের জন্য, TypeBuilders.StringProp ব্যবহার করুন।
  • রঙের মানগুলির জন্য, ColorBuilders.ColorProp ব্যবহার করুন।
  • ফ্লোটিং-পয়েন্ট মানের জন্য, TypeBuilders.FloatProp ব্যবহার করুন।

যখন আপনি একটি গতিশীল অভিব্যক্তি ব্যবহার করেন যা ভৌত মাত্রাকে প্রভাবিত করে—রঙ ছাড়া টাইলের যেকোনো মান—তখন আপনাকে অবশ্যই সম্পর্কিত সীমাবদ্ধতার একটি সেটও নির্দিষ্ট করতে হবে, যেমন একটি স্ট্রিং ফর্ম্যাট। এই সীমাবদ্ধতাগুলি সিস্টেম রেন্ডারারকে আপনার টাইলের মধ্যে একটি মান সর্বোচ্চ কত স্থান দখল করতে পারে তা নির্ধারণ করতে দেয়। সাধারণত, আপনি এই সীমাবদ্ধতাগুলি উপাদান স্তরে নির্দিষ্ট করেন, গতিশীল অভিব্যক্তি স্তরে নয়, setLayoutConstraintsForDynamic* দিয়ে শুরু হওয়া একটি পদ্ধতি কল করে।

নিম্নলিখিত কোড স্নিপেটটি দেখায় কিভাবে 3 সংখ্যা ব্যবহার করে হৃদস্পন্দনের আপডেটগুলি প্রদর্শন করতে হয়, যার ফলব্যাক মান -- :

override fun onTileRequest(requestParams: RequestBuilders.TileRequest) =
    Futures.immediateFuture(
        Tile.Builder()
            .setResourcesVersion(RESOURCES_VERSION)
            .setFreshnessIntervalMillis(60 * 60 * 1000) // 60 minutes
            .setTileTimeline(
                Timeline.fromLayoutElement(
                    Text.Builder(
                        this,
                        TypeBuilders.StringProp.Builder("--")
                            .setDynamicValue(
                                PlatformHealthSources.heartRateBpm()
                                    .format()
                                    .concat(DynamicBuilders.DynamicString.constant(" bpm"))
                            )
                            .build(),
                        TypeBuilders.StringLayoutConstraint.Builder("000").build(),
                    )
                        .build()
                )
            )
            .build()
    )

একটি টাইলের মধ্যে অল্প সংখ্যক এক্সপ্রেশন ব্যবহার করুন

Wear OS একটি একক টাইলে কতগুলি এক্সপ্রেশন থাকতে পারে তার উপর একটি সীমা নির্ধারণ করে । যদি একটি টাইলে অনেকগুলি মোট ডাইনামিক এক্সপ্রেশন থাকে, তাহলে ডাইনামিক মানগুলি উপেক্ষা করা হয় এবং সিস্টেমটি আপনার সংশ্লিষ্ট ডাইনামিক প্রোপার্টি টাইপগুলিতে প্রদত্ত স্ট্যাটিক মানগুলিতে ফিরে যায়।

একটি স্টেট অবজেক্টে গতিশীল ডেটা একত্রিত করুন

আপনি ডেটা সোর্স থেকে সর্বশেষ আপডেটগুলিকে একটি অবস্থায় একত্রিত করতে পারেন, যা আপনি মান রেন্ডারিংয়ের জন্য আপনার টাইলে স্থানান্তর করেন।

আপনার টাইলসে স্টেট তথ্য ব্যবহার করতে, এই পদক্ষেপগুলি সম্পূর্ণ করুন:

  1. আপনার টাইলের অবস্থার বিভিন্ন মান উপস্থাপন করে এমন কীগুলির একটি সেট স্থাপন করুন। এই উদাহরণটি জল গ্রহণের জন্য কী এবং একটি qqq নোট তৈরি করে:

    companion object {
        val KEY_WATER_INTAKE = intAppDataKey("key_water_intake")
        val KEY_NOTE = stringAppDataKey("key_note")
    }

  2. onTileRequest() বাস্তবায়নের সময়, setState() কল করুন এবং প্রতিটি কী থেকে একটি নির্দিষ্ট গতিশীল ডেটা মানের প্রাথমিক ম্যাপিং স্থাপন করুন:

    override fun onTileRequest(
        requestParams: RequestBuilders.TileRequest
    ): ListenableFuture<Tile?> {
        // If the tile hasn't had any state set yet, use the default values
        val state =
            if (requestParams.currentState.keyToValueMapping.isNotEmpty())
                requestParams.currentState
            else
                StateBuilders.State.Builder()
                    .setStateMap(
                        dynamicDataMapOf(
                            KEY_WATER_INTAKE mapTo 200,
                            KEY_NOTE mapTo "Good"
                        )
                    )
                    .build()
    
        return Futures.immediateFuture(
            Tile.Builder()
                // Set resources, timeline, and other tile properties.
                .setState(state)
                .build()
        )
    }

  3. যখন আপনি আপনার লেআউট তৈরি করবেন, যেখানে আপনি এই ডেটাটি state থেকে দেখাতে চান, তখন একটি Dynamic* টাইপ অবজেক্ট ব্যবহার করুন। আপনি পূর্ববর্তী মান থেকে বর্তমান মান পর্যন্ত একটি অ্যানিমেশন দেখানোর জন্য animate() কল করতে পারেন:

    val waterIntakeValue =
        DynamicBuilders.DynamicInt32.from(KEY_WATER_INTAKE)

  4. প্রয়োজনে, আপনি নতুন মান দিয়ে অবস্থা আপডেট করতে পারেন। এটি একটি টাইলের LoadAction এর অংশ হতে পারে।

    এই উদাহরণে, জল গ্রহণের মান 400 এ আপডেট করা হয়েছে:

    val loadAction =
        loadAction(
            dynamicDataMapOf(
                KEY_WATER_INTAKE mapTo 400,
                KEY_NOTE mapTo "Outstanding"
            )
        )

{% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %} {% অক্ষরে অক্ষরে %} {% এন্ডভারব্যাটিম %}