Saya ingin membulatkan sudut pandang dan juga mengubah warna tampilan berdasarkan konten saat runtime.
TextView v = new TextView(context);
v.setText(tagsList.get(i));
if(i%2 == 0){
v.setBackgroundColor(Color.RED);
}else{
v.setBackgroundColor(Color.BLUE);
}
v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
v.setPadding(twoDP, twoDP, twoDP, twoDP);
v.setBackgroundResource(R.drawable.tags_rounded_corners);
Saya berharap pengaturan drawable dan warna akan tumpang tindih, tetapi ternyata tidak. Mana pun yang saya jalankan kedua adalah latar belakang yang dihasilkan.
Apakah ada cara untuk membuat tampilan ini secara terprogram, dengan mengingat bahwa warna latar belakang tidak akan ditentukan hingga waktu proses?
edit: Saya hanya beralih antara merah dan biru sekarang untuk pengujian. Nantinya warna akan bisa dipilih oleh pengguna.
edit:
tags_rounded_corners.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners
android:bottomRightRadius="2dp"
android:bottomLeftRadius="2dp"
android:topLeftRadius="2dp"
android:topRightRadius="2dp"/>
</shape>
android
android-layout
background
android-view
rounded-corners
John Moffitt
sumber
sumber
tags_rounded_corners
?Jawaban:
Sebagai
setBackgroundColor
ganti, ambil background drawable dan setel warnanya:Selain itu, Anda dapat menentukan padding dalam
tags_rounded_corners.xml
:sumber
Total pendekatan terprogram untuk menyetel sudut membulat dan menambahkan warna latar belakang acak ke Tampilan. Saya belum menguji kodenya, tetapi Anda mengerti.
Di sini kami menggunakan gradient drawable sehingga kami dapat menggunakannya
GradientDrawable#setCornerRadius
karenaShapeDrawable
TIDAK menyediakan metode seperti itu.sumber
PaintDrawable
daripadaGradientDrawable
. Ini mendukung sudut membulat dan hanya satu warna yang tampaknya lebih sesuai daripada gradien.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Menurut saya cara tercepat untuk melakukannya adalah:
sumber
Anda bisa mencapainya lebih baik dengan menggunakan kelas DrawableCompat seperti ini:
sumber
Jika Anda tidak mengalami stroke, Anda dapat menggunakan
tapi ini juga akan mengubah warna guratan
sumber
Berikut ini contoh menggunakan ekstensi. Ini mengasumsikan tampilan memiliki lebar dan tinggi yang sama.
Perlu menggunakan listener perubahan tata letak untuk mendapatkan ukuran tampilan. Kemudian Anda bisa menyebutnya dengan tampilan seperti ini
myView.setRoundedBackground(Color.WHITE)
sumber
Anda dapat mengubah warna item apa pun secara dinamis (tata letak, tampilan teks). Coba kode di bawah ini untuk mengatur warna secara terprogram dalam tata letak
di file activity.java
buat layout_round.xml di folder drawable
layout dalam file activity.xml
sumber
Menyalin komentar @ cimlman menjadi jawaban tingkat atas untuk visibilitas lebih:
FYI:
ShapeDrawable
(dan subjenisnya,PaintDrawable
) menggunakan lebar dan tinggi intrinsik default 0. Jika drawable tidak muncul dalam usecase Anda, Anda mungkin harus menyetel dimensinya secara manual:-1
adalah konstanta ajaib yang menunjukkan bahwa Drawable tidak memiliki lebar dan tinggi intrinsiknya sendiri ( Sumber ).sumber