টাইলস সংস্করণ

Wear OS ডিভাইসগুলিতে, টাইলস দুটি মূল উপাদানের মাধ্যমে রেন্ডার করা হয়, যেগুলোর নিজস্ব ভার্সনিং রয়েছে। আপনার অ্যাপের টাইলসগুলো যাতে সব ডিভাইসে সঠিকভাবে কাজ করে, তা নিশ্চিত করার জন্য এই অন্তর্নিহিত আর্কিটেকচারটি বোঝা জরুরি।

  • জেটপ্যাক টাইল-সম্পর্কিত লাইব্রেরি : এই লাইব্রেরিগুলো (Wear Tiles এবং Wear ProtoLayout সহ) আপনার অ্যাপে এমবেড করা থাকে এবং ডেভেলপার হিসেবে আপনিই এগুলোর ভার্সন নিয়ন্ত্রণ করেন। সিস্টেমের onTileRequest() কলের প্রতিক্রিয়ায় আপনার অ্যাপ এই লাইব্রেরিগুলো ব্যবহার করে একটি TileBuilder.Tile অবজেক্ট (আপনার টাইলের প্রতিনিধিত্বকারী ডেটা স্ট্রাকচার) তৈরি করে।
  • প্রোটোলেআউট রেন্ডারার: ​​এই সিস্টেম কম্পোনেন্টটি ডিসপ্লেতে Tile অবজেক্ট রেন্ডার করা এবং ব্যবহারকারীর ইন্টারঅ্যাকশন পরিচালনার জন্য দায়ী। রেন্ডারারের সংস্করণ অ্যাপ ডেভেলপারের নিয়ন্ত্রণে থাকে না এবং একই হার্ডওয়্যার থাকা সত্ত্বেও বিভিন্ন ডিভাইসে এটি ভিন্ন হতে পারে।

আপনার অ্যাপের Jetpack Tiles লাইব্রেরির সংস্করণ এবং ব্যবহারকারীর ডিভাইসের ProtoLayout Renderer সংস্করণ, উভয়ের উপর ভিত্তি করে একটি টাইলের চেহারা বা আচরণ ভিন্ন হতে পারে। উদাহরণস্বরূপ, একটি ডিভাইস হয়তো ঘূর্ণন বা হৃদস্পন্দনের ডেটা প্রদর্শন সমর্থন করে, কিন্তু অন্যটি করে না।

এই ডকুমেন্টটিতে ব্যাখ্যা করা হয়েছে কীভাবে আপনার অ্যাপকে টাইলস লাইব্রেরি এবং প্রোটোলেআউট রেন্ডারারের বিভিন্ন সংস্করণের সাথে সামঞ্জস্যপূর্ণ করা যায়। এতে জেটপ্যাক লাইব্রেরির উচ্চতর সংস্করণে মাইগ্রেট করার পদ্ধতিও ব্যাখ্যা করা হয়েছে।

সামঞ্জস্য বিবেচনা করুন

এমন একটি টাইল তৈরি করতে যা বিভিন্ন ডিভাইসে সঠিকভাবে কাজ করে, তার জন্য বিভিন্ন ফিচার সাপোর্টের বিষয়টি বিবেচনা করুন। আপনি দুটি প্রধান কৌশলের মাধ্যমে এটি করতে পারেন: রানটাইমে রেন্ডারারের সক্ষমতা শনাক্ত করা এবং বিল্ট-ইন ফলব্যাক প্রদান করা।

রেন্ডারারের ক্ষমতা সনাক্ত করুন

কোনো নির্দিষ্ট ডিভাইসে উপলব্ধ বৈশিষ্ট্যের ওপর ভিত্তি করে আপনি আপনার টাইলের লেআউট গতিশীলভাবে পরিবর্তন করতে পারেন।

রেন্ডারার সংস্করণ সনাক্ত করুন

  • আপনার onTileRequest() মেথডে পাস করা DeviceParameters অবজেক্টের getRendererSchemaVersion() মেথডটি ব্যবহার করুন। এই মেথডটি ডিভাইসে থাকা ProtoLayout Renderer-এর মেজর এবং মাইনর ভার্সন নম্বর রিটার্ন করে।
  • এরপর আপনি আপনার onTileRequest() ইমপ্লিমেন্টেশনে সনাক্তকৃত রেন্ডারার সংস্করণের উপর ভিত্তি করে আপনার টাইলের ডিজাইন বা আচরণ পরিবর্তন করার জন্য শর্তসাপেক্ষ লজিক ব্যবহার করতে পারেন।

@RequiresSchemaVersion অ্যানোটেশন

  • ProtoLayout মেথডগুলিতে থাকা @RequiresSchemaVersion অ্যানোটেশনটি নির্দেশ করে যে, ঐ মেথডটি ডকুমেন্টেশন অনুযায়ী কাজ করার জন্য সর্বনিম্ন কোন রেন্ডারার স্কিমা ভার্সন প্রয়োজন ( উদাহরণ )।
    • ডিভাইসে উপলব্ধ রেন্ডারার সংস্করণের চেয়ে উচ্চতর সংস্করণ প্রয়োজন এমন কোনো মেথড কল করলে আপনার অ্যাপ ক্র্যাশ না করলেও, এর ফলে কন্টেন্ট প্রদর্শিত নাও হতে পারে বা ফিচারটি উপেক্ষা করা হতে পারে।

সংস্করণ সনাক্তকরণের উদাহরণ

val rendererVersion = requestParams.deviceConfiguration.rendererSchemaVersion

val arcElement =
    // DashedArcLine has the annotation @RequiresSchemaVersion(major = 1, minor = 500)
    // and so is supported by renderer versions 1.500 and greater
    if (
        rendererVersion.major > 1 ||
        (rendererVersion.major == 1 && rendererVersion.minor >= 500)
    ) {
        // Use DashedArcLine if the renderer supports it …
        DashedArcLine.Builder()
            .setLength(degrees(270f))
            .setThickness(8f)
            .setLinePattern(
                LayoutElementBuilders.DashedLinePattern.Builder()
                    .setGapSize(8f)
                    .setGapInterval(10f)
                    .build()
            )
            .build()
    } else {
        // … otherwise use ArcLine.
        ArcLine.Builder().setLength(degrees(270f)).setThickness(dp(8f)).build()
    }

বিকল্প ব্যবস্থা প্রদান করুন

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

এর একটি সাধারণ ব্যবহার হলো লটি অ্যানিমেশনের ফলব্যাক হিসেবে একটি স্থির চিত্র প্রদান করা। যদি ডিভাইসটি লটি অ্যানিমেশন সমর্থন না করে, তবে এটি তার পরিবর্তে স্থির চিত্রটি রেন্ডার করবে।

val lottieImage =
    ResourceBuilders.ImageResource.Builder()
        .setAndroidLottieResourceByResId(
            ResourceBuilders.AndroidLottieResourceByResId.Builder(R.raw.lottie)
                .setStartTrigger(createOnVisibleTrigger())
                .build()
        )
        // Fallback if lottie is not supported
        .setAndroidResourceByResId(
            ResourceBuilders.AndroidImageResourceByResId.Builder()
                .setResourceId(R.drawable.lottie_fallback)
                .build()
        )
        .build()

বিভিন্ন রেন্ডারার সংস্করণ দিয়ে পরীক্ষা করুন

বিভিন্ন রেন্ডারার সংস্করণের সাথে আপনার টাইলগুলি পরীক্ষা করার জন্য, সেগুলিকে Wear OS এমুলেটরের বিভিন্ন সংস্করণে স্থাপন করুন। (ভৌত ডিভাইসগুলিতে, ProtoLayout Renderer-এর আপডেটগুলি প্লে স্টোর বা সিস্টেম আপডেটের মাধ্যমে আসে। কোনো নির্দিষ্ট রেন্ডারার সংস্করণ জোর করে ইনস্টল করা সম্ভব নয়।)

অ্যান্ড্রয়েড স্টুডিওর টাইল প্রিভিউ ফিচারটি আপনার কোডের উপর নির্ভরশীল Jetpack ProtoLayout লাইব্রেরিতে এমবেড করা একটি রেন্ডারার ব্যবহার করে, তাই টাইল পরীক্ষা করার সময় বিভিন্ন Jetpack লাইব্রেরি সংস্করণ ব্যবহার করাও একটি উপায় হতে পারে।

Tiles 1.5 / ProtoLayout 1.3 (Material 3 Expressive)-এ স্থানান্তরিত হন

সর্বশেষ উন্নত বৈশিষ্ট্যগুলোর সুবিধা নিতে আপনার Jetpack Tile লাইব্রেরিগুলো আপডেট করুন, যার মধ্যে UI পরিবর্তনও রয়েছে যা আপনার টাইলগুলোকে সিস্টেমের সাথে নির্বিঘ্নে একীভূত করবে।

Jetpack Tiles 1.5 এবং Jetpack ProtoLayout 1.3-এ বেশ কিছু উল্লেখযোগ্য উন্নতি ও পরিবর্তন আনা হয়েছে। এগুলোর মধ্যে রয়েছে:

  • UI বর্ণনা করার জন্য একটি Compose-সদৃশ API।
  • ম্যাটেরিয়াল ৩ এক্সপ্রেসিভ কম্পোনেন্ট, যার মধ্যে রয়েছে বটম-হাগিং এজ বাটন এবং উন্নত ভিজ্যুয়ালের জন্য সাপোর্ট: লটি অ্যানিমেশন, আরও বিভিন্ন ধরনের গ্রেডিয়েন্ট, এবং নতুন আর্ক লাইন স্টাইল। - দ্রষ্টব্য: এই ফিচারগুলোর কয়েকটি নতুন এপিআই-তে মাইগ্রেট না করেও ব্যবহার করা যেতে পারে।

সুপারিশসমূহ

আপনার টাইলস স্থানান্তর করার সময় এই সুপারিশগুলো অনুসরণ করুন:

  • আপনার সমস্ত টাইলস একযোগে মাইগ্রেট করুন। আপনার অ্যাপের মধ্যে বিভিন্ন ভার্সনের টাইলস মেশানো থেকে বিরত থাকুন। যদিও ম্যাটেরিয়াল ৩ কম্পোনেন্টগুলো একটি আলাদা আর্টিফ্যাক্টে ( androidx.wear.protolayout:protolayout-material3 ) থাকে—যার ফলে একই অ্যাপে M2.5 এবং M3 উভয় টাইলস ব্যবহার করা প্রযুক্তিগতভাবে সম্ভব—আমরা এই পদ্ধতির বিরুদ্ধে জোরালোভাবে পরামর্শ দিই, যদি না তা একেবারেই অপরিহার্য হয় (উদাহরণস্বরূপ, যদি আপনার অ্যাপে প্রচুর সংখ্যক টাইলস থাকে যা একসাথে মাইগ্রেট করা সম্ভব নয়)।
  • টাইলস ইউএক্স নির্দেশিকা অনুসরণ করুন। টাইলসের অত্যন্ত সুসংগঠিত এবং টেমপ্লেট-ভিত্তিক প্রকৃতির কারণে, আপনার নিজস্ব ডিজাইনের সূচনা বিন্দু হিসেবে বিদ্যমান নমুনাগুলোর ডিজাইন ব্যবহার করুন।
  • বিভিন্ন স্ক্রিন এবং ফন্ট সাইজে পরীক্ষা করে দেখুন। টাইলগুলিতে প্রায়শই প্রচুর তথ্য থাকে, যার ফলে টেক্সট (বিশেষ করে যখন বাটনে রাখা হয়) ওভারফ্লো এবং ক্লিপিং-এর ঝুঁকিতে থাকে। এটি কমানোর জন্য, আগে থেকে তৈরি কম্পোনেন্টগুলো ব্যবহার করুন এবং অতিরিক্ত কাস্টমাইজেশন এড়িয়ে চলুন। অ্যান্ড্রয়েড স্টুডিও-র টাইল প্রিভিউ ফিচারের পাশাপাশি একাধিক আসল ডিভাইসেও পরীক্ষা করে দেখুন।

অভিবাসন প্রক্রিয়া

আপনার টাইলস স্থানান্তর করতে, এই ধাপগুলো অনুসরণ করুন:

নির্ভরতা আপডেট করুন

প্রথমে, আপনার build.gradle.kts ফাইলটি আপডেট করুন। ভার্সনগুলো আপডেট করুন এবং protolayout-material ডিপেন্ডেন্সিটি protolayout-material3 এ পরিবর্তন করুন, যেমনটি দেখানো হয়েছে:

// In build.gradle.kts

//val tilesVersion = "1.4.1"
//val protoLayoutVersion = "1.2.1"

// Use these versions for M3.
val tilesVersion = "1.5.0"
val protoLayoutVersion = "1.3.0"

 dependencies {
     // Use to implement support for wear tiles
     implementation("androidx.wear.tiles:tiles:$tilesVersion")

     // Use to utilize standard components and layouts in your tiles
     implementation("androidx.wear.protolayout:protolayout:$protoLayoutVersion")

     // Use to utilize components and layouts with Material Design in your tiles
     // implementation("androidx.wear.protolayout:protolayout-material:$protoLayoutVersion")
     implementation("androidx.wear.protolayout:protolayout-material3:$protoLayoutVersion")

     // Use to include dynamic expressions in your tiles
     implementation("androidx.wear.protolayout:protolayout-expression:$protoLayoutVersion")

     // Use to preview wear tiles in your own app
     debugImplementation("androidx.wear.tiles:tiles-renderer:$tilesVersion")

     // Use to fetch tiles from a tile provider in your tests
     testImplementation("androidx.wear.tiles:tiles-testing:$tilesVersion")
 }

টাইলসার্ভিস মূলত অপরিবর্তিত রয়েছে

এই মাইগ্রেশনের প্রধান পরিবর্তনগুলো UI কম্পোনেন্টগুলোকে প্রভাবিত করে। ফলস্বরূপ, আপনার TileService ইমপ্লিমেন্টেশনে, যেকোনো রিসোর্স-লোডিং মেকানিজম সহ, ন্যূনতম বা কোনো পরিবর্তনের প্রয়োজন হবে না।

মূল ব্যতিক্রমটি টাইল অ্যাক্টিভিটি ট্র্যাকিং সম্পর্কিত: যদি আপনার অ্যাপ onTileEnterEvent() বা onTileLeaveEvent() ব্যবহার করে, তাহলে আমরা আপনাকে onRecentInteractionEventsAsync() -এ স্থানান্তরিত হওয়ার পরামর্শ দিই। API 36 থেকে শুরু করে, এই ইভেন্টগুলো ব্যাচ আকারে অনুষ্ঠিত হবে।

আপনার লেআউট-জেনারেট কোড পরিবর্তন করুন

ProtoLayout 1.2 (M2.5)-এ, onTileRequest() মেথডটি একটি TileBuilders.Tile অবজেক্ট রিটার্ন করত। এই অবজেক্টটিতে TimelineBuilders.Timeline সহ বিভিন্ন এলিমেন্ট থাকত, যার মধ্যে আবার টাইলের UI বর্ণনাকারী LayoutElement থাকত।

ProtoLayout 1.3 (M3)-তে, যদিও সামগ্রিক ডেটা কাঠামো এবং কার্যপ্রবাহে কোনো পরিবর্তন আসেনি, LayoutElement টি এখন Compose-অনুপ্রাণিত একটি পদ্ধতি ব্যবহার করে নির্মিত হয়। এর লেআউটটি কিছু নির্দিষ্ট স্লটের উপর ভিত্তি করে তৈরি, যেগুলো হলো (উপর থেকে নিচে) titleSlot (ঐচ্ছিক; সাধারণত মূল শিরোনাম বা হেডারের জন্য), mainSlot (বাধ্যতামূলক; মূল বিষয়বস্তুর জন্য), এবং bottomSlot (ঐচ্ছিক; প্রায়শই এজ বাটনের মতো অ্যাকশন বা সংক্ষিপ্ত লেখার মতো সম্পূরক তথ্যের জন্য)। এই লেআউটটি primaryLayout() ফাংশন দ্বারা নির্মিত হয়।

একটি টাইলের বিন্যাস যেখানে mainSlot, titleSlot, bottomSlot দেখানো হচ্ছে
চিত্র ১ : একটি টালির খাঁজসমূহ।
M2.5 এবং M3 লেআউট ফাংশনগুলির তুলনা

এম২.৫

fun myLayout(
    context: Context,
    deviceConfiguration: DeviceParametersBuilders.DeviceParameters
) =
    PrimaryLayout.Builder(deviceConfiguration)
        .setResponsiveContentInsetEnabled(true)
        .setContent(
            Text.Builder(context, "Hello World!")
                .setTypography(Typography.TYPOGRAPHY_BODY1)
                .build()
        )
        .build()

এম৩

fun myLayout(
    context: Context,
    deviceConfiguration: DeviceParametersBuilders.DeviceParameters,
) =
    materialScope(context, deviceConfiguration) {
        primaryLayout(mainSlot = { text("Hello, World!".layoutString) })
    }

মূল পার্থক্যগুলো তুলে ধরতে:

  1. বিল্ডার বিলোপ । ম্যাটেরিয়াল UI কম্পোনেন্টগুলোর জন্য পূর্ববর্তী বিল্ডার প্যাটার্নটি একটি অধিক ডিক্লারেটিভ, কম্পোজ-অনুপ্রাণিত সিনট্যাক্স দ্বারা প্রতিস্থাপিত হয়েছে। (স্ট্রিং/কালার/মডিফায়ারের মতো নন-UI কম্পোনেন্টগুলোও নতুন কোটলিন র‍্যাপার পাচ্ছে।)
  2. প্রমিত প্রারম্ভিককরণ এবং লেআউট ফাংশন । M3 লেআউটগুলি প্রমিত প্রারম্ভিককরণ এবং কাঠামো ফাংশন materialScope() এবং primaryLayout() এর উপর নির্ভর করে। এই বাধ্যতামূলক ফাংশনগুলি M3 পরিবেশকে ( materialScope ব্যবহার করে থিমিং, কম্পোনেন্ট স্কোপ) প্রারম্ভিককরণ করে এবং প্রাথমিক স্লট-ভিত্তিক লেআউট ( primaryLayout ব্যবহার করে) নির্ধারণ করে। প্রতিটি লেআউটের জন্য উভয়কেই ঠিক একবার কল করতে হবে।

থিমিং

ম্যাটেরিয়াল ৩ থিমিং-এ বেশ কিছু পরিবর্তন এনেছে, যার মধ্যে রয়েছে ডাইনামিক কালার এবং টাইপোগ্রাফি ও শেপ অপশনের একটি বর্ধিত সেট।

রঙ

ম্যাটেরিয়াল ৩ এক্সপ্রেসিভ-এর একটি উল্লেখযোগ্য বৈশিষ্ট্য হলো "ডাইনামিক থিমিং": যে টাইলগুলিতে এই বৈশিষ্ট্যটি সক্রিয় করা হয় (যা ডিফল্টরূপে চালু থাকে), সেগুলি সিস্টেম-প্রদত্ত থিমে প্রদর্শিত হবে (এর প্রাপ্যতা ব্যবহারকারীর ডিভাইস এবং কনফিগারেশনের উপর নির্ভরশীল)।

M3-এর আরেকটি পরিবর্তন হলো কালার টোকেনের সংখ্যা বৃদ্ধি, যা ৪ থেকে বেড়ে ২৯ হয়েছে। নতুন কালার টোকেনগুলো ColorScheme ক্লাসে পাওয়া যাবে।

টাইপোগ্রাফি

M2.5-এর মতোই, M3 মূলত পূর্বনির্ধারিত ফন্ট সাইজ কনস্ট্যান্টের উপর নির্ভর করে—সরাসরি ফন্ট সাইজ নির্দিষ্ট করাকে নিরুৎসাহিত করা হয়। এই কনস্ট্যান্টগুলো Typography ক্লাসে অবস্থিত এবং আরও অভিব্যক্তিপূর্ণ বিকল্পের কিছুটা বর্ধিত পরিসর প্রদান করে।

সম্পূর্ণ বিবরণের জন্য টাইপোগ্রাফি ডকুমেন্টেশন দেখুন।

আকৃতি

বেশিরভাগ M3 কম্পোনেন্ট আকৃতি ও রঙের দিক থেকে ভিন্ন হতে পারে।

mainSlotfull আকারের একটি textButton :

'পূর্ণ' আকৃতির টাইল (বেশি গোলাকার কোণা)
চিত্র ২. : 'পূর্ণ' আকৃতির টাইল

একই টেক্সটবাটন যার আকৃতি small :

'ছোট' আকৃতির টাইল (কম গোলাকার কোণা)
চিত্র ৩. : 'ছোট' আকৃতির টাইল

উপাদান

M3 কম্পোনেন্টগুলো তাদের M2.5 প্রতিরূপের চেয়ে বেশি নমনীয় এবং কনফিগারযোগ্য। M2.5-এ প্রায়শই বিভিন্ন ভিজ্যুয়াল ট্রিটমেন্টের জন্য স্বতন্ত্র কম্পোনেন্টের প্রয়োজন হতো, অন্যদিকে M3 প্রায়শই ভালো ডিফল্টসহ একটি সাধারণ, অত্যন্ত কনফিগারযোগ্য বেস কম্পোনেন্ট ব্যবহার করে।

এই নীতিটি রুট লেআউটের ক্ষেত্রেও প্রযোজ্য। M2.5-এ, এটি হয় একটি PrimaryLayout অথবা একটি EdgeContentLayout ছিল। M3-তে, একটি একক শীর্ষ-স্তরের MaterialScope স্থাপন করার পরে, আপনি primaryLayout() ফাংশনটি কল করেন। এই ফাংশনটি সরাসরি রুট লেআউটটি রিটার্ন করে—কোনো বিল্ডারের প্রয়োজন নেই—এবং titleSlot , mainSlot , ও bottomSlot মতো বিভিন্ন স্লটের জন্য LayoutElements গ্রহণ করে। আপনি এই স্লটগুলিকে কনক্রিট UI কম্পোনেন্ট—যেমন text() , button() , বা card() দ্বারা রিটার্ন করা কম্পোনেন্ট—অথবা LayoutElementBuilders থেকে Row বা Column মতো লেআউট স্ট্রাকচার দিয়ে পূরণ করতে পারেন।

থিম হলো M3-এর আরেকটি গুরুত্বপূর্ণ উন্নয়ন। ডিফল্টরূপে, UI এলিমেন্টগুলো স্বয়ংক্রিয়ভাবে M3 স্টাইলিং স্পেসিফিকেশন মেনে চলে এবং ডাইনামিক থিমিং সমর্থন করে।

এম২.৫ এম৩
ইন্টারেক্টিভ উপাদান
Button বা Chip
পাঠ্য
Text text()
অগ্রগতি সূচক
CircularProgressIndicator circularProgressIndicator() অথবা segmentedCircularProgressIndicator()
লেআউট
PrimaryLayout বা EdgeContentLayout primaryLayout()
buttonGroup()
ছবি
icon() , avatarImage() অথবা backgroundImage()

সংশোধক

M3-তে, Modifiers (যা আপনি কোনো কম্পোনেন্টকে সজ্জিত করতে বা এর কলেবর বাড়াতে ব্যবহার করেন) অনেকটা কম্পোজ-এর মতো। এই পরিবর্তনটি উপযুক্ত অভ্যন্তরীণ টাইপগুলো স্বয়ংক্রিয়ভাবে তৈরি করার মাধ্যমে বয়লারপ্লেট কোড কমাতে পারে। (এই পরিবর্তনটি M3 UI কম্পোনেন্টের ব্যবহারের সাথে সম্পর্কহীন; প্রয়োজনে, আপনি ProtoLayout 1.2-এর বিল্ডার-স্টাইল মডিফায়ারগুলো M3 UI কম্পোনেন্টের সাথে ব্যবহার করতে পারেন এবং এর বিপরীতটিও করতে পারেন।)

এম২.৫

// Uses Builder-style modifier to set opacity
fun myModifier(): ModifiersBuilders.Modifiers =
    ModifiersBuilders.Modifiers.Builder()
        .setOpacity(TypeBuilders.FloatProp.Builder(0.5F).build())
        .build()

এম৩

// Uses Compose-like modifiers to set opacity
fun myModifier(): LayoutModifier = LayoutModifier.opacity(0.5F)

আপনি উভয় API শৈলী ব্যবহার করে মডিফায়ার তৈরি করতে পারেন, এবং এছাড়াও একটি LayoutModifier ModifiersBuilders.Modifier এ রূপান্তর করতে toProtoLayoutModifiers() এক্সটেনশন ফাংশনটি ব্যবহার করতে পারেন।

সহায়ক ফাংশন

যদিও ProtoLayout 1.3 অনেক UI কম্পোনেন্টকে Compose-অনুপ্রাণিত API ব্যবহার করে প্রকাশ করার সুযোগ দেয়, LayoutElementBuilders এর সারি এবং কলামের মতো মৌলিক লেআউট উপাদানগুলো এখনও বিল্ডার প্যাটার্ন ব্যবহার করে। এই শৈলীগত ব্যবধান পূরণ করতে এবং নতুন M3 কম্পোনেন্ট API-গুলোর সাথে সামঞ্জস্য বজায় রাখতে, হেল্পার ফাংশন ব্যবহার করার কথা বিবেচনা করতে পারেন।

সাহায্যকারী ছাড়া

primaryLayout(
    mainSlot = {
        Column.Builder()
            .setWidth(expand())
            .setHeight(expand())
            .addContent(text("A".layoutString))
            .addContent(text("B".layoutString))
            .addContent(text("C".layoutString))
            .build()
    }
)

সাহায্যকারীদের সাথে

// Function literal with receiver helper function
fun column(builder: Column.Builder.() -> Unit) =
    Column.Builder().apply(builder).build()

primaryLayout(
    mainSlot = {
        column {
            setWidth(expand())
            setHeight(expand())
            addContent(text("A".layoutString))
            addContent(text("B".layoutString))
            addContent(text("C".layoutString))
        }
    }
)

Tiles 1.2 / ProtoLayout 1.0-এ স্থানান্তরিত করুন

সংস্করণ ১.২ অনুযায়ী, বেশিরভাগ টাইলস লেআউট এপিআই androidx.wear.protolayout নেমস্পেসের অধীনে রয়েছে। সর্বশেষ এপিআই ব্যবহার করতে, আপনার কোডে নিম্নলিখিত মাইগ্রেশন ধাপগুলো সম্পন্ন করুন।

নির্ভরতা আপডেট করুন

আপনার অ্যাপ মডিউলের বিল্ড ফাইলে নিম্নলিখিত পরিবর্তনগুলি করুন:

গ্রুভি

  // Remove
  implementation 'androidx.wear.tiles:tiles-material:version'

  // Include additional dependencies
  implementation "androidx.wear.protolayout:protolayout:1.4.0"
  implementation "androidx.wear.protolayout:protolayout-material:1.4.0"
  implementation "androidx.wear.protolayout:protolayout-expression:1.4.0"

  // Update
  implementation "androidx.wear.tiles:tiles:1.6.0"

কোটলিন

  // Remove
  implementation("androidx.wear.tiles:tiles-material:version")

  // Include additional dependencies
  implementation("androidx.wear.protolayout:protolayout:1.4.0")
  implementation("androidx.wear.protolayout:protolayout-material:1.4.0")
  implementation("androidx.wear.protolayout:protolayout-expression:1.4.0")

  // Update
  implementation("androidx.wear.tiles:tiles:1.6.0")

নেমস্পেস আপডেট করুন

আপনার অ্যাপের কোটলিন- এবং জাভা-ভিত্তিক কোড ফাইলগুলিতে নিম্নলিখিত আপডেটগুলি করুন: বিকল্পভাবে, আপনি এই নেমস্পেস রিনেইমিং স্ক্রিপ্টটি এক্সিকিউট করতে পারেন।

  1. androidx.wear.tiles.material.* এর সমস্ত ইম্পোর্টকে androidx.wear.protolayout.material.* দিয়ে প্রতিস্থাপন করুন। androidx.wear.tiles.material.layouts লাইব্রেরির জন্যও এই ধাপটি সম্পন্ন করুন।
  2. অন্যান্য বেশিরভাগ androidx.wear.tiles.* ইম্পোর্টকে androidx.wear.protolayout.* দিয়ে প্রতিস্থাপন করুন।

    androidx.wear.tiles.EventBuilders , androidx.wear.tiles.RequestBuilders , androidx.wear.tiles.TileBuilders , এবং androidx.wear.tiles.TileService এর জন্য ইমপোর্টগুলো অপরিবর্তিত থাকা উচিত।

  3. TileService এবং TileBuilder ক্লাস থেকে কয়েকটি অপ্রচলিত পদ্ধতির নাম পরিবর্তন করুন:

    1. TileBuilders : getTimeline() কে getTileTimeline() , এবং setTimeline() কে setTileTimeline()
    2. TileService : onResourcesRequest() থেকে onTileResourcesRequest()
    3. RequestBuilders.TileRequest : getDeviceParameters() কে getDeviceConfiguration() তে , setDeviceParameters() কে setDeviceConfiguration() তে , getState() কে getCurrentState() তে , এবং setState() কে setCurrentState() তে পরিবর্তন করা হয়েছে।