2014-04-19 16 views
10

Szukam sposobu na umieszczenie obramowania dla widoku tekstowego lub przycisku programowo bez użycia metody setBackgroundResource.Przycisk Android lub TextView Border programowo bez użycia metody setBackgroundDrawable

Celem, który staram się tutaj osiągnąć, jest zmiana koloru tła dynamicznie, ale z ustaloną ramką. Gdy używam metody setBackgroundResource dla obramowania tła, ramka nie pozostaje po zmianie koloru tła programowo.

+0

Myślę, że najlepsze wykorzystanie 9 patc h i użyj metody setImageDrawable. LUB użyj setBackground/setBackgroundDrawable z rysunkiem xml. (różnica jest na poziomie API) –

+0

granica jest formą tła. Nie można mieć dwóch obrazów tła w tym samym widoku. Jednym z rozwiązań byłoby osadzenie przycisku w frarmayayout, ustawienie obramowania na przycisku, (ze wszystkim przezroczystym, ale na granicy) i ustawienie koloru na drucie rodzimym framelayout. – njzk2

Odpowiedz

41

Prosty przykład, jak można by to osiągnąć:

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

To jest o wiele lżejsze niż wymagające dodatkowych zasobów! Dzięki! – ibgib

+0

TextView setBackgroundDrawable jest przestarzałe –

0

To pomoże ci.

<?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

Problem tutaj to android: tło jest ustawione na styl do rysowania . Potem, kiedy programowo zmieniam kolor, nie dostaję innych stylów. – VizZy

Powiązane problemy