컬러 리소스에서 컬러 인트를 얻으려면 어떻게 해야 합니까?
컬러 리소스에서 컬러 인트를 얻을 수 있는 방법이 있습니까?
리소스(R.color.myColor)에 정의된 색상(R.color.myColor)의 개별 빨간색, 파란색 및 녹색 구성 요소를 가져와서 세 개의 검색 막대 값을 특정 수준으로 설정하려고 합니다.
사용할 수 있는 항목:
getResources().getColor(R.color.idname);
사용자 지정 색상을 정의하는 방법은 다음과 같습니다.
http://sree.cc/google/android/defining-custom-colors-using-xml-in-android
EDIT(1): 이후getColor(int id)
지금은 더 이상 사용되지 않습니다. 이 옵션을 사용해야 합니다.
ContextCompat.getColor(context, R.color.your_color);
(지원 라이브러리에 추가됨 23)
편집(2):
아래 코드는 사전 및 사후 마시멜로(API 23)에 모두 사용할 수 있습니다.
ResourcesCompat.getColor(getResources(), R.color.your_color, null); //without theme
ResourcesCompat.getColor(getResources(), R.color.your_color, your_theme); //with theme
새로운 Android 지원 라이브러리(및 이 업데이트)에 따라 다음으로 전화해야 합니다.
ContextCompat.getColor(context, R.color.name.color);
설명서에 따르면:
public int getColor (int id)
이 방법은 API 레벨 23에서 더 이상 사용되지 않습니다.대신 getColor(int, 테마) 사용
이는 다음과 같은 솔루션입니다.getResources().getColorStateList(id)
:
다음과 같이 변경해야 합니다.
ContextCompat.getColorStateList(getContext(),id);
2019년 편집
에 관하여ThemeOverlay
가장 가까운 뷰의 컨텍스트를 사용합니다.
val color = ContextCompat.getColor(
closestView.context,
R.color.name.color
)
이렇게 하면 테마 오버레이를 기반으로 올바른 색을 얻을 수 있습니다.
어두운/밝은 테마와 같은 다른 테마를 사용할 때 특히 필요합니다.테마와 스타일에 대해 자세히 알고 싶다면 이 강연을 추천합니다.스타일로 테마 개발
색상 정의
values/color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- color int as #AARRGGBB (alpha, red, green, blue) -->
<color name="orange">#fff3632b</color>
...
<color name="my_view_color">@color/orange</color>
</resources>
색상을 가져와서 설정합니다.
int backgroundColor = ContextCompat.getColor(context, R.color.my_view_color);
// Color backgroundColor = ... (Don't do this. The color is just an int.)
myView.setBackgroundColor(backgroundColor);
참고 항목
다음과 같은 더 쉬운 방법을 참조하십시오.
Color.parseColor(getString(R.color.idname));
최상의 접근법
@sat의 대답처럼, 색을 얻기 위한 좋은 접근법은
ResourcesCompat.getColor(getResources(), R.color.your_color, null);
에 액세스할 수 없는 경우 아래 방법을 사용합니다.getResources()
방법.
Context context = getContext(); // like Dialog class
ResourcesCompat.getColor(context.getResources(), R.color.your_color, null);
내가 하는 일은
public void someMethod(){
...
ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
}
앱의 어디에서나 사용하기가 가장 쉽습니다!Util 클래스 또는 컨텍스트 또는 getResource()가 없는 클래스에서도 마찬가지입니다.
문제(콘텍스트가 없는 경우)
액세스 권한이 없을 때, 예를 들어, 사용자의 작업 방식과 같은Util
학급.
컨텍스트가 없는 아래 방법을 가정합니다.
public void someMethod(){
...
// can't use getResource() without Context.
}
이제 당신은 합격할 것입니다.Context
이 방법 및 사용의 매개 변수로getResources().
public void someMethod(Context context){
...
context.getResources...
}
여기 다음과 같은 장소에서 리소스에 액세스할 수 있는 Bonus 고유 솔루션이 있습니다.Util class
.더하다Resources
당신에게Application
클래스 또는 클래스가 없는 경우 클래스를 만듭니다.
import android.app.Application;
import android.content.res.Resources;
public class App extends Application {
private static App mInstance;
private static Resources res;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
res = getResources();
}
public static App getInstance() {
return mInstance;
}
public static Resources getResourses() {
return res;
}
}
이름 필드를 에 추가합니다.manifest.xml
<application
tag. (아직 추가되지 않은 경우)
<application
android:name=".App"
...
>
...
</application>
이제 당신은 가도 좋습니다.사용하다ResourcesCompat.getColor(App.getRes(), R.color.your_color, null);
앱 내 어디서나.
이 23이면 현재최 API레23이간을 할 수 .getColor()
가 우가사는것같은과하에 사용하는 처럼.getString()
:
//example
textView.setTextColor(getColor(R.color.green));
// if context is not available(ex: not in activity) use with context.getColor()
의 API를 API를 사용합니다.23
그냥 이것을 사용하세요:
textView.setTextColor(getResources().getColor(R.color.green));
하지만 주의하세요.getResources().getColor()
Level API 수준사않습지에서 더 이상 .23
같이 대체합니다.
textView.setTextColor(ContextCompat.getColor(this /*context*/, R.color.green)) //Im in an activity, so I can use `this`
ContextComp:의 기능에 액세스하기 위한 도우미
당신이 은 원면한다수, 제있다니습할한은으로 할 수 .SDK_INT
아래와 같이:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getColor(R.color.green));
} else {
textView.setTextColor(getResources().getColor(R.color.green));
}
사용하도록 업데이트했습니다.ContextCompat.getColor(context, R.color.your_color);
그러나 경우에 따라 달라집니다(일부 장치/Android 버전에서는).합니다. 이로 인해 NullPointer가 발생합니다.엑스피톤.
따라서 모든 장치/버전에서 작동하도록 하기 위해 Null 포인터의 경우 기존 방식을 사용합니다.
try {
textView.setTextColor(ContextCompat.getColor(getActivity(), R.color.text_grey_dark));
}
catch(NullPointerException e) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
textView.setTextColor(getContext().getColor(R.color.text_grey_dark));
}
else {
textView.setTextColor(getResources().getColor(R.color.text_grey_dark));
}
}
이 질문을 검색 결과에 표시하는 데 도움이 될 수 있는 다른 사용 사례에 대한 자세한 내용을 보려면 리소스에 정의된 색상에 알파를 적용하려고 했습니다.
@sat의 정답 사용:
int alpha = ... // 0-255, calculated based on some business logic
int actionBarBackground = getResources().getColor(R.color.actionBarBackground);
int actionBarBackgroundWithAlpha = Color.argb(
alpha,
Color.red(actionbarBackground),
Color.green(actionbarBackground),
Color.blue(actionbarBackground)
);
ContextCompat.getColor(context, R.color.your_color);
활동 중인
ContextCompat.getColor(actvityname.this, R.color.your_color);
단편적으로
ContextCompat.getColor(getActivity(), R.color.your_color);
예:
tvsun.settextcolour(ContextCompat.getColor(getActivity(), R.color.your_color))
활동하지 않는 클래스에서 색상에 액세스하는 것은 어려울 수 있습니다.제가 찾은 대안 중 하나는 사용하는 것이었습니다.enum
.enum
많은 유연성을 제공합니다.
public enum Colors
{
COLOR0(0x26, 0x32, 0x38), // R, G, B
COLOR1(0xD8, 0x1B, 0x60),
COLOR2(0xFF, 0xFF, 0x72),
COLOR3(0x64, 0xDD, 0x17);
private final int R;
private final int G;
private final int B;
Colors(final int R, final int G, final int B)
{
this.R = R;
this.G = G;
this.B = B;
}
public int getColor()
{
return (R & 0xff) << 16 | (G & 0xff) << 8 | (B & 0xff);
}
public int getR()
{
return R;
}
public int getG()
{
return G;
}
public int getB()
{
return B;
}
}
최근 작업 방법:
getColor(R.color.snackBarAction)
또는 함수(문자열 텍스트, 문자열 색상)가 있고 리소스 색상 문자열을 전달해야 하는 경우 다음과 같이 수행할 수 있습니다.
String.valueOf(getResources().getColor(R.color.enurse_link_color))
Inkotlin은 당신의 활동에 이것을 사용하세요.
R.color.color_name
전의
mytextView.setTextColor(R.color.red_900)
언급URL : https://stackoverflow.com/questions/5271387/how-can-i-get-color-int-from-color-resource
'programing' 카테고리의 다른 글
파이썬에서 열거형에 대한 일반적인 관행은 무엇입니까? (0) | 2023.07.19 |
---|---|
이미지를 PIL에서 개방형 CV 형식으로 변환 (0) | 2023.07.19 |
Django와 함께 Pylint 사용 (0) | 2023.07.19 |
TypeScript - [후속 속성 선언은 동일한 유형이어야 함] - 동일한 유형 정의에 대한 다중 참조 (0) | 2023.07.19 |
문자열에서 선행 및 후행 공백을 제거하는 방법은 무엇입니까? (0) | 2023.07.19 |