Widget'ınızı geliştirin

Bu sayfada, kullanıma sunulan isteğe bağlı widget geliştirmeleriyle ilgili ayrıntılar yer almaktadır. . Bu özellikler isteğe bağlıdır ancak kullanıcılarınızın widget deneyimini iyileştirmek ve uygulamak için kolayca kullanılabilir.

Dinamik renkler kullanın

Android 12'den itibaren widget'lar, düğmeler, arka planlar ve diğer bileşenler için cihaz teması renklerini kullanabilir. Bu şekilde daha akıcı ve tutarlılık sağlar.

Dinamik renkleri iki şekilde elde edebilirsiniz:

Tema, kök düzeninde ayarlandıktan sonra dinamik renkleri almak için kökteki veya alt öğelerinden herhangi birindeki ortak renk özelliklerini kullanabilirsiniz.

Kullanabileceğiniz renk özelliklerine örnek olarak şunlar verilebilir:

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

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

<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
    ...
    app:tint="?attr/colorPrimaryContainer"
    android:src="@drawable/ic_partly_cloudy" />

    <!-- Other widget content. -->

</LinearLayout>
Açık mod temasında widget
Şekil 1. Açık temadaki widget.
Koyu mod temasındaki widget&#39;lar
Şekil 2. Widget koyu temada.

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 isterseniz varsayılan tema oluşturun özel renklerinizle ve varsayılan değeri kullanan yeni bir niteleyici (values-v31) ile özellikleri hakkında daha fazla bilgi edinin.

Aşağıda, Material 3 temasının kullanıldığı bir örneği görebilirsiniz:

/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

<resources>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:background="?android:attr/colorBackground"
    android:theme="@style/MyWidgetTheme" />
</resources>

Ses desteğini etkinleştir

Uygulama İşlemleri, Google Asistan'ın Alakalı kullanıcının sesli komutlarına yanıt olarak widget'ları görüntüleme. yerleşik amaçlara (BII'ler) yanıt verecek şekilde Uygulama, widget'ları Android ve Google Earth gibi Asistan yüzeylerinde proaktif olarak Android Auto. Kullanıcılar, Asistan tarafından gösterilen widget'ları başlatıcılarına sabitleyebilir. Bu sayede, kullanıcıların Asistan ile etkileşime geçmesi teşvik edilir.

Örneğin, egzersiz uygulamanız için antrenman özeti widget'ını yapılandırabilirsiniz. işlevini tetikleyen kullanıcının sesli komutlarını yerine getirmek için GET_EXERCISE_OBSERVATION BBI. Asistan, kullanıcılar bu BII'yi şu şekilde tetiklediğinde widget'ınızı proaktif olarak görüntüler: "Ok Google, bu hafta şehirde kaç kilometre koşmuşum Örnek uygulama?"

Çeşitli kullanıcı etkileşimi kategorilerini kapsayan düzinelerce BBI vardır. ses widget'larını geliştirmeleri için neredeyse tüm Android uygulamaları. Başlangıç olarak Uygulama İşlemleri'ni Android widget'larıyla entegre etme başlıklı makaleyi inceleyin.

Uygulamanızın widget seçici deneyimini iyileştirme

Android 12, cihazınızda widget seçici deneyimini iyileştirmenize olanak tanır. uygulamanıza dinamik widget önizlemeleri ve widget açıklamaları ekleyin.

Widget seçiciye ölçeklenebilir widget önizlemeleri ekleme

Android 12'den itibaren widget seçicide gösterilen widget önizlemesi ölçeklenebilir. Bu dosyayı widget'ın varsayılan boyuttur. Daha önce widget önizlemesi statik bir çizilebilir kaynaktı. Bu da bazı durumlarda, widget'ların ana ekrana eklendiğinde nasıl göründüğünü yanlış yansıtan önizlemelere yol açıyordu.

Ölçeklenebilir widget önizlemelerini uygulamak için previewLayout özelliğini kullanarak XML düzeni sağlayın:appwidget-provider

<appwidget-provider
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>

Gerçek widget'la aynı düzeni, gerçekçi varsayılan düzeniyle kullanmanızı öneririz test etmek anlamına gelir. Çoğu uygulama aynı previewLayout ve initialLayout cihazını kullanır. Doğru önizleme düzenleri oluşturma hakkında bilgi edinmek için bu sayfanın aşağıdaki bölümüne bakın.

Kullanıcının cihazı previewLayout'yi desteklemiyorsa uygulamanızın previewImage'yi kullanabilmesi için hem previewLayout hem de previewImage özelliklerini belirtmenizi öneririz. previewLayout özelliği, previewImage özelliğine göre önceliklidir.

Doğru önizlemeler oluşturmak için önerilen yaklaşımlar

Ölçeklenebilir widget önizlemelerini uygulamak için XML düzeni sağlamak üzere appwidget-provider öğesinin previewLayout özelliğini kullanın:

<appwidget-provider
    ...
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
Widget önizlemesini gösteren bir resim
Şekil 3. Varsayılan olarak 3x3 alanda görünen ancak XML düzeni nedeniyle 3x1 alana sığabilen bir widget önizlemesi.

Doğru bir önizleme göstermek için widget'ın kendisini doğrudan sağlayabilirsiniz düzeni varsayılan değerlere ayarlayın:

  • TextView öğeleri için android:text="@string/my_widget_item_fake_1" ayarlama

  • ImageView bileşenleri için varsayılan veya yer tutucu resim ya da simge (ör. android:src="@drawable/my_widget_icon") ayarlama

Varsayılan değerler olmadan önizlemede yanlış veya boş değerler gösterilebilir. Bu yaklaşımın önemli bir avantajı, yerelleştirilmiş önizleme içeriği sağlayabilmenizdir.

ListView, GridView veya StackView içeren daha karmaşık önizlemeler için önerilen yaklaşımlar hakkında ayrıntılı bilgi edinmek üzere Dinamik öğeler içeren doğru önizlemeler oluşturma başlıklı makaleyi inceleyin.

Ölçeklenebilir widget önizlemeleriyle geriye dönük uyumluluk

Android 11 (API düzeyi 30) veya önceki sürümlerdeki widget seçicilerinin widget'ınızın önizlemelerini göstermesine izin vermek için previewImage özelliğini belirtin.

Widget'ın görünümünü değiştirirseniz önizleme resmini güncelleyin.

Widget'ınız için açıklama ekleme

Android 12'den itibaren widget için bir açıklama sağlayın widget'ınız için görüntülenecek seçici bulunur.

Bir widget&#39;ı ve açıklamasını gösteren widget seçiciyi gösteren resim
Şekil 4. Bir widget gösteren örnek widget seçici ve açıklaması.

&lt;appwidget-provider&gt; öğesinin description özelliğini kullanarak widget'ınız için bir açıklama girin:

<appwidget-provider
    android:description="@string/my_widget_description">
</appwidget-provider>

descriptionRes özelliğini Android'in önceki sürümlerinde kullanabilirsiniz ancak widget seçici bu özelliği yoksayar.

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

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

Bu gelişmiş 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
    android:id="@android:id/background">
</LinearLayout>

Uygulamanız, Android'in önceki sürümlerinde @android:id/background'ü sorunsuz bir şekilde kullanabilir ancak bu işlev yoksayılır.

RemoteView'ların çalışma zamanında istenen değişikliği kullan

Android 12'den itibaren pek çok avantajdan yararlanabilirsiniz. RemoteViews çalışma zamanında değişiklik yapılmasını sağlayan RemoteViews yöntem özellikleri hakkında daha fazla bilgi edinin. 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.

Kotlin

// 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_DP)

Java

// 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_DP);