Ukuran teks dan ukuran layar android yang berbeda

121

Saya tahu, ini sudah dibahas 1000 kali, tetapi saya tidak dapat menyesuaikan ukuran teks untuk ukuran layar yang berbeda. Saya mencoba menggunakan 'sp' sebagai unit ukuran dalam gaya kustom saya:

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    ...
    <item name="android:textSize">30sp</item>
    ...
</style>

Pada 2,7 QVGA sepertinya OK:

2.7QVGA 30sp

Tetapi dalam 7in WSVGA terlihat seperti ini:

7 dalam WSVGA 30sp

Saya sudah mencoba menggunakan 'sp' dan 'dp' dengan hasil yang sama.

Bisakah Anda menjelaskan cara membuat tombol-tombol ini terlihat sama di layar mana pun?

Gaya tombol kustom lengkap

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">30sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">2</item>
</style>

Dan dalam tema aplikasi saya, saya punya

<item name="android:buttonStyle">@style/CustumButtonStyle</item>

Dan ada tata letak saya:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">

<Button
    android:id="@+id/buttonContinue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/buttonNewGame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonContinue"
    android:layout_alignRight="@+id/buttonContinue"
    android:layout_below="@+id/buttonContinue"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/ButtonAbout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonNewGame"
    android:layout_alignRight="@+id/buttonNewGame"
    android:layout_below="@+id/buttonNewGame"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>

porselen
sumber
Di layar Anda, mereka terlihat sama. Pastikan skala pemirsa Anda 100%
Dmitry Zaytsev
Anda dapat menemukan jawabannya dari sini stackoverflow.com/questions/16706076/…
Bhavesh Jethani

Jawaban:

160

@forcelain Saya rasa Anda perlu memeriksa Pdf Google IO untuk Desain ini . Dalam pdf itu, buka Halaman No: 77 di mana Anda akan menemukan bagaimana di sana menyarankan untuk menggunakan dimens.xml untuk perangkat android yang berbeda untuk Contoh lihat Struktur di bawah ini:

res/values/dimens.xml

res/values-small/dimens.xml

res/values-normal/dimens.xml

res/values-large/dimens.xml

res/values-xlarge/dimens.xml

untuk Contoh Anda telah menggunakan di bawah dimens.xml dalam nilai.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">18sp</dimen>
</resources>

Di folder nilai lain Anda perlu mengubah nilai untuk ukuran teks Anda.

Catatan: Seperti yang ditunjukkan oleh @espinchi, small, normal, large, dan xlarge sudah tidak digunakan lagi sejak Android 3.2 karena mendukung yang berikut:

Mendeklarasikan Tata Letak Tablet untuk Android 3.2

Untuk tablet generasi pertama yang menjalankan Android 3.0, cara yang tepat untuk mendeklarasikan tata letak tablet adalah dengan meletakkannya di direktori dengan kualifikasi konfigurasi xlarge (misalnya, res / layout-xlarge /). Untuk mengakomodasi jenis tablet dan ukuran layar lainnya — khususnya, tablet 7 inci — Android 3.2 memperkenalkan cara baru untuk menentukan sumber daya untuk ukuran layar yang lebih terpisah. Teknik baru ini didasarkan pada jumlah ruang yang dibutuhkan tata letak Anda (seperti 600dp lebar), daripada mencoba membuat tata letak Anda sesuai dengan kelompok ukuran umum (seperti large atau xlarge).

Alasan rumitnya mendesain tablet 7 "saat menggunakan kelompok ukuran umum adalah karena tablet 7" secara teknis berada dalam kelompok yang sama dengan handset 5 "(kelompok besar). Meskipun kedua perangkat ini tampak saling berdekatan dalam ukuran , jumlah ruang untuk UI aplikasi berbeda secara signifikan, seperti gaya interaksi pengguna. Jadi, layar 7 "dan 5" tidak boleh selalu menggunakan tata letak yang sama. Agar Anda dapat menyediakan tata letak yang berbeda untuk ini dua jenis layar, Android sekarang memungkinkan Anda untuk menentukan sumber daya tata letak berdasarkan lebar dan / atau tinggi yang sebenarnya tersedia untuk tata letak aplikasi Anda, yang ditentukan dalam unit dp.

Misalnya, setelah Anda mendesain tata letak yang ingin Anda gunakan untuk perangkat bergaya tablet, Anda mungkin menentukan bahwa tata letak berhenti berfungsi dengan baik saat lebar layar kurang dari 600dp. Ambang batas ini dengan demikian menjadi ukuran minimum yang Anda perlukan untuk tata letak tablet Anda. Dengan demikian, Anda sekarang dapat menentukan bahwa sumber daya tata letak ini harus digunakan hanya jika ada setidaknya 600dp lebar yang tersedia untuk UI aplikasi Anda.

Anda harus memilih lebar dan mendesainnya sebagai ukuran minimum, atau menguji lebar terkecil yang didukung tata letak Anda setelah selesai.

Catatan: Ingat bahwa semua angka yang digunakan dengan API ukuran baru ini adalah nilai piksel (dp) yang tidak bergantung kepadatan dan dimensi tata letak Anda juga harus selalu ditentukan menggunakan unit dp, karena yang Anda pedulikan adalah jumlah ruang layar yang tersedia setelah sistem memperhitungkan kepadatan layar (sebagai lawan menggunakan resolusi piksel mentah). Untuk informasi lebih lanjut tentang piksel kepadatan-independen, baca Istilah dan konsep, sebelumnya dalam dokumen ini. Menggunakan kualifikasi ukuran baru

Konfigurasi sumber daya berbeda yang dapat Anda tentukan berdasarkan ruang yang tersedia untuk tata letak Anda dirangkum dalam tabel 2. Qualifier baru ini menawarkan Anda lebih banyak kontrol atas ukuran layar tertentu yang didukung aplikasi Anda, dibandingkan dengan kelompok ukuran layar tradisional (kecil, normal, besar, dan xlarge).

Catatan: Ukuran yang Anda tentukan menggunakan qualifier ini bukanlah ukuran layar sebenarnya. Sebaliknya, ukuran adalah untuk lebar atau tinggi dalam satuan dp yang tersedia untuk jendela aktivitas Anda. Sistem Android mungkin menggunakan beberapa layar untuk UI sistem (seperti bilah sistem di bagian bawah layar atau bilah status di bagian atas), sehingga beberapa layar mungkin tidak tersedia untuk tata letak Anda. Jadi, ukuran yang Anda deklarasikan harus secara khusus tentang ukuran yang dibutuhkan oleh aktivitas Anda — sistem memperhitungkan ruang apa pun yang digunakan oleh UI sistem saat mendeklarasikan berapa banyak ruang yang disediakan untuk tata letak Anda. Juga berhati-hatilah bahwa Bilah Tindakan dianggap sebagai bagian dari ruang jendela aplikasi Anda, meskipun tata letak Anda tidak mendeklarasikannya, sehingga mengurangi ruang yang tersedia untuk tata letak Anda dan Anda harus memperhitungkannya dalam desain Anda.

Tabel 2. Qualifier konfigurasi baru untuk ukuran layar (diperkenalkan di Android 3.2). Konfigurasi layar Nilai-nilai Qualifier Deskripsi terkecilWidth swdp

Contoh: sw600dp sw720dp

Ukuran dasar layar, seperti yang ditunjukkan oleh dimensi terpendek dari area layar yang tersedia. Secara khusus, SmallWidth perangkat adalah yang terpendek dari tinggi dan lebar layar yang tersedia (Anda mungkin juga menganggapnya sebagai "lebar terkecil" untuk layar). Anda dapat menggunakan qualifier ini untuk memastikan bahwa, terlepas dari orientasi layar saat ini, aplikasi Anda memiliki setidaknya dps lebar yang tersedia untuk UI-nya.

Misalnya, jika tata letak Anda mengharuskan dimensi terkecil dari area layar setidaknya 600 dp setiap saat, Anda dapat menggunakan qualifier ini untuk membuat sumber daya tata letak, res / layout-sw600dp /. Sistem akan menggunakan sumber daya ini hanya jika dimensi terkecil dari layar yang tersedia setidaknya 600dp, terlepas dari apakah sisi 600dp adalah tinggi atau lebar yang dianggap pengguna. SmallWidth adalah karakteristik ukuran layar tetap dari perangkat; SmallWidth perangkat tidak berubah saat orientasi layar berubah.

The SmallWidth perangkat memperhitungkan dekorasi layar dan UI sistem. Misalnya, jika perangkat memiliki beberapa elemen UI persisten pada layar yang memperhitungkan ruang di sepanjang sumbu terkecilWidth, sistem akan mendeklarasikan terkecilWidth menjadi lebih kecil dari ukuran layar sebenarnya, karena piksel layar tersebut tidak tersedia untuk UI Anda.

Ini adalah alternatif dari qualifier ukuran layar umum (kecil, normal, besar, xlarge) yang memungkinkan Anda menentukan angka terpisah untuk ukuran efektif yang tersedia untuk UI Anda. Penggunaan terkecilWidth untuk menentukan ukuran layar umum berguna karena lebar sering kali menjadi faktor pendorong dalam mendesain tata letak. Sebuah UI akan sering di-scroll secara vertikal, tetapi memiliki batasan yang cukup kuat pada ruang minimum yang dibutuhkannya secara horizontal. Lebar yang tersedia juga merupakan faktor kunci dalam menentukan apakah akan menggunakan tata letak satu panel untuk handset atau tata letak multi-panel untuk tablet. Jadi, Anda mungkin paling peduli tentang lebar terkecil yang mungkin pada setiap perangkat. Lebar layar yang tersedia wdp

Contoh: w720dp w1024dp

Menentukan lebar minimum yang tersedia dalam unit dp tempat sumber daya harus digunakan — ditentukan oleh nilai. Nilai sistem yang sesuai untuk lebar berubah saat orientasi layar beralih antara lanskap dan potret untuk mencerminkan lebar aktual saat ini yang tersedia untuk UI Anda.

Ini sering kali berguna untuk menentukan apakah akan menggunakan tata letak multi-panel, karena bahkan pada perangkat tablet, Anda sering kali tidak menginginkan tata letak multi-panel yang sama untuk orientasi potret seperti yang Anda lakukan untuk lanskap. Dengan demikian, Anda dapat menggunakan ini untuk menentukan lebar minimum yang diperlukan untuk tata letak, daripada menggunakan ukuran layar dan qualifier orientasi secara bersamaan. Tersedia tinggi layar hdp

Contoh: h720dp h1024dp dll.

Menentukan tinggi layar minimum dalam unit dp tempat sumber daya harus digunakan — ditentukan oleh nilai. Nilai sistem yang sesuai untuk ketinggian berubah saat orientasi layar beralih antara lanskap dan potret untuk mencerminkan tinggi aktual saat ini yang tersedia untuk UI Anda.

Menggunakan ini untuk menentukan tinggi yang dibutuhkan oleh tata letak Anda berguna dengan cara yang sama seperti wdp untuk menentukan lebar yang dibutuhkan, alih-alih menggunakan ukuran layar dan kualifikasi orientasi. Namun, sebagian besar aplikasi tidak memerlukan qualifier ini, mengingat UI sering di-scroll secara vertikal sehingga lebih fleksibel dengan banyaknya ketinggian yang tersedia, sedangkan lebarnya lebih kaku.

Meskipun menggunakan qualifier ini mungkin tampak lebih rumit daripada menggunakan grup ukuran layar, sebenarnya ini akan lebih sederhana setelah Anda menentukan persyaratan untuk UI Anda. Saat Anda mendesain UI, hal utama yang mungkin Anda pedulikan adalah ukuran sebenarnya di mana aplikasi Anda beralih antara UI gaya handset dan UI gaya tablet yang menggunakan banyak panel. Titik pasti dari sakelar ini akan bergantung pada desain khusus Anda — mungkin Anda memerlukan lebar 720dp untuk tata letak tablet, mungkin 600dp cukup, atau 480dp, atau beberapa di antaranya. Dengan menggunakan qualifier ini dalam tabel 2, Anda mengontrol ukuran persis perubahan tata letak Anda.

Untuk pembahasan lebih lanjut tentang qualifier konfigurasi ukuran ini, lihat dokumen Menyediakan Sumber Daya. Contoh konfigurasi

Untuk membantu Anda menargetkan beberapa desain untuk berbagai jenis perangkat, berikut beberapa angka untuk lebar layar yang umum:

320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).
480dp: a tweener tablet like the Streak (480x800 mdpi).
600dp: a 7 tablet (600x1024 mdpi).
720dp: a 10 tablet (720x1280 mdpi, 800x1280 mdpi, etc).

Menggunakan kualifikasi ukuran dari tabel 2, aplikasi Anda dapat beralih di antara sumber daya tata letak yang berbeda untuk handset dan tablet menggunakan nomor yang Anda inginkan untuk lebar dan / atau tinggi. Misalnya, jika 600dp adalah lebar terkecil yang tersedia yang didukung oleh tata letak tablet Anda, Anda dapat menyediakan dua set tata letak berikut:

res / layout / main_activity.xml # Untuk handset res / layout-sw600dp / main_activity.xml # Untuk tablet

Dalam kasus ini, lebar terkecil dari ruang layar yang tersedia harus 600dp agar tata letak tablet dapat diterapkan.

Untuk kasus lain di mana Anda ingin menyesuaikan UI lebih lanjut untuk membedakan ukuran seperti tablet 7 "dan 10", Anda dapat menentukan tata letak lebar terkecil tambahan:

res / layout / main_activity.xml # Untuk handset (lebih kecil dari lebar tersedia 600dp) res / layout-sw600dp / main_activity.xml # Untuk tablet 7 inci (lebar 600dp dan lebih besar) res / layout-sw720dp / main_activity.xml

Untuk tablet 10 inci (lebar 720dp dan lebih besar)

Perhatikan bahwa dua kumpulan sumber daya contoh sebelumnya menggunakan qualifier "lebar terkecil", swdp, yang menentukan sisi terkecil dari kedua sisi layar, terlepas dari orientasi perangkat saat ini. Jadi, menggunakan swdp adalah cara sederhana untuk menentukan ukuran layar keseluruhan yang tersedia untuk tata letak Anda dengan mengabaikan orientasi layar.

Namun, dalam beberapa kasus, yang mungkin penting untuk tata letak Anda adalah seberapa banyak lebar atau tinggi yang tersedia saat ini. Misalnya, jika Anda memiliki tata letak dua panel dengan dua fragmen berdampingan, Anda mungkin ingin menggunakannya setiap kali layar menyediakan lebar setidaknya 600dp, baik perangkat dalam orientasi lanskap atau potret. Dalam kasus ini, sumber daya Anda mungkin terlihat seperti ini:

res / layout / main_activity.xml # Untuk handset (lebih kecil dari lebar tersedia 600dp) res / layout-w600dp / main_activity.xml # Multi-pane (layar apa pun dengan lebar tersedia 600dp atau lebih)

Perhatikan bahwa set kedua menggunakan qualifier "lebar yang tersedia", wdp. Dengan cara ini, satu perangkat mungkin benar-benar menggunakan kedua tata letak, tergantung pada orientasi layar (jika lebar yang tersedia setidaknya 600dp dalam satu orientasi dan kurang dari 600dp di orientasi lain).

Jika ketinggian yang tersedia menjadi perhatian Anda, Anda dapat melakukan hal yang sama menggunakan qualifier hdp. Atau, bahkan gabungkan kualifikasi wdp dan hdp jika Anda perlu benar-benar spesifik.

Herry
sumber
7
Kecil / normal / besar / xlarge ini tidak digunakan lagi saat ini (Des 2014). Cara yang disukai sekarang adalah menggunakan "swxxxdp". Lihat developer.android.com/guide/practices/…
espinchi
1
@espinchi terima kasih, Anda harus memposting ini juga sebagai jawaban. Apakah ada juga dp yang direkomendasikan? misalnya standar adalah: 100sw, 200sw, 400sw, 600sw.
Vince V.
19

Saya pikir sudah terlambat untuk membalas utas ini. Tetapi saya ingin membagikan ide atau cara saya untuk menyelesaikan masalah ukuran teks melalui perangkat resolusi perbedaan. Banyak situs pengembang android menyarankan bahwa kita harus menggunakan unit sp untuk ukuran teks yang akan menangani ukuran teks untuk perangkat resolusi perbedaan. Tetapi saya selalu tidak bisa mendapatkan hasil yang diinginkan. Jadi saya telah menemukan satu solusi yang saya gunakan dari 4-5 proyek terakhir saya dan berfungsi dengan baik. Sesuai saran saya, Anda harus menempatkan ukuran teks untuk setiap perangkat resolusi, yang merupakan pekerjaan yang agak membosankan, tetapi itu akan memenuhi kebutuhan Anda. Setiap developer harus mendengarkan rasio seperti 4: 6: 8: 12 (h: xh: xxh: xxxh) . Sekarang di dalam folder res proyek Anda, Anda harus membuat 4 folder dengan file dimens misalnya

  1. res / nilai-hdpi / dimens.xml
  2. res / nilai-xhdpi / dimens.xml
  3. res / nilai-xxhdpi / dimens.xml
  4. res / nilai-xxxhdpi / dimens.xml

Sekarang di dalam file dimens.xml Anda harus menempatkan ukuran teks. Saya menunjukkan kepada Anda kode untuk values-hdpi , demikian pula Anda harus menempatkan kode untuk file nilai resolusi / dimens.xml lainnya.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <dimen name="text_size">4px</dimen>
</resources>

Untuk resolusi lain seperti xhdpi : 6px, xxhdpi : 8px, xxxhdpi : 12px. Ini dihitung dengan rasio (3: 4: 6: 8: 12) yang saya tulis di atas. Mari kita bahas contoh ukuran teks lainnya dengan rasio di atas. Jika Anda ingin mengambil ukuran teks 12px dalam hdpi, maka dalam resolusi lain akan menjadi

  1. hdpi: 12px
  2. xhdpi: 18px
  3. xxhdpi: 24px
  4. xxxhdpi: 36px

Ini adalah solusi sederhana untuk mengimplementasikan ukuran teks yang diperlukan untuk semua resolusi. Saya tidak mempertimbangkan perangkat resolusi nilai-mdpi di sini. Jika ada yang ingin memasukkan ukuran teks untuk resolusi ini maka rasionya seperti 3: 4: 6: 8: 12 . Jika ada pertanyaan, harap beri tahu saya. Semoga ini akan membantu Anda.

Rahul Sharma
sumber
4
Bukankah praktik yang buruk untuk menggunakan px daripada sp dalam ukuran teks? Apakah ada cara untuk mencapai rasio berikut dengan menggunakan sp daripada px?
Red M
Saya memeriksa ini berfungsi dengan baik, tetapi saya masih bingung apakah itu praktik yang baik untuk menggunakan nilai dalam px daripada dp / sp? Saya belum pernah melihat di suatu tempat dari dokumentasi resmi untuk menggunakan nilai dalam px.
shaby
1
gunakan sp untuk ukuran font, itulah hukumnya. Pendekatan yang ditunjukkan Rahul sudah benar, cukup gunakan sp, bukan px.
Mihir Patel
sp harus digunakan jika berencana untuk menautkan ukuran font aplikasi dengan ukuran font sistem. Jika tidak, solusi ini tidak buruk.
Irfan Ul Haq
12

Terkadang, lebih baik hanya memiliki tiga opsi

 style="@android:style/TextAppearance.Small"

Gunakan kecil dan besar untuk membedakan dari ukuran layar normal.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            style="@android:style/TextAppearance.Small"/>

Untuk normal, Anda tidak perlu menentukan apa pun.

<TextView
            android:id="@+id/TextViewTopBarTitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

Dengan menggunakan ini, Anda dapat menghindari pengujian dan menentukan dimensi untuk ukuran layar yang berbeda.

kalan nawarathne
sumber
10

Saya melakukan hal yang sama dengan dimensi dan melukis sesuatu seperti (dengan dp tetapi hanya untuk teks dan di drawText ())

XML:

   <dimen name="text_size">30sp</dimen>

Kode:

   Paint p =new Paint();
       p.setTextSize(getResources().getDimension(R.dimen.text_Size));
Gaya hidup
sumber
8
Anda TIDAK harus menggunakan dpuntuk ukuran teks ... gunakan spsebagai gantinya.
Yousha Aleayoub
silakan gunakan sp untuk ukuran teks
Thinsky
Anda dapat menggunakan dp dalam situasi tertentu ketika Anda tidak ingin ukurannya diubah berdasarkan preferensi pengguna.
7

Setiap orang dapat menggunakan pustaka android yang disebutkan di bawah ini yang merupakan cara termudah untuk membuat ukuran teks kompatibel dengan hampir semua layar perangkat. Ini sebenarnya dikembangkan atas dasar kualifikasi konfigurasi android baru untuk ukuran layar (diperkenalkan di Android 3.2) SmallestWidth swdp.

https://github.com/intuit/sdp

Muhammad Maqsood
sumber
2
sdp untuk ukuran layar; gunakan ssp untuk ukuran teks
ecle
Ini berfungsi untuk saya, tetapi saya curiga ada terlalu banyak file untuk ditambahkan, ini akan meningkatkan ukuran aplikasi, @Muhammad Anda dapat mengubah ukuran dan hanya menambahkan kelas apa pun yang dibutuhkan
Kirtikumar A.
1

Jika Anda memiliki API 26, Anda dapat mempertimbangkan untuk menggunakan autoSizeTextType :

<Button
  app:autoSizeTextType="uniform" />

Pengaturan default memungkinkan ukuran otomatis skala TextView seragam pada sumbu horizontal dan vertikal.

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview

Bonne Bogaert
sumber
Masalah dengan ini adalah bahwa itu tidak secara seragam mengubah ukuran teks untuk beberapa tampilan teks dengan String dengan panjang berbeda
Sourabh S Nath
0

Saya pikir Anda dapat mengarsipkannya dengan menambahkan beberapa sumber daya tata letak untuk setiap ukuran layar, contoh:

res/layout/my_layout.xml             // layout for normal screen size ("default")
res/layout-small/my_layout.xml       // layout for small screen size with small text
res/layout-large/my_layout.xml       // layout for large screen size with larger text
res/layout-xlarge/my_layout.xml      // layout for extra large screen size with even larger text
res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

Referensi: 1. http://developer.android.com/guide/practices/screens_support.html

NguyenDat
sumber
2
Gunakan res / values-small mungkin lebih baik.
einverne
1
salah satu implementasi yang lebih buruk. kami harus mempertahankan 5 tata letak hanya untuk mendukung ukuran yang berbeda?
SolidSnake
Membuat tata letak yang berbeda hanya dengan mengurangi ukuran teks di layar varian adalah ide yang sangat buruk. Saya tidak merekomendasikan itu
Saman Salehi
0

Untuk menyatukan semua layar agar menampilkan ukuran elemen yang sama termasuk ukuran font: - Rancang UI pada satu ukuran layar dengan ukuran apa pun yang Anda anggap sesuai selama desain, yaitu ukuran font TextView adalah 14 dp pada ukuran layar default dengan 4'6 inci.

  • Hitung secara terprogram ukuran layar fisik ponsel lain yaitu 5'2 inci dari ponsel / layar lain.

  • Gunakan rumus untuk menghitung perbedaan persentase antara 2 layar. yaitu apa perbedaan% antara 4'6 dan 5'2.

  • Hitung selisih piksel antara 2 TextView berdasarkan rumus di atas.

  • Dapatkan ukuran sebenarnya (dalam piksel) dari ukuran font TextView dan terapkan perbedaan piksel (Anda menghitung sebelumnya) ke ukuran font default.

Dengan cara ini Anda dapat menerapkan rasio aspek dinamis ke semua ukuran layar dan hasilnya bagus. Anda akan memiliki tata letak dan ukuran yang identik di setiap layar.

Ini bisa sedikit rumit pada awalnya tetapi benar-benar mencapai tujuan setelah Anda mengetahui rumusnya. Dengan metode ini Anda tidak perlu membuat banyak tata letak hanya untuk menyesuaikan dengan ukuran layar yang berbeda.

SolidSnake
sumber
0

Anda juga dapat menggunakan weightSumdan layout_weightproperti untuk menyesuaikan layar Anda yang berbeda.

Untuk itu, Anda harus membuat android:layout_width= 0dp, dan android:layout_width= (apapun yang Anda inginkan);

Harshit
sumber
-1

Seperti yang disebutkan @espinchi dari grup ukuran 3.2 (API level 13) tidak digunakan lagi. Rentang ukuran layar adalah pendekatan yang disukai di masa mendatang.

Jacques Kammeyer
sumber
-2

Jangan hardcode ukuran.

Untuk fleksibilitas dan resolusi layar baru - praktik terbaiknya adalah menempatkan TextView tiruan ke dalam tata letak untuk mendapatkan textSize:

<TextView
        android:id="@+id/dummyTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="TextView" />

Dan di kode Anda misalnya:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView);
float textSize = testTextView.getTextSize();

Simpan textSizesebagai referensi di mana Anda dapat menambahkan konstanta atau ukuran persentase (dengan menghitung).

Athlan
sumber