Android ekran uyarlama sonlandırıcı

arka fon

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.

avantaj

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.

etki

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.

Bir önizleme nasıl oluşturulur?

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 ve kullanım

İ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'ye

pt2Px 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 '

Son sözler

İ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

Altı film ve televizyon şirketi birlikte konuşabilir ve mantıksız ücretleri azaltabilir mi?
önceki
Model oyun kontrolü: 08ms ekibi, as pilotu yola çıkmaya hazır
Sonraki
Mozaik yapay zeka tarafından görüldüğünde mahremiyetimiz nerede saklanacak?
Model oyun kontrolü: GK dışı saf el değişimi Niu Gundam
Wang Kai'nin son hayran kızının her yönüyle süper bir kadın olduğu ortaya çıktı, Wang Ziwen, dikkatli olmalısın.
Dr. MIT, kendi kendine giden bir ekspres araba olan Robby'yi yapıyor, "son mili" çözebilir mi?
SAIC Volkswagen'in yeni Tiguan L'si özel olarak "En Güzel Çin" olarak adlandırıldı, ikinci sezon mükemmel bir şekilde sona eriyor
Model oyun kontrolü: RGM-79, modifiye edilmiş eski modeldir, metal doku ile doludur
Pişirme kabını al, mermileri engellemek için de kullanabilir misin?
Jing Tian Andy Lau Luhan Wang Junkai, Matt Damon'un yanına nasıl koyuyor? En zor film afişi çıktı
Entegre e-ticaret platformları birbiri ardına "çimen dikti", Xiaohongshu hala mal getirebilir mi?
Model oyun kontrolü: spor araba renk eşleştirme 1/35 sözde kaplama kaplama Xinanzhou büstü
Mart ayına kıyasla, Nisan hayranları yılın ilk yarısında en büyük film izleme karnavalını başlatacak.
Sahte bir Converse mi satın aldım? Kanvas ayakkabıların yaratıcısı logoyu değiştirdi
To Top