Toutiao'nun uyarlama şemasına dayalı bir makale yazdım. Android ekran uyarlaması hiç bu kadar kolay olmamıştı, ancak hala çok sayıda çukur olduğunu fark ettim. Bu çukurlar GitHub ekran uyarlama sorununun özetinde ve çözümünde çok sayıda çukura göre kaydedildi , Sonunda daha mükemmel bir adaptasyon planı buldum. Bu makaleyi bir aydan daha uzun bir süre önce yazmayı planladım. Ancak, yoğun şirket işleri nedeniyle hiç vakit ayıramadım. Çıkışı şimdiye kadar erteledim, öyleyse izin ver Bu yöntemi paylaşalım, önce avantajları üfleyelim.
1. Non-invaziv
Her şeyden önce, popüler bilim altında Android'de bir uzunluk birimi: bir noktayı temsil eden ve ekranın fiziksel boyutu olan pt. Boyutu 1/721 inçtir, yani 72pt 1 inç'e eşittir (aslında, Android'de ve Android'de nispeten nadirdir mm uzunluk birimi). Ve bu adaptasyon için kullandığım ünite pt olacak, bu yüzden daha önce kullandığınız düzen üzerinde herhangi bir etkisi olmayacak.Bu adaptasyon çözümünü eski projede yeni fonksiyonların geliştirilmesine ve hatta yeni projeler için daha da iyi bir şekilde ekleyebilirsiniz. Bu uyarlamayı benimsemekte tereddüt etmeyin ve bu kapatmayı kapattıktan sonra, pt etkisi dp'ye eşdeğerdir.
2. Yüksek esneklik
Belirli bir Görünüm için farklı çözünürlüklere sahip bir cihaz uygulamak istiyorsanız, böylece boyutunun uyarlama boyutu oranında tutarlı olmasını istiyorsanız, bunun için pt birimlerini kullanın. Bu efekti istemiyorsanız, ancak Daha büyük bir cihazın daha fazla içerik göstermesini istiyorsanız dp, sp veya eskisi gibi bir şey yazabilirsiniz.Bu iki noktayı birleştirerek arayüz düzeninde kolaylıkla istediğiniz efekti elde edebilirsiniz.
3. Sistem görünümünün ve üç taraf görünümünün boyutunu etkilemez
Bu aslında invaziv olmayan bir şekilde gösterilmiştir. Başlığın çözümü, DisplayMetrics # yoğunluğunun dp uyarlamasını doğrudan değiştirmek olduğu için, bu, sistem Görünümü boyutunun Dialog, Toast, boyut ve aynısı, üç partili Görünüm gibi orijinalle tutarsız olmasına neden olacaktır. Boyut da orijinal efektle tutarsız olacaktır, bu yüzden pt'yi seçiyorum. Adaptasyonun nedenlerinden biri.
4. Başarısız olmayacak
Bu en övünen noktadır, çünkü başlık uyarlamasından veya AndroidAutoSize'den bağımsız olarak, DisplayMetrics # yoğunluğunun geri yüklendiği durumlar olacaktır ve bunu kendiniz sıfırlamanız gerekir. En bariz olanı, arayüzde bir WebView varsa, başlatıldığında geri yükleneceğidir. DisplayMetrics # yoğunluk değeri, uyarlamanın başarısız olmasına neden olur.Elbette, bunun için çözümler vardır, ancak uyarlamanın başarısız olmasına neden olmak için DisplayMetrics # yoğunluğunun değerini geri yükleyecek başka birçok durum vardır. Benim çözümüm, bu sıkıntılı noktayı çözmek ve DisplayMetrics'teki değerin geri yüklenerek uyarlamanın başarısız olmasına neden olmaktır.
Bu kadarını söyledikten sonra, üst ve alt görüntülere şok olalım.Her çözünürlüğün görüntüleri sırasıyla 1080pt genişlik adaptasyonu, 1920pt yükseklik adaptasyonu ve adaptasyonun kapanma etkisi ile.
480 x 800 mdpi (160dpi)
mdpi
720 x 1280 xhdpi (320dpi)
xhdpi
1080 x 1920-xxhdpi (480dpi)
xxhdpi
1440x2560-560dpi
560 dpi
Görselleştirmelerdeki Web Görünümü'nün, önceki uyarlamayla çözülemeyen bir sorun olan sonraki Görünüme uyum hatası problemine neden olmadığı görülebilir.
AS'deki araçlar > AVD Yöneticisi > Sanal Cihaz Yarat ..., örnek olarak 1080 x 1920px uyarlamasını alıyoruz, spesifik işlemler aşağıdaki gibidir:
1080pt
Cihazı oluşturduktan sonra, pt birim etkisini görmek için ön izleme arayüzünde cihazı seçebiliriz.
Tasarımcının size verdiği tasarım çiziminin boyutu nedir, daha sonra 720 x 1280px gibi istediğiniz boyutta cihazlar oluşturabilir, ardından yukarıdaki resmin boyutunu 720 ve 1280 olarak değiştirebilir ve ardından ekran boyutunu hesaplayabilirsiniz. Eğer 360 x 640dp ise, yukarıdaki resmin boyutunu 360 ve 640 olarak değiştirin ve ardından ekran boyutunu hesaplayın Ünitenin ne olduğuna dikkat etmenize gerek yoktur ve tasarım ikonu dönüştürme olmadan istediğiniz kadar işaretlenebilir. . Uyarlama yaparken, bu boyutun boyut değerini, örneğin, genişlik 720 x 1280 ise, sonra 720'yi iletin.
İlke aslında başlık ilkesine dayanmaktadır, ancak ben pt çalıştırıyorum, dolayısıyla DisplayMetrics # yoğunluğunu değiştirmiyorum, DisplayMetrics # xdpi'yi değiştiriyorum. Uyarlama başarısız olmayacağından, uyarlanmış Aktivitede getResources () işlevini yeniden yazmak gerekir. Görünüm boyutu her değiştiğinde getResources () çağrıldığından, onu doğrudan buraya uyarlarız ve hataya neden olmaz. Oluşturmalara karşılık gelen kodlar aşağıdaki gibidir:
eğlenceli getResources (): Resources { dönüş AdaptScreenUtils.adaptWidth (super.getResources (), 1080) } eğlenceli getResources (): Resources { dönüş AdaptScreenUtils.adaptHeight (super.getResources (), 1920) } eğlenceli getResources (): Resources { dönüş AdaptScreenUtils.closeAdapt (super.getResources ()) }Kaynak kodu, Demo ve API aşağıdaki gibidir:
AdaptScreen ile ilgili > - >
adaptWidth: Genişliği uyarla adaptHeight: yüksekliği uyarla closeAdapt: yakın adaptasyon (pt, dp'ye eşdeğerdir) pt2Px: pt'den piksele px2Pt: px'den pt'yept2Px ve px2Pt, Görünümü dinamik olarak çalıştırması gerekenler için sağlanmıştır.
Yukarıdaki gibi, yalnızca AndroidUtilCode'un en son sürümüne güvenmeniz gerekir:
uygulama'com.blankj: utilcode: 1.22.3 'İlkeyi okuduktan sonra çok basit olduğunu mu düşünüyorsunuz ama bu tür bir çözümü kaç kişi düşünebilir? Ben de bu seviyeyi düşünmek için devlerin omuzlarında duruyorum.Umarım uyarlama şeması makalenin başlığı gibi olabilir Uyarlamamızı sonlandırın. Bu, şimdiye kadar bulduğum en basit ve en etkili uyarlama çözümü. İyi olduğunu düşünüyorsanız, bunu çevrenizdeki Androider'a tavsiye etmeyi unutmayın. Kullanım süreciyle ilgili herhangi bir sorun yaşarsanız, lütfen "Android Ekran Uyarlama Sonlandırıcı" sorun özetiyle senkronize edin. konu.
Son olarak, başka bir içerik ekleyeceğim.AndroidUtilCode projesi bir bileşene dönüştürüldü. İlgileniyorsanız, görüntülemek için kaynak kodunu okuyabilirsiniz. Çok güzel şeyler öğreneceğinize inanıyorum. Bir sonraki makalede sizi bu konuya tanıtacağım. En kısa sürede üretebilirim.
[Ekli] İlgili çerçeve ve bilgiler
Bilgi koleksiyonu
İzle + özel mesajı ücretsiz "Android verileri" yanıtlayın!
Önceki Android gelişmiş mimari materyallerine, kaynak koduna, notlarına ve videolarına erişim sağlayın. Gelişmiş kullanıcı arayüzü, performans optimizasyonu, mimarlık kursu, NDK, hibrit geliştirme (ReactNative + Weex) WeChat uygulaması, Flutter çok yönlü Android gelişmiş uygulama teknolojisi