뷰의 배경색을 설정하는 방법


179

뷰 (이 경우 버튼)의 배경색을 설정하려고합니다.

이 코드를 사용합니다 :

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

화면에서 버튼이 사라집니다. 내가 뭘 잘못하고 있으며 모든보기에서 배경색을 변경하는 올바른 방법은 무엇입니까?

감사.


1
맞습니다. 사실, invalidate ()를 호출해야한다고 생각하지 않습니다. 버튼이 사라 졌다고 말할 때 문자 그대로 또는 버튼에 사라지는 텍스트 또는 이미지가 있음을 의미합니까?
RickNotFred

답변:


281

버튼을 투명하게 만들었습니다. 첫 번째 바이트는 알파입니다.

시험 v.setBackgroundColor(0xFF00FF00);


2
아래의 EddieB의 답변은 EditText의 밑줄과 같은 테두리 등을 제거하므로 훨씬 좋습니다.
Molten Ice

@aroth가 더 낫습니다 Color.Green? argb와 함께 컬러 컴플렉스를 원한다면? ... 당신의 대답은되지 않습니다
대인 수수

2
@delive-다시 오시겠습니까? Color.GREEN 은 더 이상 사용 되지 않으며 알파 바이트를 포함합니다. 그것은의 값은 0xff00ff00, 정확하게 그것도 있다는 이점이있다를 제외하고 무엇을하는 것은,이 질문에 대해 제안 것 같은 같은 사람이 읽을 수를 . 대부분의 개발자는 사람이 읽을 수있는 솔루션을 선호합니다.
aroth

145

setBackgoundColor를 호출하면 테두리, 모서리, 패딩 등을 포함하여 기존 배경 리소스를 덮어 쓰거나 제거합니다. 기존 배경 리소스의 색상을 변경하면됩니다.

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

다른 효과를 위해 PorterDuff.Mode. *로 실험하십시오.


"기존 배경 리소스를 덮어 쓰거나 제거합니다."
Yousha Aleayoub

2
v.invalidate ()와 함께 위의 내용을 사용해야했습니다. 다음 줄에.
Hashim Akhtar

1
이 낭비 된 시간을 시도하고 허용 된 대답과 함께 v.getBackground ()는 nullpointer 예외를 부여하고 충돌했습니다.
Siddarth G

이 플러스 PorterDuff.Mode.SRC_IN은 나를 위해 해결되었으므로 배경 테두리를 잃지 않을 것입니다.
Guilherme Carvalho

123

이를위한 몇 가지 선택 ...

배경을 녹색으로 설정하십시오.

v.setBackgroundColor(0x00FF00);

알파 를 사용하여 배경을 녹색으로 설정하십시오 .

v.setBackgroundColor(0xFF00FF00);

Color.GREEN 상수를 사용하여 배경을 녹색으로 설정하십시오.

v.setBackgroundColor(Color.GREEN);

Colors.xml 에서 배경을 녹색으로 정의

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

그리고 사용 :

v.setBackgroundResource(R.color.myGreen);

과:

v.setBackgroundResource(R.color.myGreenWithAlpha);

또는 더 긴 바람 :

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

과:

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

getResources().getColor(...)사용되지 가지고 stackoverflow.com/questions/31842983/...을
주니어 Mayhé에게

5
도 있습니다 : v.setBackgroundResource(R.color.myGreen);사용시colors.xml
냉혹

제거 invalidate할 수있는만큼, 통화를 setBackground... 방법은 이미를 호출합니다.
weston

v.setBackgroundColor(0x00FF00);그들이 작동하지 않는다고 말하는 코드 일뿐입니다. 또한 투명 할 것으로 기대합니다.
weston

35

다음을 사용하여 16 진 색상을 모든 자원으로 설정할 수 있습니다.

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

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

코드는 버튼을 녹색으로 설정하지 않습니다. 대신 버튼이 완전히 보이지 않게됩니다.

설명 : 색상의 16 진 값이 잘못되었습니다. 알파 값이 0이면 색상이 보이지 않습니다.

올바른 16 진수 값은 0xFF00FF00완전 불투명 녹색입니다. 00과 FF 사이의 알파 값은 투명도를 유발합니다.


12

뷰에서 배경색을 변경하는 올바른 방법은 무엇입니까?

어떤 View ? 당신이 가지고있는 것은 맞지만 invalidate()전화를 끊어야합니다 .

그러나 일부에는 Views이미 배경이 있습니다. Button예를 들어 A 는 이미 버튼 자체의 배경 인 배경을 가지고 있습니다. 이 배경은 Android SDK 설치에서 StateListDrawable찾을 수 있습니다 android-2.1/data/res/drawable/btn_default.xml. 이는 여러 밀도로 사용 가능한 9 패치 비트 맵 이미지를 의미합니다. 친환경 목표를 달성하려면 모든 것을 복제하고 수정해야합니다.

요컨대,의 배경을 변경하지 않고 다른 UI 패턴을 찾는 것이 더 좋습니다 Button.


버튼 배경에 대한 설명에 감사드립니다. 나인 패치 비트 맵 ( developer.android.com/reference/android/graphics/NinePatch.html )이 처음입니다. 버튼을 누를 때 화면의 색상을 변경하고 싶습니다. 버튼은 TextView에 있습니다. 색상을 변경하려고하면 콘솔 메시지 "DDM 디스패치 등록 대기 시간 초과 ... ActivityManager : DDM 청크를 디스패치 할 수 없음 : 52454151 : 핸들러가 정의되지 않았습니다"및 "앱이 예기치 않게 중지되었습니다"화면의 대화 상자가 나타납니다. UI에 대해 더 많이 읽어야한다고 생각합니다. 어떤 힌트라도 환영합니다. 감사.
Peter vdL

12

화면에 표시 할 첫 번째 색상을 설정하려면이 속성을 관련보기에 추가하여 관련 layout.xml (더 나은 디자인)에서 색상을 지정할 수도 있습니다.

android:background="#FF00FF00"

이 질문은 색상 변화가 역동적이어야한다는 것을 분명히합니다.
Peter vdL





4

질문 에서는보기의 배경색을 변경하는 방법에 대해 설명합니다. 답변 중 하나에서 사람은 런타임 중에 배경색을 변경하는 방법을 설명합니다. 분명히 화면에서 다른 객체를 수정하는 방법을 살펴볼 것입니다. 그러나 이것은 최소한 버튼 클릭시보기의 배경색을 수정할 수있게함으로써 좋은 시작이 될 것입니다.


3

Android 6 사용 ContextCompact 사용

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


2

kotlin 에서는 다음과 같이 할 수 있습니다.

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

getColorCompat()확장 기능은 어디에 있습니까?

/**
 * 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);

이전 색상 값에 색상을 추가하므로 다른 색상을 갖습니다.

나를 위해 일하는 것은 :

view.setBackgroundResource(R.color.primaryColor);

1

다음 과 같이 기본 색상 이 있다고 가정합니다 values=>colors.xml.

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

따라서 사용자 정의 색상을 사용하려면 생성자 / 메소드 setBackgroundColor(@ColorInt int Color)가있는 주석 @SuppressLint("ResourceAsColor")이 필요합니다 .

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

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

        ....


    }

0

int인수를 전달해야합니다 .

첫 번째 예 :

view.setBackgroundColor(-500136)

두 번째 예 :

int colorId = R.color.green;

view.setBackgroundResource(colorId);

0

이것은 잘 작동합니다 : v.setBackgroundColor(0xFF00FF00);


0

위의 모든 방법을 시도했습니다. 그러나 나는 필요한 것을 달성하지 못했습니다. 여기 내 시도가 있습니다. 색상에 16 진 코드를 사용하고 색상을 이미지의 배경으로 설정하려는 경우 이것이 코 틀린 코드입니다.

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.