태그 보관물: android-resources

android-resources

get6.0 (int id)은 Android 6.0 Marshmallow에서 더 이상 사용되지 않습니다 (API 23). 사용되지 않습니다. @ColorInt @Deprecated public int getColor(@ColorRes int id)

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

ContextCompat.getColor() GitHub 에서 소스 코드를 확인할 수 있습니다 .


답변

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);
    }
}

코드가 제대로 작동하고 더 이상 사용되지 않는 getColorAPI <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.