প্রোগ্রামেটিকভাবে কীভাবে অ্যাকসেন্ট কালার পাবেন?


89

প্রোগ্রামের মতো নীচের মতো শৈলীতে কীভাবে অ্যাকসেন্ট রঙ সেট আনতে হবে?

    <item name="android:colorAccent">@color/material_green_500</item>

4
নিম্ন ভোটদানের যে কেউ মন্তব্য করতে তাদের মতামত পোস্ট করতে সত্যই
জ্যাকব

উত্তর:


132

আপনি এটি বর্তমান থিম থেকে এভাবে আনতে পারেন:

private int fetchAccentColor() {
    TypedValue typedValue = new TypedValue();

    TypedArray a = mContext.obtainStyledAttributes(typedValue.data, new int[] { R.attr.colorAccent });
    int color = a.getColor(0, 0);

    a.recycle();

    return color;
}

সমর্থন সংস্করণ সম্পর্কে কি?
দারিয়াসএল

4
এটি সমর্থন সংস্করণ।
rciovati

আমরা স্টাইল.এক্সএমএল বা রং.এক্সএমএলতে রঙিন প্রাইমারিতে আরজিবি স্ট্রিং সেট করতে পারি ??
তানভীর বুলসারি

4
এটি আমার জন্য নেতিবাচক সংখ্যাটি ফিরিয়ে দিচ্ছে। অ্যাকসেন্টের রঙ পাওয়ার জন্য এটি কি এখনও বৈধ উপায়?
নাভিদ

4
টাইপডভ্যালু.ডাটা কি রেফারেন্স দেয়?
জিপি্যাক

45

এটি আমার পক্ষেও কাজ করেছে:

public static int getThemeAccentColor (final Context context) {
    final TypedValue value = new TypedValue ();
    context.getTheme ().resolveAttribute (R.attr.colorAccent, value, true);
    return value.data;
}

আমি এই
সমাধানেও

4
নেতিবাচক মান ঠিক আছে। এটি একটি রঙ!
কোপোলি

তবে আমার আবেদনটি ইরোরের সাথে ক্র্যাশ করে কোনও উত্স পাওয়া যায় নি ... আমি যখন নিয়মিত রঙ রাখি তখন এটি ঘটে না! সুতরাং মান ঠিক নেই
বাশেশেভা

তাহলে রিসোর্স না পাওয়া গেলে নেগেটিভ ভ্যালু কোথা থেকে আসবে? আমি যা বলছি তা হল 0xff2506ac (উদাহরণস্বরূপ) negativeণাত্মক সংখ্যা এবং একটি বৈধ রঙের মান।
কোপোলি

4
আপনি যে negativeণাত্মক মানটি পেয়েছেন তা হ'ল সংস্থান আইডি নয় রঙ । এটি কোনও উত্স আইডি হিসাবে ব্যবহার করবেন না।
কোপোলি

28
private static int getThemeAccentColor(Context context) {
    int colorAttr;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        colorAttr = android.R.attr.colorAccent;
    } else {
        //Get colorAccent defined for AppCompat
        colorAttr = context.getResources().getIdentifier("colorAccent", "attr", context.getPackageName());
    }
    TypedValue outValue = new TypedValue();
    context.getTheme().resolveAttribute(colorAttr, outValue, true);
    return outValue.data;
}

4
এটিই একমাত্র উত্তর যা অ্যাপ্লিকেশন আর বর্গটি আমদানির উপর নির্ভর করে না, যা কাস্টম ভিউ তৈরির জন্য আদর্শ।
অ্যালান ভেলোসো

13

আপনারা যারা কোটলিন ব্যবহার করছেন তাদের জন্য

fun Context.themeColor(@AttrRes attrRes: Int): Int {
    val typedValue = TypedValue()
    theme.resolveAttribute (attrRes, typedValue, true)
    return typedValue.data
}

11

বর্তমান থিমটি থেকে রঙ পেতে আমার কাছে একটি ইউলস ক্লাসে একটি স্ট্যাটিক পদ্ধতি রয়েছে। বেশিরভাগ সময় কালারপ্রাইমারি, কালারপ্রিমারি ডার্ক এবং অ্যাকসেন্ট কালার হয় তবে আপনি আরও অনেক কিছু পেতে পারেন।

@ColorInt
public static int getThemeColor
(
        @NonNull final Context context,
        @AttrRes final int attributeColor
)
{
    final TypedValue value = new TypedValue();
    context.getTheme ().resolveAttribute (attributeColor, value, true);
    return value.data;
}

8

এই আমার গ্রহণ করা এখানে:

public static String getThemeColorInHex(@NonNull Context context, @NonNull String colorName, @AttrRes int attribute) {
    TypedValue outValue = new TypedValue();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        context.getTheme().resolveAttribute(attribute, outValue, true);
    } else {
        // get color defined for AppCompat
        int appCompatAttribute = context.getResources().getIdentifier(colorName, "attr", context.getPackageName());
        context.getTheme().resolveAttribute(appCompatAttribute, outValue, true);
    }
    return String.format("#%06X", (0xFFFFFF & outValue.data));
}

ব্যবহার:

    String windowBackgroundHex = getThemeColorInHex(this, "windowBackground", android.R.attr.windowBackground);
    String primaryColorHex = getThemeColorInHex(this, "colorPrimary", R.attr.colorPrimary);

4
String.format()কিভাবে একটি হেক্স রঙ স্ট্রিং নেতিবাচক পূর্ণসংখ্যা মান রূপান্তর করতে ব্যাখ্যা করতে সাহায্য করে।
মিঃ-আইডিই

4
এটি এই প্রশ্নের গৃহীত উত্তরের চেয়ে অনেক ভাল / জেনেরিক সমাধান!
নিলেশ পাওয়ার



0

আপনি যদি এটি একক লাইন হতে চান তবে মেটেরিয়ালিয়ান এই ক্ষেত্রে ব্যবহার করা যেতে পারে

            MaterialColors.getColor(context, R.attr.colorAccent,context.getResources().getColor(R.color.fall_back_color));

প্রথম আর্গুমেন্টটি প্রসঙ্গটি হ'ল দ্বিতীয় যুক্তিটি আপনাকে যে বৈশিষ্ট্যটি অর্জন করতে হবে তা হ'ল এবং তৃতীয় যুক্তিটি ফ্যালব্যাক রঙ হ'ল বৈশিষ্ট্যটি অনুপস্থিত বা বৈশিষ্ট্যের রঙ পাওয়ার সময় কিছু ভুল হয়ে গেছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.