Widget'ınızı geliştirin

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose tarzı API'leri kullanarak widget oluşturmayı öğrenin.

Bu sayfada, Android 12 (API düzeyi 31) ve sonraki sürümlerde kullanılabilen isteğe bağlı widget geliştirmeleriyle ilgili ayrıntılar yer alır. Bu özellikler isteğe bağlıdır ancak uygulanması kolaydır ve kullanıcılarınızın widget deneyimini iyileştirir.

Widget'ınızı geliştirmenin diğer yolları için Widget'ınızı geliştirme başlıklı Compose kılavuzuna bakın.

Dinamik renkleri kullanma

Android 12'den itibaren widget'lar düğmeler, arka planlar ve diğer bileşenler için cihaz teması renklerini kullanabilir. Bu sayede farklı widget'lar arasında daha sorunsuz geçişler ve tutarlılık sağlanır.

Dinamik renkleri iki şekilde elde edebilirsiniz:

Tema, kök düzende ayarlandıktan sonra dinamik renkleri seçmek için kökte veya alt öğelerinden herhangi birinde ortak renk özelliklerini kullanabilirsiniz.

Kullanabileceğiniz renk özelliklerine dair bazı örnekler aşağıda verilmiştir:

  • ?attr/primary
  • ?attr/primaryContainer
  • ?attr/onPrimary
  • ?attr/onPrimaryContainer

Material 3 temasının kullanıldığı aşağıdaki örnekte cihazın tema rengi "morumsu"dur. Vurgu rengi ve widget arka planı, Şekil 1 ve 2'de gösterildiği gibi açık ve koyu modlara uyum sağlar.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/colorPrimaryContainer"
    android:theme="@style/Theme.Material3.DynamicColors.DayNight">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:tint="?attr/colorPrimaryContainer"
        android:src="@drawable/ic_cloud" />

    <!-- Other widget content. -->

</LinearLayout>

Açık mod temalı widget
Şekil 1. Açık temadaki widget.
Koyu mod temalı widget'lar
Şekil 2. Koyu temadaki widget.

Dinamik renkler için geriye dönük uyumluluk

Dinamik renkler yalnızca Android 12 veya sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir. Daha eski sürümler için özel bir tema sağlamak istiyorsanız özel renklerinizle varsayılan bir tema ve varsayılan tema özelliklerini kullanarak yeni bir niteleyici (values-v31) oluşturun.

Material 3 temasını kullanan bir örnek:

/values/styles.xml

<resources>
  <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight">
    <!-- Override default colorBackground attribute with custom color. -->
    <item name="android:colorBackground">@color/my_background_color</item>

    <!-- Add other colors/attributes. -->

  </style>
</resources>

/values-v31/styles.xml

<resources>
  <!-- Do not override any color attribute. -->
  <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" />
</resources>

/layout/my_widget_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="?android:attr/colorBackground"
    android:theme="@style/MyWidgetTheme" />

Ses desteğini etkinleştirme

Uygulama İşlemleri, Google Asistan'ın alakalı kullanıcı sesli komutlarına yanıt olarak widget'lar göstermesini sağlar. Widget'ınızı yerleşik amaçlara (BII'ler) yanıt verecek şekilde yapılandırarak uygulamanızın Android ve Android Auto gibi Asistan platformlarında proaktif olarak widget göstermesini sağlayabilirsiniz. Kullanıcılar, Asistan tarafından gösterilen widget'ları başlatıcılarına sabitleyerek gelecekteki etkileşimi teşvik edebilir.

Örneğin, egzersiz uygulamanızın antrenman özeti widget'ını, GET_EXERCISE_OBSERVATION yerleşik intent'ini tetikleyen kullanıcı sesli komutlarını yerine getirecek şekilde yapılandırabilirsiniz. Kullanıcılar, "Ok Google, bu hafta ExampleApp'te kaç kilometre koştum?" gibi isteklerde bulunarak bu BII'yi tetiklediğinde Asistan, widget'ınızı proaktif olarak gösterir.

Kullanıcı etkileşiminin çeşitli kategorilerini kapsayan onlarca BII vardır. Bunlar, neredeyse tüm Android uygulamalarının widget'larını ses için geliştirmesine olanak tanır. Başlamak için Uygulama İşlemleri'ni Android widget'larıyla entegre etme başlıklı makaleyi inceleyin.

Daha akıcı geçişler sağlayın

Android 12'den itibaren başlatıcılar, kullanıcı uygulamanızı bir widget'tan başlattığında daha sorunsuz bir geçiş sağlar.

Bu iyileştirilmiş geçişi etkinleştirmek için arka plan öğenizi tanımlamak üzere @android:id/background veya android.R.id.background kullanın:

<!-- Top-level layout of the widget. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/background"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
</LinearLayout>

Uygulamanız, Android'in önceki sürümlerinde @android:id/background özelliğini sorunsuz bir şekilde kullanabilir ancak bu özellik yok sayılır.

RemoteViews'un çalışma zamanı değişikliğini kullanma

Android 12'den itibaren, RemoteViews özelliklerinin çalışma zamanında değiştirilmesini sağlayan çeşitli RemoteViews yöntemlerinden yararlanabilirsiniz. Eklenen yöntemlerin tam listesi için RemoteViews API referansına bakın.

Aşağıdaki kod örneğinde, bu yöntemlerden bazılarının nasıl kullanılacağı gösterilmektedir.

// Set the colors of a progress bar at runtime.
remoteView.setColorStateList(
    R.id.progress, "setProgressTintList", createProgressColorStateList()
)

// Specify exact sizes for margins.
remoteView.setViewLayoutMargin(
    R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DIP
)