이 Resources.getColor(int id)
메소드는 더 이상 사용되지 않습니다.
@ColorInt
@Deprecated
public int getColor(@ColorRes int id) throws NotFoundException {
return getColor(id, null);
}
어떻게해야합니까?
답변
Android 지원 라이브러리 23부터
새로운 getColor () 메소드가 추가되었습니다 ContextCompat
.
공식 JavaDoc의 설명 :
특정 자원 ID와 연관된 색상을 리턴합니다.
M부터 시작하여 반환 된 색상은 지정된 컨텍스트 테마에 맞게 스타일이 지정됩니다.
그래서 전화하십시오 :
ContextCompat.getColor(context, R.color.your_color);
답변
tl; dr :
ContextCompat.getColor(context, R.color.my_color)
설명:
Support V4 Library의 일부인 ContextCompat.getColor () 를 사용해야 합니다 (이전의 모든 API에서 작동 함).
ContextCompat.getColor(context, R.color.my_color)
지원 라이브러리를 아직 사용하지 않는 경우 dependencies
앱 내부 의 배열에 다음 행을 추가 해야합니다 build.gradle
(참고 : 이미 appcompat (V7) 라이브러리를 사용하는 경우 선택 사항 임 ).
compile 'com.android.support:support-v4:23.0.0' # or any version above
테마에 관심이있는 경우 설명서에서 다음을 지정합니다.
M부터 시작하여 반환 된 색상은 지정된 컨텍스트 테마에 맞게 스타일이 지정됩니다.
답변
getColor 만 지원 라이브러리를 포함하고 싶지 않으므로 다음과 같은 것을 사용하고 있습니다
public static int getColorWrapper(Context context, int id) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getColor(id);
} else {
//noinspection deprecation
return context.getResources().getColor(id);
}
}
코드가 제대로 작동하고 더 이상 사용되지 않는 getColor
API <23에서 사라질 수 없다고 생각합니다 .
그리고 이것이 제가 Kotlin에서 사용하고있는 것입니다 :
/**
* Returns a color associated with a particular resource ID.
*
* Wrapper around the deprecated [Resources.getColor][android.content.res.Resources.getColor].
*/
@Suppress("DEPRECATION")
@ColorInt
fun getColorHelper(context: Context, @ColorRes id: Int) =
if (Build.VERSION.SDK_INT >= 23) context.getColor(id) else context.resources.getColor(id);
답변
Android Marshmallow에서는 많은 메소드가 더 이상 사용되지 않습니다.
예를 들어 색상을 사용하려면
ContextCompat.getColor(context, R.color.color_name);
또한 드로어 블 사용하기
ContextCompat.getDrawable(context, R.drawable.drawble_name);
답변
모든 Kotlin 사용자의 경우 :
context?.let {
val color = ContextCompat.getColor(it, R.color.colorPrimary)
// ...
}
답변
Kotlin의 RecyclerView에서
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bind(t: YourObject, listener: OnItemClickListener.YourObjectListener) = with(itemView) {
textViewcolor.setTextColor(ContextCompat.getColor(itemView.context, R.color.colorPrimary))
textViewcolor.text = t.name
}
}
답변
Android 지원 라이브러리에서 getColor(Resources, int, Theme)
방법을 사용하십시오 ResourcesCompat
.
int white = new ResourcesCompat().getColor(getResources(), R.color.white, null);
나는 그것이 당신이 질문 getColor(Context, int)
한 ContextCompat
이후 의 것보다 당신의 질문을 더 잘 반영한다고 생각합니다 Resources
. API 레벨 23 이전에는 테마가 적용되지 않고 메소드가 호출 getColor(int)
되지만 더 이상 사용되지 않는 경고가 표시되지 않습니다. 테마도 있습니다 null
.