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:
Tetapi dalam 7in WSVGA terlihat seperti ini:
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"/>
android
screen-size
text-size
porselen
sumber
sumber
Jawaban:
@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:
untuk Contoh Anda telah menggunakan di bawah dimens.xml dalam nilai.
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
sumber
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
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.
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
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.
sumber
Terkadang, lebih baik hanya memiliki tiga opsi
Gunakan kecil dan besar untuk membedakan dari ukuran layar normal.
Untuk normal, Anda tidak perlu menentukan apa pun.
Dengan menggunakan ini, Anda dapat menghindari pengujian dan menentukan dimensi untuk ukuran layar yang berbeda.
sumber
Saya melakukan hal yang sama dengan dimensi dan melukis sesuatu seperti (dengan dp tetapi hanya untuk teks dan di drawText ())
XML:
Kode:
sumber
dp
untuk ukuran teks ... gunakansp
sebagai gantinya.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
sumber
Jika Anda memiliki API 26, Anda dapat mempertimbangkan untuk menggunakan autoSizeTextType :
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
sumber
Saya pikir Anda dapat mengarsipkannya dengan menambahkan beberapa sumber daya tata letak untuk setiap ukuran layar, contoh:
Referensi: 1. http://developer.android.com/guide/practices/screens_support.html
sumber
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.
sumber
Anda juga dapat menggunakan
weightSum
danlayout_weight
properti untuk menyesuaikan layar Anda yang berbeda.Untuk itu, Anda harus membuat
android:layout_width
= 0dp, danandroid:layout_width
= (apapun yang Anda inginkan);sumber
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.
sumber
Jangan hardcode ukuran.
Untuk fleksibilitas dan resolusi layar baru - praktik terbaiknya adalah menempatkan TextView tiruan ke dalam tata letak untuk mendapatkan textSize:
Dan di kode Anda misalnya:
Simpan
textSize
sebagai referensi di mana Anda dapat menambahkan konstanta atau ukuran persentase (dengan menghitung).sumber