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 basit bir şekilde uygulanması ve kullanıcılarınızın widget'ı deneyimini yaşayın.

Dinamik renkler kullan

Android 12 sürümünden itibaren widget'larda cihazın tema renkleri kullanılabilir arka planlara ve diğer bileşenlere ihtiyacınız var. Bu şekilde daha akıcı ve tutarlılık sağlar.

Dinamik renkler elde etmenin iki yolu vardır:

Tema kök düzenine ayarlandıktan sonra renklerini almak için kökten veya altlarından herhangi birine eklenmiş olmalıdır.

Kullanabileceğiniz renk özelliklerine bazı örnekler:

  • ?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ı açık ve koyu renklere uyarlanır değiştirebilirsiniz.

<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ındaki widget
Şekil 1. Açık temadaki widget.
ziyaret edin.
'nı inceleyin.
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 yüklü cihazlarda kullanılabilir veya daha yüksek olabilir. 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 kullanarak yeni bir niteleyici (values-v31) ile özellikleri hakkında daha fazla bilgi edinin.

Aşağıda, Material 3 temasının kullanıldığı bir örnek verilmiştir:

/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ılara sabitleme seçeneği sunulur. widget'lar Asistan tarafından başlatıcıyı kullanabilir, gelecekte etkileşimi teşvik edebilirsiniz.

Ö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ştirin

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 ekleyin

Android 12'den itibaren widget önizlemesi widget seçici ölçeklenebilir. Bu dosyayı widget'ın varsayılan boyut. Önceden widget önizlemesi, URL'de sabit bir çekilebilir kaynaktı. bazı durumlarda önizlemelerin widget'ların nasıl göründüğünü yanlış şekilde yansıtmasına ana ekrana eklenirler.

Ö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. Örneğin, nasıl oluşturabileceğinize ilişkin daha fazla bilgi edinmek için, bu kılavuzda sayfasını ziyaret edin.

Hem previewLayout hem de previewImage özelliğinin belirtilmesini öneririz. Böylece uygulamanız, kullanıcının cihazı durumunda previewImage kullanmaya düşebilir previewLayout desteklenmiyor. previewLayout özelliği önceliklidir ve previewImage özelliğine karşılık geliyor.

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

Ölçeklenebilir widget önizlemelerini uygulamak içinpreviewLayout XML düzeni sağlamak için appwidget-provider öğesi:

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

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

  • TextView için android:text="@string/my_widget_item_fake_1" ayarlanıyor öğeler.

  • Bir varsayılan resim veya yer tutucu resim ya da simge ayarlamak. Örneğin: ImageView bileşen için android:src="@drawable/my_widget_icon".

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

ListView içeren daha karmaşık önizlemelere yönelik önerilen yaklaşımlar için GridView veya StackView, Dinamik içeren doğru önizlemeler oluşturma konusuna bakın öğeleri inceleyin.

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

Android 11 (API düzeyi 30) veya önceki sürümlerde widget seçicilerin widget'ını kullanıyorsanız previewImage özelliğini gönderin.

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

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

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ı.

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

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

URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için descriptionRes özelliğini kullanın, ancak bu özellik widget tarafından yoksayılıyor kullanabilirsiniz.

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

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

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

// Top-level layout of the widget.
<LinearLayout
    android:id="@android:id/background">
</LinearLayout>

Uygulamanız, Android'in önceki sürümlerinde @android:id/background uygulamasını kullanabilir ancak yok sayı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. RemoteViews API'yi inceleyin referans yöntemlerinin tam listesi için de kullanabilirsiniz.

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