Apakah ada cara mudah untuk menambahkan padding di antara kotak centang di kontrol kotak centang, dan teks yang terkait?
Saya tidak bisa hanya menambahkan spasi, karena label saya multi-baris.
Seperti apa adanya, teks terlalu dekat dengan kotak centang:
TextView
dengandrawableLeft
dan gunakandrawablePadding
untuk memberi ruang pada teks. Dalam kode hanya beralih kondisi yang dipilih dan tidak dipilih.Jawaban:
Saya benci menjawab pertanyaan saya sendiri, tetapi dalam hal ini saya pikir saya perlu. Setelah memeriksanya, @ Falmarri berada di jalur yang benar dengan jawabannya. Masalahnya adalah bahwa kontrol kotak centang Android sudah menggunakan properti android: paddingLeft untuk mendapatkan teks di mana itu.
Garis merah menunjukkan nilai offset paddingLeft dari seluruh kotak centang
Jika saya hanya mengganti bantalan itu di tata letak XML saya, itu mengacaukan tata letak. Inilah yang dilakukan pengaturan paddingLeft = "0":
Ternyata Anda tidak dapat memperbaikinya dalam XML. Anda sudah melakukannya dalam kode. Ini cuplikan saya dengan peningkatan padding hardcoded sebesar 10dp.
Ini memberi Anda yang berikut, di mana garis hijau adalah peningkatan padding. Ini lebih aman daripada nilai hardcoding, karena perangkat yang berbeda dapat menggunakan drawables yang berbeda untuk kotak centang.
UPDATE - Seperti orang baru-baru ini disebutkan dalam jawaban di bawah, perilaku ini tampaknya telah berubah di Jelly Bean (4.2). Aplikasi Anda perlu memeriksa versi mana yang sedang berjalan, dan menggunakan metode yang sesuai.
Untuk 4.3+ itu hanya mengatur padding_left. Lihat jawaban htafoya untuk detailnya.
sumber
paddingLeft="48sp"
? Berfungsi dengan baik di sini, bahkan jika saya mengubah skala dan orientasi. Kode Anda memberi saya nilai padding tidak menentu pada daftar item.getView()
Adaptor khusus (jika Anda mendaur ulang tampilan), karena bantalan akan meningkat tanpa henti. Untuk memperbaiki masalah ini saya harus menggunakan sesuatu seperti ini:boolean isHackNeeded = Build.VERSION.SDK_INT < 17; float scale = context.getResources().getDisplayMetrics().density; if (isHackNeeded) {CheckBox rb = new CheckBox(context); this.PADDING = rb.getPaddingLeft() + Math.round(10.0f * scale); } else { this.PADDING = Math.round(10.0f * scale); }
. Dan kemudian gunakanPADDING
untuk setiap Kotak centang saya mengembang:check.setPadding(PADDING, check.getPaddingTop() ...
Diberikan tanggapan @DougW, apa yang saya lakukan untuk mengelola versi lebih sederhana, saya tambahkan ke tampilan kotak centang saya:
tempat dimen ditemukan dalam dua folder nilai:
nilai-nilai
values-v17 (4.2 JellyBean)
Saya punya pemeriksaan khusus, gunakan dps untuk pilihan terbaik Anda.
sumber
values-v17
ketika perbaikan diperkenalkan di API 17 (menurut beberapa posting di atas)Gunakan atribut
android:drawableLeft
alih-alihandroid:button
. Untuk mengatur padding antara drawable dan text useandroid:drawablePadding
. Untuk memposisikan penggunaan yang dapat ditarikandroid:paddingLeft
.sumber
android:background="@android:color/transparent"
dan margin kiri akan menghilang<item name="android:checkboxStyle">@style/CheckBox</item>
Dengan begitu, Anda memiliki gaya yang ditentukan sekali dan direferensikan sekali saja.Android 4.2 Jelly Bean (API 17) menempatkan teks paddingLeft dari buttonDrawable (ints right edge). Ini juga berfungsi untuk mode RTL.
Sebelum 4.2 paddingLeft mengabaikan buttonDrawable - itu diambil dari tepi kiri tampilan CompoundButton.
Anda dapat menyelesaikannya melalui XML - atur paddingLeft ke buttonDrawable.width + requiredSpace pada android yang lebih lama. Setel ke diperlukanSpace hanya pada API 17 ke atas. Misalnya menggunakan sumber daya dimensi dan menimpa dalam folder sumber daya nilai-v17.
Perubahan itu diperkenalkan melalui android.widget.CompoundButton.getCompoundPaddingLeft ();
sumber
android:background="@android:color/transparent"
.Ya, Anda dapat menambahkan padding dengan menambahkan padding.
android:padding=5dp
sumber
Jika Anda ingin desain yang bersih tanpa kode, gunakan:
Triknya adalah mengatur warna menjadi transparan untuk
android:drawableLeft
dan memberikan nilaiandroid:drawablePadding
. Selain itu, transparansi memungkinkan Anda untuk menggunakan teknik ini pada warna latar belakang apa pun tanpa efek samping - seperti ketidakcocokan warna.sumber
API 17 dan di atasnya, Anda dapat menggunakan:
API 16 dan di bawah, Anda dapat menggunakan:
sumber
Dalam kasus saya, saya memecahkan masalah ini menggunakan atribut CheckBox berikut ini di XML:
*
*
sumber
Solusi sederhana, tambahkan baris ini di properti CheckBox , ganti 10dp dengan nilai spasi yang Anda inginkan
sumber
Saya tidak kenal teman-teman, tapi saya diuji
<CheckBox android:paddingLeft="8mm"
dan hanya memindahkan teks ke kanan, bukan seluruh kontrol.Ini cocok untuk saya.
sumber
Mengapa tidak memperpanjang Kotak Centang Android agar memiliki lapisan yang lebih baik sebagai gantinya. Dengan begitu alih-alih harus memperbaikinya dalam kode setiap kali Anda menggunakan Kotak Centang, Anda hanya dapat menggunakan Kotak Centang yang diperbaiki.
Kotak Perluas Pertama:
Kedua di xml Anda alih-alih membuat Kotak Centang normal, buatlah kotak yang diperluas
sumber
Saya baru saja menyimpulkan ini:
Ganti Kotak centang dan tambahkan metode ini jika Anda memiliki drawable yang dapat disesuaikan:
atau ini jika Anda menggunakan sistem drawable:
Terima kasih atas jawabannya :)
sumber
Perilaku ini tampaknya telah berubah dalam Jelly Bean. Trik paddingLeft menambahkan padding tambahan, membuat teks terlihat terlalu jauh ke kanan. Adakah yang memperhatikan itu?
sumber
Untuk ruang antara tanda centang dan penggunaan teks:
Tetapi menjadi lebih dari 10dp, karena tanda centang berisi padding (sekitar 5dp) di sekitar. Jika Anda ingin menghapus bantalan, lihat Cara menghapus bantalan di Android Kotak Centang :
sumber
sumber
Bad idea for usability
Bukan itu. Letakkan kedua kotak centang dan tampilan teks dalam tata letak linier dan buat agar linearlayout tersentuh.Jika Anda memiliki pemilih gambar khusus untuk kotak centang atau radiobutton, Anda harus mengatur properti tombol dan latar belakang yang sama seperti ini:
Anda dapat mengontrol ukuran kotak centang atau bantalan tombol radio dengan properti latar belakang.
sumber
hanya Anda yang perlu memiliki satu parameter dalam file xml
sumber
Mengatur minHeight dan minWidth menjadi
0dp
solusi terbersih dan terarah bagi saya di Android 9 API 28:sumber
Jika Anda membuat tombol khusus, mis. Lihat perubahan tampilan tutorial kotak centang
Kemudian cukup tambahkan lebar btn_check_label_background.9.png dengan menambahkan satu atau dua kolom piksel transparan di bagian tengah gambar; biarkan penanda 9-patch seperti apa adanya.
sumber
Apa yang saya lakukan, adalah memiliki
TextView
danCheckBox
di dalam (Relatif)Layout
. TheTextView
menampilkan teks yang saya ingin pengguna untuk melihat, danCheckBox
tidak memiliki teks. Dengan begitu, saya bisa mengatur posisi / padding dariCheckBox
mana pun saya mau.sumber
Saya memiliki masalah yang sama dengan mini Galaxy S3 (android 4.1.2) dan saya hanya membuat kotak centang ubahsuaian saya memperpanjang AppCompatCheckBox bukannya CheckBox. Sekarang ini berfungsi dengan baik.
sumber
Anda perlu mendapatkan ukuran gambar yang Anda gunakan untuk menambahkan padding Anda ke ukuran ini. Di Android internal, mereka mendapatkan drawable yang Anda tentukan di src dan gunakan ukurannya setelahnya. Karena ini adalah variabel pribadi dan tidak ada getter yang tidak dapat Anda akses. Anda juga tidak bisa mendapatkan com.android.internal.R.styleable.CompoundButton dan dapatkan gambarnya dari sana.
Jadi, Anda perlu membuat style Anda sendiri (yaitu custom_src) atau Anda dapat menambahkannya langsung dalam implementasi RadioButton Anda:
sumber
Karena Anda mungkin menggunakan pemilih yang dapat ditarik untuk
android:button
properti Anda, Anda perlu menambahkanandroid:constantSize="true"
dan / atau menentukan drawable default seperti ini:Setelah itu Anda perlu menentukan
android:paddingLeft
atribut di kotak centang xml Anda.Cons:
Di editor tata letak Anda akan teks masuk di bawah kotak centang dengan api 16 dan di bawah, dalam hal ini Anda dapat memperbaikinya dengan membuat Anda kelas kotak centang kustom seperti yang disarankan tetapi untuk api level 16.
Alasan:
itu adalah bug karena
StateListDrawable#getIntrinsicWidth()
panggilan digunakan secara internal,CompoundButton
tetapi dapat mengembalikan< 0
nilai jika tidak ada kondisi saat ini dan tidak ada ukuran konstan yang digunakan.sumber
Semua harus Anda lakukan untuk mengatasi masalah ini adalah dengan menambahkan
android:singleLine="true"
kecheckBox
dalam tata letak xml android Anda:dan tidak ada yang istimewa yang akan ditambahkan secara pemrograman.
sumber
Gambar kotak centang tumpang tindih ketika saya menggunakan drawables saya sendiri dari pemilih, saya telah menyelesaikan ini menggunakan kode di bawah ini:
Terima kasih untuk Alex Semeniuk
sumber
Saya berakhir dengan masalah ini dengan mengubah gambar. Baru saja menambahkan latar belakang ekstra transparan dalam file png. Solusi ini berfungsi sangat baik di semua API.
sumber
Mungkin sudah terlambat, tetapi saya telah membuat metode utilitas untuk mengelola masalah ini.
Cukup tambahkan metode ini ke utilitas Anda:
Dan gunakan seperti ini:
atau seperti ini:
sumber
Alih-alih menyesuaikan teks untuk Kotak Centang, saya telah melakukan hal berikut dan itu bekerja untuk saya untuk semua perangkat. 1) Dalam XML, tambahkan kotak centang dan tampilan teks yang berdekatan satu demi satu; menjaga jarak. 2) Atur ukuran teks kotak centang ke 0sp. 3) Tambahkan teks relatif ke tampilan teks di sebelah kotak centang.
sumber
<CheckBox android:drawablePadding="16dip"
- Padding antara drawables dan teks.sumber