2014-04-19 12 views
10

Sto cercando un modo per inserire un bordo per textview o un pulsante a livello di codice senza utilizzare il metodo setBackgroundResource.Pulsante Android o Bordo TextView programmaticamente senza utilizzare il metodo setBackgroundDrawable

L'obiettivo che sto cercando di ottenere qui è quello di modificare il colore di sfondo in modo dinamico ma con un bordo fisso. Quando utilizzo il metodo setBackgroundResource per il bordo dello sfondo, il bordo non rimane dopo aver cambiato il colore dello sfondo a livello di codice.

+0

Credo che faresti miglior uso un 9 patc h e usa il metodo setImageDrawable. O usa setBackground/setBackgroundDrawable con un drawable xml. (la differenza è nel livello API) –

+0

un bordo è una forma di sfondo. Non puoi avere due sfondi contemporaneamente nella stessa vista. Una soluzione sarebbe incorporare il pulsante in un framelayout, impostare il bordo sul pulsante, (con tutto trasparente ma il bordo) e impostare il colore sul framelayout principale – njzk2

risposta

41

semplice esempio di come potrebbe essere questo raggiunto:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:padding="5dp" 
     android:text="@string/hello_world" /> 

</RelativeLayout> 

MainActivity.java

package com.exmple.test; 

import android.app.Activity; 
import android.graphics.drawable.GradientDrawable; 
import android.os.Bundle; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     GradientDrawable gd = new GradientDrawable(); 
     gd.setColor(0xFF00FF00); // Changes this drawbale to use a single color instead of a gradient 
     gd.setCornerRadius(5); 
     gd.setStroke(1, 0xFF000000); 
     TextView tv = (TextView)findViewById(R.id.textView1); 
     tv.setBackground(gd); 


    } 

} 
+0

Questo è molto più leggero di richiedere risorse aggiuntive! Grazie! – ibgib

+0

TextView setBackgroundDrawable è obsoleto –

0

I cosa questo ti aiuterà.

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
     <gradient android:startColor="#FFFFFF" 
     android:endColor="#FFFFFF" 
     android:angle="270" /> 
     <corners android:radius="3dp" /> 
     <stroke android:width="5px" android:color="#eecc68" /> 
    </shape> 
<Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/textView1" 
     android:layout_below="@+id/textView1" 
     android:layout_marginLeft="52dp" 
     android:layout_marginTop="39dp" 
     android:background="@drawable/button" 
     android:text="Button" /> 
+0

Il problema qui è Android: lo sfondo è impostato su uno stile disegnabile . Quindi quando cambio il colore a livello di codice, non ottengo gli altri stili. – VizZy

Problemi correlati