Chciałbym zaokrąglić rogi widoku, a także zmienić kolor widoku na podstawie zawartości w czasie wykonywania.
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);
Miałem nadzieję, że ustawienie do narysowania i koloru się pokryje, ale tak się nie dzieje. Niezależnie od tego, który wykonam jako drugi, powstanie tło.
Czy istnieje sposób na programowe utworzenie tego widoku, pamiętając, że kolor tła zostanie określony dopiero w czasie wykonywania?
edycja: Zamieniam się teraz między czerwonym i niebieskim tylko do testów. Później kolor będzie wybierany przez użytkownika.
edytować:
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
źródło
źródło
tags_rounded_corners
?Odpowiedzi:
Zamiast tego
setBackgroundColor
pobierz tło do rysowania i ustaw jego kolor:Możesz także zdefiniować dopełnienie w
tags_rounded_corners.xml
:źródło
Całkowicie programowe podejście do ustawiania zaokrąglonych rogów i dodawania losowego koloru tła do widoku. Nie testowałem kodu, ale masz pomysł.
Tutaj używamy gradientu do rysowania, abyśmy mogli z niego skorzystać,
GradientDrawable#setCornerRadius
ponieważShapeDrawable
NIE zapewnia żadnej takiej metody.źródło
PaintDrawable
zamiastGradientDrawable
. Obsługuje zaokrąglone rogi i tylko jeden kolor, który wydaje się być bardziej odpowiedni niż gradient.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Myślę, że najszybszym sposobem na to jest:
źródło
Możesz to lepiej osiągnąć, używając DrawableCompat w następujący sposób:
źródło
Jeśli nie masz udaru, możesz użyć
ale to również zmieni kolor obrysu
źródło
Oto przykład z użyciem rozszerzenia. Zakłada się, że widok ma taką samą szerokość i wysokość.
Aby uzyskać rozmiar widoku, należy użyć odbiornika zmian układu. Wtedy możesz po prostu nazwać to w takim widoku
myView.setRoundedBackground(Color.WHITE)
źródło
Możesz dynamicznie zmieniać kolor dowolnych elementów (układ, widok tekstu). Wypróbuj poniższy kod, aby programowo ustawić kolor w układzie
w pliku activity.java
utwórz layout_round.xml w folderze do rysowania
układ w pliku activity.xml
źródło
Kopiowanie komentarza @ cimlman do odpowiedzi najwyższego poziomu dla lepszej widoczności:
FYI:
ShapeDrawable
(i jego podtyp,PaintDrawable
) używa domyślnej wewnętrznej szerokości i wysokości 0. Jeśli rysowany element nie pojawia się w Twoim przypadku, może być konieczne ręczne ustawienie wymiarów:-1
jest magiczną stałą, która wskazuje, że Drawable nie ma własnej wewnętrznej szerokości i wysokości ( Źródło ).źródło