Bir Görünümün arka plan rengi nasıl ayarlanır


179

Bir Görünüm (bu durumda bir Düğme) arka plan rengini ayarlamaya çalışıyorum.

Bu kodu kullanıyorum:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Düğmenin ekrandan kaybolmasına neden olur. Neyi yanlış yapıyorum ve herhangi bir Görünümde arka plan rengini değiştirmenin doğru yolu nedir?

Teşekkürler.


1
Doğru görünüyor. Aslında, geçersiz () çağırmanız gerektiğini düşünmüyorum. Düğmenin kaybolduğunu söylediğinizde, kelimenin tam anlamıyla mı yoksa düğmenin üzerinde kaybolan bir metin veya bir resim olduğunu mu kastediyorsunuz?
RickNotFred

Yanıtlar:


281

Düğmenizi saydam yaptınız. İlk bayt alfadır.

Deneyin v.setBackgroundColor(0xFF00FF00);


2
EddieB'nin aşağıdaki cevabı, EditText'in alt çizgisi gibi herhangi bir sınırı vb. Kaldırdığından çok daha iyidir
Molten Ice

@aroth daha iyi Color.Green? Eğer argb ile renk kompleksi istiyorum? ... Cevabınız kullanımdan kaldırıldı
delive

2
@delive - Yine mi geldin? Color.GREEN olduğu değil kaldırıldı ve alfa bayt içermektedir. It adlı değerdir 0xff00ff00, tam olarak aynı zamanda olmanın yararı vardır haricinde ne cevap önerildiği aynısını olarak insan tarafından okunabilir . Çoğu geliştirici insan tarafından okunabilir bir çözümü tercih eder.
aroth

145

SetBackgoundColor'ı çağırdığınızda, kenarlıklar, köşeler, dolgu vb. Dahil olmak üzere mevcut arka plan kaynaklarının üzerine yazar / kaldırır.

View v;
v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);

Farklı efektler için PorterDuff.Mode. * İle deney yapın.


"mevcut herhangi bir arka plan kaynağının üzerine yazar / kaldırır", tam olarak değil.
Yousha Aleayoub

2
Yukarıdakileri v.invalidate () ile birlikte kullanmak zorunda kaldım; sonraki satırda.
Hashim Akhtar

1
bu zamanı boşa harcadı ve kabul edilen cevapla gitti, v.getBackground () nullpointer istisnası verdi ve çöktü.
Siddarth G

Bu artı PorterDuff.Mode.SRC_IN benim için çözüldü, böylece arka plan sınırımı kaybetmezdim.
Guilherme Carvalho

123

Bunu yapmak için birkaç seçenek ...

Arka planı yeşil olarak ayarla:

v.setBackgroundColor(0x00FF00);

Alfa ile arka planı yeşile ayarlayın :

v.setBackgroundColor(0xFF00FF00);

Color.GREEN sabiti ile arka planı yeşile ayarlayın:

v.setBackgroundColor(Color.GREEN);

Colors.xml dosyasında arka planı yeşil tanımlamaya ayarlayın

<?xml version="1.0" encoding="utf-8"?>
<resources>     
    <color name="myGreen">#00FF00</color> 
    <color name="myGreenWithAlpha">#FF00FF00</color> 
</resources>

ve kullanma:

v.setBackgroundResource(R.color.myGreen);

ve:

v.setBackgroundResource(R.color.myGreenWithAlpha);

veya daha uzun sargılı:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));

ve:

v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));

getResources().getColor(...)kullanımdan kaldırıldı stackoverflow.com/questions/31842983/…
Junior Mayhé

5
Ayrıca: v.setBackgroundResource(R.color.myGreen);kullanırkencolors.xml
grim

Zaten çağrılan yöntemleri gördüğünüz için invalidateçağrılar kaldırıldı . setBackground...
weston

v.setBackgroundColor(0x00FF00);sadece onların çalışmadığını söyledikleri kodudur. Ayrıca şeffaf olmasını da beklerdim.
weston

35

Onaltılık rengi aşağıdakilere sahip herhangi bir kaynağa ayarlayabilirsiniz:

View.setBackgroundColor(Color.parseColor("#e7eecc"));

16
// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

Kod, düğmeyi yeşile ayarlamaz. Bunun yerine, düğmeyi tamamen görünmez yapar.

Açıklama: rengin onaltılık değeri yanlış. Alfa değeri sıfır olduğunda renk görünmez olur.

Doğru onaltılık değer, 0xFF00FF00tam opaklık yeşili içindir. 00 ve FF arasındaki herhangi bir Alfa değeri şeffaflığa neden olur.


12

ve herhangi bir Görünümde arka plan rengini değiştirmenin doğru yolu nedir?

On herhangi View ? Aradığın şey doğru olsa da invalidate()aramayı bırakmalısın .

Ancak, bazılarının Viewszaten arka planları var. ButtonÖrneğin, A'nın zaten bir arka planı vardır: düğmenin yüzü. Bu arka plan, Android SDK kurulumunuzda StateListDrawablebulabileceğiniz bir android-2.1/data/res/drawable/btn_default.xml. Bu, birden fazla yoğunlukta mevcut olan bir grup dokuz yama bitmap görüntüsünü ifade eder. Yeşil hedeflerinize ulaşmak için bunların tümünü klonlamanız ve değiştirmeniz gerekir.

Kısacası, a'nın arka planını değiştirmeye çalışmak yerine başka bir kullanıcı arayüzü modeli bulmanız daha iyi olacaktır Button.


Tamam, Düğme arka planlarıyla ilgili açıklama için teşekkürler. Dokuz yama bitmap'i ( developer.android.com/reference/android/graphics/NinePatch.html ) benim için yeniydi. Bir Düğmeye bastığımda sadece ekrandaki herhangi bir şeyin rengini değiştirmek istiyorum. Düğmeler bir TextView üzerindedir. Bunun rengini değiştirmeye çalışmak, konsol mesajlarının "DDM dağıtım reg bekleme zaman aşımı ... Sanırım kullanıcı arayüzünde daha fazla okuma yapmam gerekiyor. Herhangi bir ipucu hoş geldiniz. Teşekkürler.
Peter vdL

12

Ekranda görünecek ilk rengi ayarlamak için, bu özelliği ilgili Görünüme ekleyerek de ilgili layout.xml'de (daha iyi tasarım) yapabilirsiniz:

android:background="#FF00FF00"

Soru, renk değişikliğinin dinamik olması gerektiğini açıkça ortaya koyuyor.
Peter vdL


6

API min 16, hedef 23'te kullanıyorum

Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);

WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));

Genellikle çok fazla varsayılan renk yoktur. Yeni renkler burada açıklandığı gibi res / değerler / renklerde tanımlanabilir developer.android.com/samples/BasicMediaRouter/res/values/…
Krystian

5

Basit bir şekilde kullanabilirsiniz:

view.setBackgroundColor(Color.parseColor("#FFFFFF"));


4

Bu soru , bir görünümün arka plan rengini değiştirmekten bahsediyor. Yanıtlardan birinde, kişi çalışma zamanı sırasında arka plan renginin nasıl değiştirileceğini açıklar. Açıkçası, ekrandaki diğer nesneleri nasıl değiştireceğinizi inceleyeceksiniz, ancak bu en azından düğme tıklamasında görünümün arka plan rengini değiştirmenize izin vererek size iyi bir başlangıç ​​yapmalıdır.


3

Android 6 ile belirtmek ContextCompact kullanın

        view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));


2

Gelen KOTLIN bunu şöyle yapabilirsiniz:

val backgroundColor = R.color.whatever_color_you_like
view.setBackgroundColor(getColorCompat(backgroundColor))

getColorCompat()Bir uzantı işlevi nerede :

/**
 * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
 */

 fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)

1
view.setBackgroundColor(R.color.primaryColor);

Önceki renk değerine renk eklediğinden farklı bir renge sahibim.

Benim için işe yarayan:

view.setBackgroundResource(R.color.primaryColor);

1

Biz olduğunu varsayalım Izin birincil renk de values=>colors.xmlolduğu gibi:

<resources>
    <color name="primary">#FDD835</color>
</resources>

Bu nedenle, özel rengimizi kullanmak istiyorsak , yapıcı / yöntemle şu şekilde kullanılacak setBackgroundColor(@ColorInt int Color)bir ek açıklamaya ihtiyacımız var @SuppressLint("ResourceAsColor"):

    @SuppressLint("ResourceAsColor")
    public _LinearLayout(Context context) {
        super(context);

        // Formatting our layout : )
        super.setBackgroundColor(R.color.primary);

        ....


    }

0

intBağımsız değişkene bir geçmelisiniz .

İlk Örnek:

view.setBackgroundColor(-500136)

İkinci Örnek:

int colorId = R.color.green;

view.setBackgroundResource(colorId);

0

Bu iyi çalışmalıdır: v.setBackgroundColor(0xFF00FF00);


0

Yukarıdaki tüm yöntemleri denedim. Ama ihtiyacım olanı elde edemiyorum. İşte benim denemem. Renk için hexcode kullanıyorsanız ve rengi görüntünün arka planı olarak ayarlamak istiyorsanız, bu kotlin kodudur.

val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
val colorCode = "#ffffff"
canvas.drawColor(Color.parseColor(colorCode))
mImageViewLogo.setImageBitmap(bitmap)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.