Bu sayfada widget boyutlandırması ve daha fazla esneklik için yapılan ayrıntılandırmalar açıklanmaktadır. kullanıma sunuldu. Ayrıca bu riskleri Widget'ınız için bir boyut belirleyin.
Widget boyutları ve düzenleri için iyileştirilmiş API'ler kullanın
Android 12 (API düzeyi 31) sürümünden itibaren, daha hassas bir boyut sunabilirsiniz. özelliklerini ve esnek düzenleri gösteren aşağıdaki adımları izleyin: şu bölümler yer alır:
Android'in önceki sürümlerinde, bir sanal makinenin boyut aralıklarını
widget'ı kullanarak
OPTION_APPWIDGET_MIN_WIDTH
OPTION_APPWIDGET_MIN_HEIGHT
,
OPTION_APPWIDGET_MAX_WIDTH
,
ve OPTION_APPWIDGET_MAX_HEIGHT
ve widget'ın boyutunu tahmin ediyor. Ancak bu mantık,
durumlardan birine sahip olmaları halinde başlatabilirler. Android 12 veya sonraki bir sürümü hedefleyen widget'lar için
duyarlı veya tam
düzenler.
Ek widget boyutu kısıtlamaları belirleme
Android 12, widget'ınızın sorunsuz bir şekilde çalışmasını sağlayan API'ler sunar. değişiklik gösteren ekran boyutlarına sahip farklı cihazlarda daha güvenilir şekilde boyutlandırılabilir.
Mevcut minWidth
'e ek olarak
minHeight
,
minResizeWidth
,
ve minResizeHeight
özellikleri için aşağıdaki yeni appwidget-provider
özelliklerini kullanın:
targetCellWidth
vetargetCellHeight
: widget'ın hedef boyutunu başlatıcı ızgara hücreleri açısından tanımlamalıdır. Eğer bu özelliklerminWidth
veyaminHeight
yerine kullanılır.maxResizeWidth
vemaxResizeHeight
: başlatıcının, kullanıcının widget'ı yeniden boyutlandırmasına izin verdiği maksimum boyutu tanımlayın.
Aşağıdaki XML'de, boyutlandırma özelliklerinin nasıl kullanılacağı gösterilmektedir.
<appwidget-provider
...
android:targetCellWidth="3"
android:targetCellHeight="2"
android:maxResizeWidth="250dp"
android:maxResizeHeight="110dp">
</appwidget-provider>
Duyarlı düzenler sağlama
Düzenin widget'ın boyutuna bağlı olarak değişmesi gerekiyorsa her biri farklı boyutlar için geçerli olan küçük bir düzen grubu oluşturmak. Bu mümkün değildir, bir diğer seçenek de tam widget'a göre düzenler sağlamaktır. boyutunu bu sayfada açıklandığı gibi değiştirebilirsiniz.
Bu özellik daha yumuşak ölçeklendirme ve genel olarak daha iyi sistem sağlar Çünkü sistemin her aramada uygulamayı uyandırması gerekmez widget farklı bir boyutta görüntülenir.
Aşağıdaki kod örneğinde, bir düzen listesinin nasıl sağlanacağı gösterilmektedir.
Kotlin
override fun onUpdate(...) { val smallView = ... val tallView = ... val wideView = ... val viewMapping: Map<SizeF, RemoteViews> = mapOf( SizeF(150f, 100f) to smallView, SizeF(150f, 200f) to tallView, SizeF(215f, 100f) to wideView ) val remoteViews = RemoteViews(viewMapping) appWidgetManager.updateAppWidget(id, remoteViews) }
Java
@Override public void onUpdate(...) { RemoteViews smallView = ...; RemoteViews tallView = ...; RemoteViews wideView = ...; Map<SizeF, RemoteViews> viewMapping = new ArrayMap<>(); viewMapping.put(new SizeF(150f, 100f), smallView); viewMapping.put(new SizeF(150f, 200f), tallView); viewMapping.put(new SizeF(215f, 100f), wideView); RemoteViews remoteViews = new RemoteViews(viewMapping); appWidgetManager.updateAppWidget(id, remoteViews); }
Widget'ın aşağıdaki özelliklere sahip olduğunu varsayalım:
<appwidget-provider
android:minResizeWidth="160dp"
android:minResizeHeight="110dp"
android:maxResizeWidth="250dp"
android:maxResizeHeight="200dp">
</appwidget-provider>
Önceki kod snippet'i şu anlama gelir:
smallView
, 160 dp (minResizeWidth
) × 110 dp boyutundan itibaren destekler (minResizeHeight
) ila 160 dp × 199 dp (sonraki son sipariş noktası - 1 dp).tallView
, 160 dp × 200 dp ile 214 dp arası değerleri destekler (sonraki son sipariş noktası - 1) × 200dp.wideView
, 215 dp × 110 dp (minResizeHeight
) ila 250 dp biçimini destekler (maxResizeWidth
) × 200dp (maxResizeHeight
).
Widget'ınız şu boyut aralığını desteklemelidir: minResizeWidth
×
minResizeHeight
- maxResizeWidth
× maxResizeHeight
. Bu aralıkta
düzenler arasında geçiş yapmak için kesim noktasına karar verebilirsiniz.
![Duyarlı düzen örneği](https://developer.android.com/static/images/appwidgets/size-range.gif?hl=tr)
Tam düzenler sağlayın
Küçük bir duyarlı düzen grubu uygun değilse bunun yerine widget'ın gösterildiği boyutlara göre uyarlanmış farklı düzenler. Bu telefonlar için genellikle iki boyut (dikey ve yatay mod) ve katlanabilir cihazlar.
Bu çözümü uygulamak için uygulamanızın aşağıdaki adımları gerçekleştirmesi gerekir:
Aşırı yük
AppWidgetProvider.onAppWidgetOptionsChanged()
, Bu boyut, boyut kümesi değiştiğinde çağrılır.AppWidgetManager.getAppWidgetOptions()
numaralı telefonu arayın, Bu değer, boyutları içeren birBundle
döndürür.AppWidgetManager.OPTION_APPWIDGET_SIZES
anahtarınaBundle
içinden erişin.
Aşağıdaki kod örneğinde, tam düzenlerin nasıl sağlanacağı gösterilmektedir.
Kotlin
override fun onAppWidgetOptionsChanged( context: Context, appWidgetManager: AppWidgetManager, id: Int, newOptions: Bundle? ) { super.onAppWidgetOptionsChanged(context, appWidgetManager, id, newOptions) // Get the new sizes. val sizes = newOptions?.getParcelableArrayList<SizeF>( AppWidgetManager.OPTION_APPWIDGET_SIZES ) // Check that the list of sizes is provided by the launcher. if (sizes.isNullOrEmpty()) { return } // Map the sizes to the RemoteViews that you want. val remoteViews = RemoteViews(sizes.associateWith(::createRemoteViews)) appWidgetManager.updateAppWidget(id, remoteViews) } // Create the RemoteViews for the given size. private fun createRemoteViews(size: SizeF): RemoteViews { }
Java
@Override public void onAppWidgetOptionsChanged( Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); // Get the new sizes. ArrayList<SizeF> sizes = newOptions.getParcelableArrayList(AppWidgetManager.OPTION_APPWIDGET_SIZES); // Check that the list of sizes is provided by the launcher. if (sizes == null || sizes.isEmpty()) { return; } // Map the sizes to the RemoteViews that you want. Map<SizeF, RemoteViews> viewMapping = new ArrayMap<>(); for (SizeF size : sizes) { viewMapping.put(size, createRemoteViews(size)); } RemoteViews remoteViews = new RemoteViews(viewMapping); appWidgetManager.updateAppWidget(id, remoteViews); } // Create the RemoteViews for the given size. private RemoteViews createRemoteViews(SizeF size) { }
Widget'ınız için boyut belirleme
Her widget, cihazlar için bir targetCellWidth
ve targetCellHeight
tanımlamalıdır
Android 12 veya sonraki sürümleri çalıştıran ya da minWidth
ve minHeight
kullanan herkes için
Android sürümleri (Android'in kullandığı minimum alan miktarını gösterir)
varsayılan olarak. Ancak kullanıcılar ana ekranlarına bir widget eklediklerinde,
belirttiğiniz minimum genişlik ve yükseklikten daha fazla yer kaplar.
Android ana ekranları kullanıcılara, kullanabilecekleri bir dizi kullanılabilir alan sunar.
yer widget'larını ve simgelerini kullanabilirsiniz. Bu tablo cihaza göre değişebilir. örneğin birçok
Cep telefonları 5x4, tabletler ise daha büyük bir ızgara sunabilir. Widget'ınız
eklenir, minimum sayıda hücreyi kaplayacak şekilde uzatılır;
kısıtlarını karşılamak için gereklidir.
Çalışan cihazlarda targetCellWidth
ve targetCellHeight
Android 12 veya sonraki sürümler ya da minWidth
ve minHeight
kısıtlamaları
Android 11 (API düzeyi 30) veya önceki sürümleri çalıştıran cihazlar.
Hücrenin hem genişliği hem yüksekliği hem de uygulanan otomatik kenar boşluklarının boyutu cihazlar arasında farklılık gösterebilir. Kabaca tahmin yapmak için aşağıdaki tabloyu kullanın tipik bir 5x4 ızgara el cihazında widget'ınızın minimum boyutlarını istediğiniz dolu dolu ızgara hücresi sayısı:
Hücre sayısı (genişlik x yükseklik) | Dikey modda kullanılabilir boyut (dp) | Yatay modda kullanılabilir boyut (dp) |
---|---|---|
1x1 | 57x102dp | 127x51dp |
2x1 | 130x102dp | 269x51dp |
3x1 | 203x102dp | 412x51dp |
4x1 | 276x102dp | 554x51dp |
5x1 | 349x102dp | 697x51dp |
5x2 | 349x220dp | 697x117dp |
5x3 | 349x337dp | 697x184dp |
5x4 | 349x455dp | 697x250dp |
... | ... | ... |
n x m | (73n - 16) x (118m - 16) | (142 dk - 15) x (66 m - 15) |
Sağladığınız değerleri belirtmek için dikey mod hücre boyutlarını kullanın
minWidth
, minResizeWidth
ve maxResizeWidth
özellikleri. Aynı şekilde,
sağladığınız değerleri belirtmek için yatay mod hücre boyutlarını kullanın
minHeight
, minResizeHeight
ve maxResizeHeight
özellikleri için.
Bunun nedeni, dikey modda hücre genişliğinin genellikle daha küçük olmasıdır. bir ayar vardır. Benzer şekilde, hücre yüksekliği genellikle yatay modda dikey moda göre daha küçüktür.
Örneğin, widget'ınızın genişliğinin aşağıda bir hücreye kadar yeniden boyutlandırılmasını
Google Pixel 4 kullanıyorsanız minResizeWidth
cihazınızı en fazla 56 dp'ye ayarlamanız gerekir
minResizeWidth
özelliğinin değerinin daha küçük olduğundan emin olun.
bir hücredir. Çünkü dikey yönde bir hücre en az 57 dp genişliğindedir.
Benzer bir şekilde, widget yüksekliğinizin
aynı cihazda dinleyebilmeniz için minResizeHeight
cihazınızı en fazla 50 dp'ye ayarlamanız gerekir.
minResizeHeight
özelliğinin değeri şundan küçüktür:
51 dp: Yatay modda bir hücre en az 51 dp yüksekliğinde olduğundan.
Her widget, 2022'den itibaren şu boyutlarda yeniden boyutlandırılabilir.
minResizeWidth
/minResizeHeight
ve maxResizeWidth
/maxResizeHeight
özellikleridir. Bu nedenle, aralarında herhangi bir boyut aralığına uyum sağlaması gerekir.
Örneğin, yerleşimde widget'ın varsayılan boyutunu ayarlamak için şu özellikleri ayarlayın:
<appwidget-provider
android:targetCellWidth="3"
android:targetCellHeight="2"
android:minWidth="180dp"
android:minHeight="110dp">
</appwidget-provider>
Bu, widget'ın varsayılan boyutunun
targetCellWidth
ve targetCellHeight
özellikleri veya 180×110 dp,
çalışan cihazlar için minWidth
ve minHeight
tarafından belirtildi
Android 11 veya önceki sürümler. İkinci durumda, hücrelerdeki boyut
cihaza göre değişir.
Ayrıca, widget'ınızın desteklenen boyut aralıklarını ayarlamak için aşağıdakileri ayarlayabilirsiniz: özellikler:
<appwidget-provider
android:minResizeWidth="180dp"
android:minResizeHeight="110dp"
android:maxResizeWidth="530dp"
android:maxResizeHeight="450dp">
</appwidget-provider>
Önceki özelliklerde belirtildiği gibi, widget'ın genişliği 180 dp'den 530 dp'ye ve yüksekliği 110 dp'den 450 dp'ye yeniden boyutlandırılabilir. Daha sonra widget, aşağıdaki koşullar geçerli olduğu sürece 3x2 boyutundan 5x2 hücrelere yeniden boyutlandırılabilir. koşulların mevcut olması durumunda:
- Cihazda 5x4 ekran görüntüsü var.
- Hücre sayısı ile kullanılabilir boyut (dps cinsinden) arasındaki eşleme minimum tahminini gösteren tabloya göre boyut hakkında daha fazla bilgi edinin.
- Widget bu boyut aralığına uyum sağlar.
Kotlin
val smallView = RemoteViews(context.packageName, R.layout.widget_weather_forecast_small) val mediumView = RemoteViews(context.packageName, R.layout.widget_weather_forecast_medium) val largeView = RemoteViews(context.packageName, R.layout.widget_weather_forecast_large) val viewMapping: Map<SizeF, RemoteViews> = mapOf( SizeF(180f, 110f) to smallView, SizeF(270f, 110f) to mediumView, SizeF(270f, 280f) to largeView ) appWidgetManager.updateAppWidget(appWidgetId, RemoteViews(viewMapping))
Java
RemoteViews smallView = new RemoteViews(context.getPackageName(), R.layout.widget_weather_forecast_small); RemoteViews mediumView = new RemoteViews(context.getPackageName(), R.layout.widget_weather_forecast_medium); RemoteViews largeView = new RemoteViews(context.getPackageName(), R.layout.widget_weather_forecast_large); Map<SizeF, RemoteViews> viewMapping = new ArrayMap<>(); viewMapping.put(new SizeF(180f, 110f), smallView); viewMapping.put(new SizeF(270f, 110f), mediumView); viewMapping.put(new SizeF(270f, 280f), largeView); RemoteViews remoteViews = new RemoteViews(viewMapping); appWidgetManager.updateAppWidget(id, remoteViews);
Widget'ın önceki bölümde tanımlanan duyarlı düzenleri kullandığını varsayın
kullanabilirsiniz. Bu, düzenin
R.layout.widget_weather_forecast_small
, 180 dp (minResizeWidth
) x değerinden itibaren kullanılır
110 dp (minResizeHeight
) ila 269x279 dp (sonraki son sipariş noktaları - 1). Aynı şekilde,
R.layout.widget_weather_forecast_medium
, 270x110 dp ile 270x279 dp arasında kullanılır,
R.layout.widget_weather_forecast_large
, 270x280 dp ile
530dp (maxResizeWidth
) x 450dp (maxResizeHeight
).
Kullanıcı widget'ı yeniden boyutlandırdığında, görünümü değişen her boyuta uyum sağlayacak şekilde hücrelerinin özelliklerini içerir.
![En küçük 3x2 ızgara boyutunda örnek hava durumu widget'ı. Kullanıcı arayüzü,
yer adı (Tokyo), sıcaklık (14°) ve
hava kısmen bulutlu.](https://developer.android.com/static/images/appwidgets/weather-size-3x2.png?hl=tr)
R.layout.widget_weather_forecast_small
.![4x2 "orta" boyutta hava durumu widget'ı seçin. Widget'ı yeniden boyutlandırma
Bu şekilde önceki widget boyutundaki kullanıcı arayüzünün tamamını oluşturabilirsiniz.
ve 'Çoğunlukla bulutlu' etiketini ekler sıcaklıkla ilgili bir tahmin
16:00 - 19:00 arası.](https://developer.android.com/static/images/appwidgets/weather-size-4x2.png?hl=tr)
R.layout.widget_weather_forecast_medium
.![5x2 "orta" boyutta hava durumu widget'ı seçin. Widget'ı yeniden boyutlandırma
bu şekilde, önceki boyutla aynı kullanıcı arayüzü döndürülür ancak
bir hücre uzunluğunda uzatılarak daha fazla yatay alan kaplar.](https://developer.android.com/static/images/appwidgets/weather-size-5x2.png?hl=tr)
R.layout.widget_weather_forecast_medium
.![5x3 "büyük" boyutta örnek hava durumu widget'ı seçin. Widget'ı yeniden boyutlandırma
Bu şekilde önceki widget boyutlarındaki tüm kullanıcı arayüzünü temel alır.
ve widget'ın içine havanın tahminini içeren bir görünüm ekler.
günlerini kutluyoruz. Güneşli veya yağmurlu havayı gösteren semboller
günlük en yüksek ve en düşük sıcaklıkları görebilirsiniz.](https://developer.android.com/static/images/appwidgets/weather-size-5x3.png?hl=tr)
R.layout.widget_weather_forecast_large
.![5x4 "büyük" boyutta örnek hava durumu widget'ı seçin. Widget'ı yeniden boyutlandırma
Bu şekilde önceki widget boyutlarındaki tüm kullanıcı arayüzünü temel alır.
ve Perşembe ve Cuma günlerini (ve bu sürelere karşılık gelen
havanın türünü ve en yüksek ve en düşük sıcaklığı gösteren
) ekleyebilirsiniz.](https://developer.android.com/static/images/appwidgets/weather-size-5x4.png?hl=tr)
R.layout.widget_weather_forecast_large
.