Android에서보기에 불투명도 (알파)를 설정하는 방법


211

다음과 같은 버튼이 있습니다.

<Button 
     android:text="Submit" 
     android:id="@+id/Button01" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content">
</Button>

onCreate()이벤트 에서는 다음과 같이 Button01을 호출합니다.

setContentView(R.layout.main);

View Button01 = this.findViewById(R.id.Button01);
Button01.setOnClickListener(this);

응용 프로그램에 배경이 있으며이 제출 버튼에서 불투명도를 설정하고 싶습니다. 이 뷰의 불투명도를 어떻게 설정합니까? Java 측에서 설정할 수 있습니까, 아니면 main.xml 파일에서 설정할 수 있습니까?

자바 측에서 시도 Button01.mutate().SetAlpha(100)했지만 오류가 발생했습니다.

답변:


64

TextView와 비슷한 문제가있는 동안 방금 귀하의 질문을 찾았습니다. TextView를 확장하고을 재정 의하여 해결할 수있었습니다 onSetAlpha. 아마도 버튼과 비슷한 것을 시도해 볼 수 있습니다.

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class AlphaTextView extends TextView {

  public AlphaTextView(Context context) {
    super(context);
  }

  public AlphaTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public AlphaTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
  }

  @Override
  public boolean onSetAlpha(int alpha) {
    setTextColor(getTextColors().withAlpha(alpha));
    setHintTextColor(getHintTextColors().withAlpha(alpha));
    setLinkTextColor(getLinkTextColors().withAlpha(alpha));
    return true;
  }
}

12
고마워, 이것은 또한 나를 도왔다. 그러나 TextView와 ImageView에 알파를 설정하는 다른 방법이 있다는 것은 우스운 일입니다.
Geraldo Nascimento

이것은 두 번째 리소스없이 이미지보기에 클릭 효과를 적용하는데도 도움이되었습니다. 고맙습니다 !!
skygeek

568

나는 다른 사람들의 훨씬 더 복잡한 답변에 놀랐습니다 .

XML

XML에서 버튼의 색상 정의 (또는 다른보기)에서 알파를 간단하게 정의 할 수 있습니다.

android:color="#66FF0000"    // Partially transparent red

위의 예에서 색상은 부분적으로 투명한 빨간색입니다.

보기의 색상을 정의 할 때 형식은 #RRGGBB또는 #AARRGGBB이며 AA16 진 알파 값입니다. FF완전히 불투명하고 완전히 00투명합니다.

동적으로

코드에서 불투명도를 동적으로 변경해야하는 경우

myButton.getBackground().setAlpha(128);  // 50% transparent

INT의 범위가 0(완전 투명)에서 255(완전 불투명)까지입니다.


18
컴파운드 드로어 블이있는 경우에도 여전히 해결책이 아닙니다.
Michał K

6
보기의 설정 반투명 녹색 : <RelativeLayout의 안드로이드 : 배경 = "# 8700FF00"/>
조니

2
보기에 android:color속성 이 없습니다 .
Ronnie

6
@moshersan android : background 속성 자체에서 색상을 설정할 수 있습니다!
Dheeraj Bhaskar

1
그것은 잘못된 background불투명도가 view불투명 하지 않다는 것 입니다. 많은 사용 사례에서 동일하지 않음
Jocky Doe

215

이미 답변을 찾았을 것 같지만 그렇지 않은 경우 (및 다른 개발자의 경우) 다음과 같이 할 수 있습니다.

btnMybutton.getBackground().setAlpha(45);

여기서는 불투명도를 45로 설정했습니다. 기본적으로 0 (완전 투명)에서 255 (완전 불투명) 사이의 값을 설정할 수 있습니다



8
@Graeme View 클래스의 setAlpha 메소드에 연결했지만 게시물이 Drawable 클래스의 setAlpha를 사용하고 있습니다. getBackground 메소드는 Drawable을 리턴합니다. 이 방법은 API 레벨 1에서입니다 developer.android.com/reference/android/graphics/drawable/...
Geekygecko

오 재밌다! 나는 그것을 보지 못했다. 배경이 투명으로 설정되어 있어도 텍스트가 완전히 표시되었음을 의미합니다.
Graeme

-1 백그라운드 드로어 블이 선택기 인 경우에는 작동하지 않습니다.
Mike S

3
이것은 훌륭하지만 한 가지 부작용으로 작동합니다. 같은 배경을 공유하는 많은 버튼이 있으며 모두 투명하게됩니다! :(
Mark

66

내가 제안하는 것은 사용자 정의 ARGB 색상을 만드는 것 입니다. colors.xml 파일에 다음과 같은 을 .

<resources>
<color name="translucent_black">#80000000</color>
</resources>

그런 다음 버튼 배경을 해당 색상으로 설정하십시오.

android:background="@android:color/translucent_black"

버튼 모양을 가지고 놀고 싶을 때 할 수있는 또 다른 일은 Shape drawable 리소스 속성을 설정 것입니다.

파일 : res / drawable / rounded_corner_box.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#80000000"
        android:endColor="#80FFFFFF"
        android:angle="45"/>
    <padding android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners android:radius="8dp" />
</shape>

그런 다음 버튼 배경으로 사용하십시오.

    android:background="@drawable/rounded_corner_box"

6
40 % 불투명도에서 16 진수 값으로 은폐하기 위해 고군분투하고 있다면 Google 검색을 사용하십시오. "255에서 40으로 16 진수"를 사용하면 16 %가 40 %입니다
scottyab

54

안드로이드 문서에 따르면 alpha는 0과 1 사이의 값입니다. 설정하려면 다음과 같이 사용하십시오.

View v;
v.setAlpha(.5f);

그것이 전체보기에서만 나를 위해 일한 것입니다 ... 여러 개의 텍스트보기가있는 listview 항목을 시도했습니다. 이 한 줄은 시야와 자식에 알파를 설정하는 데 도움이되었습니다. 감사합니다 @ cange1
Alyas

나에게도 효과가 있었던 것. 나는 이것이 오래되었다는 것을 알고 있지만 @ cange1에게 감사드립니다
masoftheund

50

위로부터 훨씬 더 쉽습니다. 버튼에 기본 알파 속성이 있습니다.

android:alpha="0.5"

범위는 완전 투명의 경우 0이고 완전 불투명의 경우 1입니다.


이것은 내가 api 21에서 테스트 한 굉장한 것입니다
Fernando Torres

완벽한 답변 !!
Harry .Naeem

18
android:background="@android:color/transparent"

위는 내가 아는 것입니다 ... 사용자 정의 버튼 클래스를 만드는 것이 가장 좋은 아이디어라고 생각합니다

API 레벨 11
최근에 나는 0과 1 사이의 값을 취하는 이 android : alpha xml 속성을 발견했습니다. 해당하는 메소드는 setAlpha (float) 입니다.


조스 니딘 당신의 답변에 감사드립니다. 그러나 전체 버튼을 완전히 투명하게 만듭니다. 내가보고있는 것은 버튼에 불투명도 (알파 값을 통해)를 넣는 것입니다.
ncakmak

부동 소수점이므로 예를 들어 0과 1, 0.5 사이의 값을 사용할 수 있습니다.
StackOverflowed

@StackOverflowed-ncakmak이 첫 번째 솔루션을 의미한다고 생각합니다. @android:color/transparent배경으로 설정 하면보기가 완전히 투명 해집니다. @android:alpha- 부분은 추가 될 것으로 보인다.
katzenhut

17

btnMybutton.getBackground().setAlpha(45);좋은 생각 이지만 전체 뷰가 아닌 배경에 알파를 적용하기 만합니다.

알파를 적용하여 사용하려면 btnMybutton.setAlpha(0.30f); 대신 사용하십시오. 뷰에 불투명도가 적용됩니다. 0과 1 사이의 값을 허용합니다.

의사는 말합니다 :

뷰의 불투명도를 설정합니다. 0부터 1까지의 값입니다. 여기서 0은보기가 완전히 투명 함을 의미하고 1은보기가 완전히 불투명 함을 의미합니다. 이 뷰가 onSetAlpha (int)를 재정 의하여 true를 반환하면이 뷰는 불투명도 자체를 적용합니다. 그렇지 않으면이 메소드를 호출하는 것은 setLayerType (int, android.graphics.Paint)를 호출하고 하드웨어 계층을 설정하는 것과 같습니다. 알파를 반투명 값 (0 <alpha <1)으로 설정하면 성능에 영향을 줄 수 있습니다. 페이딩 애니메이션의 경우와 같이 일반적으로 알파 속성을 드물게 그리고 일시적으로 사용하는 것이 가장 좋습니다.


7

Holo 테마의 기본 버튼은 약간 투명한 이미지로 구성되어 있기 때문에 ICS / JB에서이 문제가 발생했습니다. 배경의 경우 특히 눈에.니다.

진저 브레드 vs. ICS + :

생강 빵 ICS

각 해상도에 대해 모든 드로어 블 상태와 이미지를 복사하고 투명한 이미지를 단단하게 만드는 것은 고통스럽기 때문에 더 더러운 해결책을 선택했습니다. 정확히 그렇게하는 조잡한 XML 드로어 블 (ButtonHolder)은 다음과 같습니다.

XML 파일

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              style="@style/Content">
  <RelativeLayout style="@style/ButtonHolder">
      <Button android:id="@+id/myButton"
              style="@style/Button"
              android:text="@string/proceed"/>
    </RelativeLayout>
</LinearLayout>

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <solid android:color="@color/white"/>
    </shape>
  </item>

</layer-list>

styles.xml

.
.
.      
  <style name="ButtonHolder">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:background">@drawable/buttonholder</item>
  </style>

  <style name="Button" parent="@android:style/Widget.Button">
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:textStyle">bold</item>
  </style>
.
.
.

그러나 홀로 버튼 이미지에는 누른 공간을 설명하기 위해 여백이 포함되어 있기 때문에 흰색 테두리가 나타납니다.

너무 많은 흰색 너무 많은 흰색을 눌렀습니다.

따라서 해결책은 흰색 배경에 여백 (4dp는 효과가 있음)과 둥근 모서리 (2dp)는 흰색을 완전히 숨기고 버튼은 단단하게 만드는 것입니다.

ButtonHolder.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <item>
    <shape android:shape="rectangle">
      <solid android:color="@android:color/transparent"/>
    </shape>
  </item>

  <item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
    <shape android:shape="rectangle">
      <solid android:color="@color/white"/>
      <corners android:radius="2dp" />
    </shape>
  </item>

</layer-list>

최종 결과는 다음과 같습니다.

화이트 없음 눌린 흰색 없음

기본 버튼 이미지 크기가 ICS 및 JB와 다르기 때문에 v14 +의 경우이 스타일을 대상으로 지정하고 Gingerbread / Honeycomb의 스타일을 조정하거나 제외해야합니다 (예 : Gingerbread 버튼 뒤의 정확한 스타일은 버튼 아래에 약간의 흰색이 나타남).


7

보기를 위해 다음을 통해 불투명도를 설정할 수 있습니다.

view_name.setAlpha(float_value);

이 특성 view.setAlpha(int)은 11보다 큰 API 버전에서는 더 이상 사용되지 않습니다. 따라서 특성 like .setAlpha(0.5f)가 사용됩니다.


6

textView 색상에 대한 API <11의 경우 다음을 수행했습니다.

int textViewColor = textView.getTextColors().getDefaultColor(); 
textView.setTextColor(Color.argb(128, Color.red(textViewColor), Color.green(textViewColor), Color.blue(textViewColor))); //50% transparent

약간 성가 시지만, 작동합니다 :-)


1

나는 이것이 이미 많은 답변을 가지고 있음을 알고 있지만 버튼의 경우 자신의 .xml 선택기를 만들고 해당 버튼의 배경으로 설정하는 것이 가장 쉽다는 것을 알았습니다. 이렇게하면 누르거나 활성화 할 때 상태를 변경할 수도 있습니다. 다음은 내가 사용하는 빠른 스 니펫입니다. 색상에 투명도를 추가하려면 선행 16 진수 값 (#XXcccccc)을 추가하십시오. (XX == "컬러의 알파")

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" >
        <shape>
            <solid
                android:color="#70c656" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#70c656"
                android:endColor="#53933f"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#53933f" />
            <corners
                android:radius="4dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.