Ich möchte die Ecken einer Ansicht abrunden und die Farbe der Ansicht basierend auf dem Inhalt zur Laufzeit ändern.
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);
Ich hatte gehofft, ein Zeichen zu setzen und die Farbe würde sich überlappen, aber das tun sie nicht. Was auch immer ich als zweites ausführe, ist der resultierende Hintergrund.
Gibt es eine Möglichkeit, diese Ansicht programmgesteuert zu erstellen, wobei zu berücksichtigen ist, dass die Hintergrundfarbe erst zur Laufzeit festgelegt wird?
edit: Ich wechsle jetzt nur zum Testen zwischen Rot und Blau. Später kann der Benutzer die Farbe auswählen.
bearbeiten:
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
quelle
quelle
tags_rounded_corners
?Antworten:
setBackgroundColor
Rufen Sie stattdessen den Hintergrund zum Zeichnen auf und legen Sie seine Farbe fest:Sie können auch die Polsterung in Ihrem
tags_rounded_corners.xml
:quelle
Vollständiger programmatischer Ansatz zum Festlegen abgerundeter Ecken und zum Hinzufügen einer zufälligen Hintergrundfarbe zu einer Ansicht. Ich habe den Code nicht getestet, aber Sie haben die Idee.
Hier verwenden wir einen Gradienten, der gezeichnet werden kann, damit wir ihn verwenden können,
GradientDrawable#setCornerRadius
daShapeDrawable
KEINE solche Methode bereitgestellt wird.quelle
PaintDrawable
anstelle vonGradientDrawable
. Es unterstützt abgerundete Ecken und nur eine einzige Farbe, die geeigneter zu sein scheint als ein Farbverlauf.var pd = new PaintDrawable(BackgroundColor); pd.SetCornerRadius(15); myView.Background = pd;
Ich denke, der schnellste Weg, dies zu tun, ist:
quelle
Sie können dies besser erreichen, indem Sie den DrawableCompat folgendermaßen verwenden :
quelle
Wenn Sie keinen Schlaganfall haben, können Sie verwenden
Dies ändert jedoch auch die Strichfarbe
quelle
Hier ist ein Beispiel mit einer Erweiterung. Dies setzt voraus, dass die Ansicht dieselbe Breite und Höhe hat.
Sie müssen einen Listener für Layoutänderungen verwenden, um die Ansichtsgröße zu ermitteln. Dann können Sie dies einfach in einer solchen Ansicht aufrufen
myView.setRoundedBackground(Color.WHITE)
quelle
Sie können die Farbe beliebiger Elemente (Layout, Textansicht) dynamisch ändern. Versuchen Sie den folgenden Code, um die Farbe programmgesteuert im Layout festzulegen
in der Datei activity.java
Erstellen Sie layout_round.xml in einem zeichnbaren Ordner
Layout in der Datei activity.xml
quelle
Kopieren des Kommentars von @ cimlman in eine Antwort auf oberster Ebene für mehr Sichtbarkeit:
Zu Ihrer Information :
ShapeDrawable
(und sein SubtypPaintDrawable
) verwendet die standardmäßige intrinsische Breite und Höhe von 0. Wenn das Zeichen in Ihrem Anwendungsfall nicht angezeigt wird, müssen Sie die Abmessungen möglicherweise manuell festlegen:-1
ist eine magische Konstante, die angibt, dass ein Drawable keine eigene Breite und Höhe hat ( Quelle ).quelle