কীভাবে _আমি অ্যান্ড্রয়েড ললিপপগুলিতে প্রোগ্রামিয়ালি প্রাথমিক এবং অ্যাকসেন্ট রঙ পরিবর্তন করবেন?


156

প্রথমত, এই প্রশ্নটি একটি খুব অনুরূপ প্রশ্ন জিজ্ঞাসা করে। যাইহোক, আমার প্রশ্নের একটি সূক্ষ্ম পার্থক্য আছে।

আমি যা জানতে চাই তা হচ্ছে colorPrimaryথিমের বৈশিষ্ট্যটিকে একটি স্বেচ্ছাসেবী রঙে পরিবর্তনযুক্ত করা সম্ভব কিনা ?

সুতরাং উদাহরণস্বরূপ, আমাদের আছে:

<style name="AppTheme" parent="android:Theme.Material.Light">
    <item name="android:colorPrimary">#ff0000</item>
    <item name="android:colorAccent">#ff0000</item>
</style>

রানটাইম এ, ব্যবহারকারী সিদ্ধান্ত নেয় যে তিনি #ccffffএকটি প্রাথমিক রঙ হিসাবে ব্যবহার করতে চান । অবশ্যই আমি সমস্ত সম্ভাব্য রঙের জন্য থিম তৈরি করতে পারি না।

যতক্ষণ না এটি পাবলিক এসডিকে ব্যবহার করে কাজ করে ততক্ষণ অ্যান্ড্রয়েডের ব্যক্তিগত ইন্টার্নালগুলির উপর নির্ভর করার মতো হ্যাকি স্টাফগুলি করতে হয় কিনা আমি আপত্তি করি না।

আমার লক্ষ্যটি হল এই প্রাথমিক রঙটি ব্যবহার করার মতো ActionBar এবং সমস্ত উইজেট tsCheckBox


1
আপনার অজানা "অ্যান্ড্রয়েডের ব্যক্তিগত ইন্টার্নাল" অস্তিত্বহীন অ্যান্ড্রয়েড প্রকাশের জন্য কোন ধারণা নেই। ধরে নিবেন না যে এল এর "প্রাইভেট ইন্টার্নাল" প্রডাকশন রিলিজের ক্ষেত্রে এল যাই রূপান্তরিত করে তার জন্য তার মতই।
কমন্সওয়্যার

না, আপনি কোনও থিমের মধ্যে স্বেচ্ছাসেবক ডেটা রাখতে পারবেন না। এটি বলেছিল যে, কালারপ্রাইমারিটি কেবলমাত্র অ্যাকশন বারের পটভূমির জন্য ব্যবহৃত হয়, বারের বার রঙ এবং বিজ্ঞপ্তিগুলির রঙের জন্য এবং আপনি এগুলি সমস্তকে পরিবর্তনশীল করতে পারেন।
অ্যালানভ

2
আমার মনে হয় আপনার "রানটাইমের সময় শৈলীর বৈশিষ্ট্যটি কীভাবে পরিবর্তন করবেন" জিজ্ঞাসা করা উচিত এবং আমি যা উত্তর দেখেছি তা থেকে আপনি তা পারেন না। তবে আমার একটি ধারণা আছে যা আপনাকে সাহায্য করতে পারে। কাস্টম কন্টেক্সট্র্যাপার ব্যবহার করুন এবং নিজস্ব সংস্থান সরবরাহ করুন। এটি দেখুন: github.com/negusoft/holoaccent/blob/master/HoloAccent/src/com/… সামগ্রিকভাবে এই প্রকল্পটি আপনাকে কীভাবে এটি করতে পারে তার একটি ধারণা দিতে পারে।
মিকুওস

1
এখানে কেবল ব্রেইনফার্টিং হচ্ছে, তবে সমস্ত এক্সএমএল ডাব্লু ডেক্স হিসাবে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটিতে লোড হওয়া .dex ফাইলগুলিতে রূপান্তরিত হয়। এর অর্থ কি এই নয় যে কোডটি থেকে পুরো থিম তৈরি করতে এবং সেট করা পাশাপাশি কোনও কারখানা থেকে থিম তৈরি করা এখনও সম্ভব নয়? অনেক কাজ মনে হচ্ছে।
জি_ভি

1
@ নাইকহর্মন আপনি কি কখনও কোনও উপায় বের করেছেন?
gbhall

উত্তর:


187

থিমগুলি পরিবর্তনযোগ্য, আপনি পারবেন না can't


8
ধন্যবাদ, ক্রিস! আমি যে উত্তরটি সন্ধান করছিলাম তা নয়, তবে আমার ধারণা এটির সাথেই আমার বাঁচতে হবে :)
nhaarman

5
হাই @ ক্রিস ব্যানস, তবে কীভাবে যোগাযোগ অ্যাপ্লিকেশন যোগাযোগের থিমের রঙ অনুসারে স্ট্যাটাস বারের রঙ এবং সরঞ্জামদণ্ডের রঙ পরিবর্তন করেছিল? যদি এটি সম্ভব হয় তবে আমি মনে করি যে নাইক হারমানের প্রয়োজনীয়তা খুব বেশি দূরের নয়, কারণ কেবলমাত্র তাকে ব্যবহারকারী যে রঙের কোডটি চান সেটি সঞ্চয় করতে হবে। আপনি এই সম্পর্কে আরও ব্যাখ্যা করতে পারেন? আমি এ জাতীয় কিছু তৈরি করতে চাই তবে এটির সাথে আমি সত্যিই বিভ্রান্ত।
সোয়ান

39
উইন্ডো.সেট স্ট্যাটাসবারকালার () এর মাধ্যমে স্ট্যাটাস বারের রঙ গতিশীল পরিবর্তন করা যেতে পারে।
ক্রিস ব্যান

9
প্রোগ্রামিয়ালি থিম তৈরি করা কি সম্ভব?
অ্যান্ড্রু ওরোবেটর

3
এবং স্থিতি দণ্ডের রঙ পরিবর্তনশীল করার সময় আপনি উইন্ডো.সেটনাভিগেশন বারকলার () - এপিআই 21 :) এর মাধ্যমে নেভিগেশন বারের রঙও পরিবর্তন করতে পারেন
ব্যবহারকারী 802421

65

আমি পরিচিতি অ্যাপ্লিকেশন এবং কীভাবে এটি প্রতিটি পরিচিতির জন্য একটি থিম ব্যবহার করে সে সম্পর্কে মন্তব্যগুলি পড়েছি।

সম্ভবত, পরিচিতি অ্যাপ্লিকেশনটিতে কিছু পূর্বনির্ধারিত থিম রয়েছে (প্রতিটি উপাদান প্রাথমিক রঙের জন্য এখান থেকে: http://www.google.com/design/spec/style/color.html )।

অনক্রিট পদ্ধতিতে আপনি সেটকন্টেন্টভিউ পদ্ধতির আগে একটি থিম প্রয়োগ করতে পারেন।

তারপরে পরিচিতি অ্যাপ্লিকেশন প্রতিটি ব্যবহারকারীর জন্য এলোমেলোভাবে একটি থিম প্রয়োগ করতে পারে।

এই পদ্ধতিটি হ'ল:

setTheme(R.style.MyRandomTheme);

তবে এই পদ্ধতিতে একটি সমস্যা রয়েছে, উদাহরণস্বরূপ এটি সরঞ্জামদণ্ডের রঙ, স্ক্রোল ইফেক্টের রঙ, রিপল রঙ ইত্যাদি পরিবর্তন করতে পারে তবে এটি স্ট্যাটাস বারের রঙ এবং নেভিগেশন বারের রঙ পরিবর্তন করতে পারে না (যদি আপনি এটিও পরিবর্তন করতে চান)।

তারপরে এই সমস্যার সমাধানের জন্য, আপনি আগে এবং পদ্ধতিটি ব্যবহার করতে পারেন:

if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.md_red_500));
        getWindow().setStatusBarColor(getResources().getColor(R.color.md_red_700));
    }

এই দুটি পদ্ধতি নেভিগেশন এবং স্থিতি বারের রঙ পরিবর্তন করে। মনে রাখবেন, আপনি যদি নিজের নেভিগেশন বারটি স্বচ্ছ সেট করেন তবে আপনি এর রঙ পরিবর্তন করতে পারবেন না।

এটি চূড়ান্ত কোড হওয়া উচিত:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.MyRandomTheme);
    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.myrandomcolor1));
        getWindow().setStatusBarColor(getResources().getColor(R.color.myrandomcolor2));
    }
    setContentView(R.layout.activity_main);

}

এলোমেলো থিমগুলি ব্যবহার করতে আপনি একটি স্যুইচ ব্যবহার করতে পারেন এবং এলোমেলো সংখ্যা তৈরি করতে পারেন বা পরিচিতি অ্যাপ্লিকেশনের মতো প্রতিটি পরিচিতিতে সম্ভবত একটি পূর্বনির্ধারিত নম্বর যুক্ত থাকে।

থিমের একটি নমুনা:

<style name="MyRandomTheme" parent="Theme.AppCompat.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/myrandomcolor1</item>
    <item name="colorPrimaryDark">@color/myrandomcolor2</item>
    <item name="android:navigationBarColor">@color/myrandomcolor1</item>
</style>

আমার ইংরেজীর জন্য দুঃখিত.


1
আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ। দুর্ভাগ্যক্রমে, আমার অনুরোধটি ছিল একটি স্বেচ্ছাসেবী রঙ ব্যবহার করা । অবশ্যই সব রঙের জন্য থিম তৈরি করা সম্ভব নয়।
nhaarman

1
@ ড্যানিয়েলগোমেজিকারিকো - এএফএইকি আপনি প্রাথমিকভাবে যেখানেই সেট করেছেন তা নির্ধারণ না করে প্রাক-সেট থিমটি ওভাররাইড করতে পারেন - যতক্ষণ না আপনি তা তাড়াতাড়ি করেন। উত্তরের হিসাবে বলা হয়েছে "আপনি অনক্রিট পদ্ধতিতে সেটকন্টেন্টভিউ পদ্ধতির আগে একটি থিম প্রয়োগ করতে পারেন।"
টুলমেকারস্টেভ

50

আপনি থিম.এপ্লিস্টাইল ব্যবহার করতে পারবেন থিমটি এটিকে অন্য স্টাইল প্রয়োগ করে রানটাইমের সময় পরিবর্তন করতে।

আসুন আমরা এই স্টাইল সংজ্ঞা আছে বলুন:

<style name="DefaultTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/md_lime_500</item>
    <item name="colorPrimaryDark">@color/md_lime_700</item>
    <item name="colorAccent">@color/md_amber_A400</item>
</style>

<style name="OverlayPrimaryColorRed">
    <item name="colorPrimary">@color/md_red_500</item>
    <item name="colorPrimaryDark">@color/md_red_700</item>
</style>

<style name="OverlayPrimaryColorGreen">
    <item name="colorPrimary">@color/md_green_500</item>
    <item name="colorPrimaryDark">@color/md_green_700</item>
</style>

<style name="OverlayPrimaryColorBlue">
    <item name="colorPrimary">@color/md_blue_500</item>
    <item name="colorPrimaryDark">@color/md_blue_700</item>
</style>

এখন আপনি রান থাইমে আপনার থিমটি তেমন প্যাচ করতে পারেন:

getTheme().applyStyle(R.style.OverlayPrimaryColorGreen, true);

applyStyleবিন্যাসটি স্ফীত হওয়ার আগে পদ্ধতিটি কল করতে হবে! সুতরাং আপনি যদি নিজের হাতে ভিউ লোড না করেন তবে setContentViewআপনার ক্রিয়াকলাপে কল করার আগে আপনার থিমের স্টাইলগুলি প্রয়োগ করা উচিত ।

অবশ্যই এটি একটি স্বেচ্ছাসেবী রঙ নির্দিষ্ট করতে ব্যবহার করা যায় না, অর্থাত্ 16 মিলিয়ন (256 3 ) এর মধ্যে একটি রঙ। তবে আপনি যদি একটি ছোট প্রোগ্রাম লিখে থাকেন যা আপনার জন্য শৈলীর সংজ্ঞা এবং জাভা কোড উত্পন্ন করে থাকে তবে 512 এর মধ্যে (8 3 ) এর মতো কিছু সম্ভব হওয়া উচিত।

যা আকর্ষণীয় করে তোলে তা হ'ল আপনি আপনার থিমের বিভিন্ন দিকের জন্য বিভিন্ন স্টাইলের ওভারলেগুলি ব্যবহার করতে পারেন। colorAccentউদাহরণস্বরূপ কয়েকটি ওভারলে সংজ্ঞা যুক্ত করুন । এখন আপনি প্রায় নির্বিচারে প্রাথমিক রঙ এবং অ্যাকসেন্ট রঙের জন্য বিভিন্ন মানকে একত্রিত করতে পারেন ।

আপনার অবশ্যই নিশ্চিত করা উচিত যে আপনার ওভারলে থিম সংজ্ঞা দুর্ঘটনাক্রমে পিতামাতার শৈলীর সংজ্ঞা থেকে একগুচ্ছ শৈলীর সংজ্ঞা অর্জন করে না। উদাহরণস্বরূপ একটি শৈলী AppTheme.OverlayRedনিখুঁতভাবে সংজ্ঞায়িত সমস্ত শৈলীর উত্তরাধিকার সূত্রে প্রাপ্ত হয় AppThemeএবং আপনি যখন মাস্টার থিমটি প্যাচ করেন তখন এই সমস্ত সংজ্ঞাও প্রয়োগ করা হবে। সুতরাং হয় ওভারলে থিমের নামগুলিতে বিন্দুগুলি এড়িয়ে চলুন বা এর মতো কিছু ব্যবহার করুন Overlay.Redএবং Overlayখালি শৈলী হিসাবে সংজ্ঞা দিন ।


11
আপনার ক্রিয়াকলাপে কল applyStyleকরার আগে কল করার চেষ্টা করুন setContentViewএবং এটি কার্যকর হবে।
ডেভনসোল

1
হ্যাঁ ওকেই, তাহলে এটি কাজ করতে পারে! আমি ক্রিয়াকলাপ না করে খণ্ড নিভায় রঙিন পরিবর্তন করার একটি উপায় অনুসন্ধান করছি! এটি কেন দুঃখজনকভাবে আমার জন্য কাজ করে না: <আমার ব্যবহারের ক্ষেত্রে হ'ল আমি ট্যাবগুলি থেকে স্যুইচ করার সময় FAB বা ট্যাব সূচকগুলির জন্য বিভিন্ন রঙ চাই যা একটি আলাদা খণ্ডন শুরু করবে!
ডেনিস অ্যান্ডারসন

ধন্যবাদ এটি অনেক সাহায্য করেছে! তবে আমি একাধিকবার এটি করতে পারছি না। (কালারপ্রিমারির জন্য একটি, রঙআসেন্টের জন্য একটি, ইত্যাদি)। তুমি কি আমাকে সাহায্য করবে? ধন্যবাদ। stackoverflow.com/questions/41779821/…
টমাস ভোস

1
এটি সেই জাতীয় উত্তর যার জন্য আমি দ্বিতীয় অ্যাকাউন্টটি আরও একবার +1 করতে চাই। ধন্যবাদ।
বেনোইট ডাফিজ

আপনাকে অনেক ধন্যবাদ, আমি এটাই খুঁজছিলাম .... আমি আশা করি আমি এই পদ্ধতির সাহায্যে বর্তমান থিমের অ্যাকসেন্ট রঙ পরিবর্তন করতে পারি।
নাসিব

32

যে কোনও রঙিন থিম তৈরির জন্য আমি কিছু সমাধান তৈরি করেছি, এটি কারও পক্ষে কার্যকর হতে পারে। API 9+

1. প্রথমে " res / মান- v9 / " তৈরি করুন এবং এই ফাইলটি এখানে রাখুন: শৈলী.এক্সএমএল এবং নিয়মিত " রেজ / মান" ফোল্ডারটি আপনার স্টাইলগুলির সাথে ব্যবহৃত হবে।

২. এই কোডটি আপনার রেজিস / মান / স্টাইলস.এক্সএমএল এ রাখুন:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#000</item>
        <item name="colorPrimaryDark">#000</item>
        <item name="colorAccent">#000</item>
        <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    </style>

    <style name="AppThemeDarkActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">#000</item>
        <item name="colorPrimaryDark">#000</item>
        <item name="colorAccent">#000</item>
        <item name="android:windowAnimationStyle">@style/WindowAnimationTransition</item>
    </style>

    <style name="WindowAnimationTransition">
        <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
        <item name="android:windowExitAnimation">@android:anim/fade_out</item>
    </style>
</resources>

3. এন্ড্রয়েড ম্যানিফেস্টে:

<application android:theme="@style/AppThemeDarkActionBar">

৪. "থিমলাইন.জভা" নাম সহ একটি নতুন শ্রেণি তৈরি করুন

public class ThemeColors {

    private static final String NAME = "ThemeColors", KEY = "color";

    @ColorInt
    public int color;

    public ThemeColors(Context context) {
        SharedPreferences sharedPreferences = context.getSharedPreferences(NAME, Context.MODE_PRIVATE);
        String stringColor = sharedPreferences.getString(KEY, "004bff");
        color = Color.parseColor("#" + stringColor);

        if (isLightActionBar()) context.setTheme(R.style.AppTheme);
        context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));
    }

    public static void setNewThemeColor(Activity activity, int red, int green, int blue) {
        int colorStep = 15;
        red = Math.round(red / colorStep) * colorStep;
        green = Math.round(green / colorStep) * colorStep;
        blue = Math.round(blue / colorStep) * colorStep;

        String stringColor = Integer.toHexString(Color.rgb(red, green, blue)).substring(2);
        SharedPreferences.Editor editor = activity.getSharedPreferences(NAME, Context.MODE_PRIVATE).edit();
        editor.putString(KEY, stringColor);
        editor.apply();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) activity.recreate();
        else {
            Intent i = activity.getPackageManager().getLaunchIntentForPackage(activity.getPackageName());
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            activity.startActivity(i);
        }
    }

    private boolean isLightActionBar() {// Checking if title text color will be black
        int rgb = (Color.red(color) + Color.green(color) + Color.blue(color)) / 3;
        return rgb > 210;
    }
}

5. MainActivity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        new ThemeColors(this);
        setContentView(R.layout.activity_main);
    }

    public void buttonClick(View view){
        int red= new Random().nextInt(255);
        int green= new Random().nextInt(255);
        int blue= new Random().nextInt(255);
        ThemeColors.setNewThemeColor(MainActivity.this, red, green, blue);
    }
}

রঙ পরিবর্তন করতে, কেবলমাত্র আপনার আরজিবি দিয়ে র্যান্ডম প্রতিস্থাপন করুন, আশা করি এটি সাহায্য করবে।

এখানে চিত্র বর্ণনা লিখুন

সম্পূর্ণ উদাহরণ রয়েছে: কালারটেষ্ট.জিপ


আপনি যেমন প্রকল্প ভাগ করতে পারেন?
এরসেলান খান

নতুন প্রকল্প তৈরি করুন, ফাইল ডাউনলোড করুন - "styles.xML", এবং উপরের কোডটি ব্যবহার করুন। শুভকামনা।
আইকিউ.ফেটের

1
আমি আমার মাথা গুটিয়ে রাখতে পারি context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));না আপনি কি আমাকে এই বিষয়ে অনুসরণ করতে একটি ব্যাখ্যা বা একটি লিঙ্ক দিতে পারেন?
ল্যাঙ্গুস্টেন গস্টেল

1
@ আইকিউ.ফ্যাচার আমি মনে করি আপনার কোডটি গিথুব রেপোতে চাপানো কোড ভাগ করে নেওয়ার পক্ষে উপযুক্ত
ভাদিম কোতোভ

1
অন্যদের জন্য কেবল স্পষ্ট হওয়ার কারণ আমি এর জন্য পড়েছি ... এখানে একটি ফাইল রেস-ভি 9 / স্টাইলস.এক্সএমএল রয়েছে যা বিভিন্ন রঙের থিমগুলির পুরো তালিকা ঘোষণা করে এবং কোডটি মূলত সেই থিমগুলির মধ্যে একটিতে প্রয়োগ করে এবং ক্রিয়াকলাপটি পুনরায় তৈরি করে। অন্যান্য উত্তরগুলিও এটি অর্জন করার চেষ্টা করেছে ... এটি থিমের পূর্বনির্ধারিত হিসাবে এটি কর্মসূচী যা প্রোগ্রামিয়ালি বা গতিশীলভাবে থিম তৈরি করে না।
frezq

3

আমি দাহনার্কের কোড ব্যবহার করেছি তবে আমারও সরঞ্জামদণ্ডের পটভূমিটি পরিবর্তন করতে হবে:

if (dark_ui) {
    this.setTheme(R.style.Theme_Dark);

    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(getResources().getColor(R.color.Theme_Dark_primary));
        getWindow().setStatusBarColor(getResources().getColor(R.color.Theme_Dark_primary_dark));
    }
} else {
    this.setTheme(R.style.Theme_Light);
}

setContentView(R.layout.activity_main);

toolbar = (Toolbar) findViewById(R.id.app_bar);

if(dark_ui) {
    toolbar.setBackgroundColor(getResources().getColor(R.color.Theme_Dark_primary));
}

এই কোডটি যুক্ত করুন: অ্যান্ড্রয়েড: ব্যাকগ্রাউন্ড = "? অ্যাটার / কালারপ্রাইমারি", আপনার সরঞ্জামদণ্ডে (.xML ফাইলে), যাতে আপনার জাভাতে ব্যাকগ্রাউন্ড সেট করার দরকার নেই।
জাভিয়েরসেগোভিয়া কর্ডোবা

তবে আমার দুটি পৃথক টুলবার রয়েছে, একটি হালকা থিমের জন্য একটি অন্ধকার থিমের জন্য। যদি আমি অ্যান্ড্রয়েড যুক্ত করি: ব্যাকগ্রাউন্ড = "? অ্যাটর / কালারপ্রাইমারি" আমাকে কিছু ধরণের নির্বাচক ব্যবহার করতে হবে।
lgallard

আমার অনেক থিম ছিল এবং আমি কেবল সেই কোডটি ব্যবহার করি। এই অ্যাপ্লিকেশনটিতে একবার দেখুন: play.google.com/store/apps/…
জাভিয়ের শেগভিয়া কর্ডোবা

-1

আপনি রঙিনপ্রিমারির রঙ পরিবর্তন করতে পারবেন না, তবে আপনি একটি নতুন রঙের প্রাইমারি রঙের সাথে একটি নতুন স্টাইল যুক্ত করে আপনার অ্যাপ্লিকেশনটির থিমটি পরিবর্তন করতে পারবেন

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

<style name="AppTheme.NewTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorOne</item>
    <item name="colorPrimaryDark">@color/colorOneDark</item>
</style>

এবং কার্যকলাপ সেট থিমের ভিতরে

 setTheme(R.style.AppTheme_NewTheme);
 setContentView(R.layout.activity_main);

আমি দেখতে পাচ্ছি যে ইতিমধ্যে পূর্বের উত্তরগুলি রয়েছে যা স্যুইচিং শৈলীর বর্ণনা দেয়। কোন পরিস্থিতিতে আপনার উত্তরগুলি সেগুলির চেয়ে বেশি উপযুক্ত? এবং স্পষ্টতই, প্রশ্নটি বলছে "রানটাইমের সময়, ব্যবহারকারী সিদ্ধান্ত নেন যে তিনি # সিসিএফএফিকে একটি প্রাথমিক রঙ হিসাবে ব্যবহার করতে চান Of অবশ্যই সমস্ত সম্ভাব্য রঙের জন্য থিম তৈরি করার উপায় নেই" " এটি সেই প্রয়োজনটি সমাধান করে না; তবে যদি এটির কীভাবে কেউ বর্ণনা না করে থাকে তা জানার জন্য এটি দরকারী।
নির্মাতা স্টিভ

-2

আপনি করতে পারেন এমন একটি ক্রিয়াকলাপ থেকে:

getWindow().setStatusBarColor(i color);

2
মজার বিষয় এই উত্তরে -8 ভোট রয়েছে তবে আমার সমস্যা সমাধান করে: ডি
নবীন ভান্ডারী

-4

একটি তোলবার ব্যবহার করুন

আপনি একটি কাস্টম সরঞ্জামদণ্ডের ক্লাস তৈরি করে একটি কাস্টম সরঞ্জামদণ্ড আইটেম রঙ গতিশীল সেট করতে পারেন :

package view;

import android.app.Activity;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.support.v7.internal.view.menu.ActionMenuItemView;
import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomToolbar extends Toolbar{

    public CustomToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomToolbar(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        ctxt = context;
    }

    int itemColor;
    Context ctxt;

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        Log.d("LL", "onLayout");
        super.onLayout(changed, l, t, r, b);
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    } 

    public void setItemColor(int color){
        itemColor = color;
        colorizeToolbar(this, itemColor, (Activity) ctxt);
    }



    /**
     * Use this method to colorize toolbar icons to the desired target color
     * @param toolbarView toolbar view being colored
     * @param toolbarIconsColor the target color of toolbar icons
     * @param activity reference to activity needed to register observers
     */
    public static void colorizeToolbar(Toolbar toolbarView, int toolbarIconsColor, Activity activity) {
        final PorterDuffColorFilter colorFilter
                = new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.SRC_IN);

        for(int i = 0; i < toolbarView.getChildCount(); i++) {
            final View v = toolbarView.getChildAt(i);

            doColorizing(v, colorFilter, toolbarIconsColor);
        }

      //Step 3: Changing the color of title and subtitle.
        toolbarView.setTitleTextColor(toolbarIconsColor);
        toolbarView.setSubtitleTextColor(toolbarIconsColor);
    }

    public static void doColorizing(View v, final ColorFilter colorFilter, int toolbarIconsColor){
        if(v instanceof ImageButton) {
            ((ImageButton)v).getDrawable().setAlpha(255);
            ((ImageButton)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof ImageView) {
            ((ImageView)v).getDrawable().setAlpha(255);
            ((ImageView)v).getDrawable().setColorFilter(colorFilter);
        }

        if(v instanceof AutoCompleteTextView) {
            ((AutoCompleteTextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof TextView) {
            ((TextView)v).setTextColor(toolbarIconsColor);
        }

        if(v instanceof EditText) {
            ((EditText)v).setTextColor(toolbarIconsColor);
        }

        if (v instanceof ViewGroup){
            for (int lli =0; lli< ((ViewGroup)v).getChildCount(); lli ++){
                doColorizing(((ViewGroup)v).getChildAt(lli), colorFilter, toolbarIconsColor);
            }
        }

        if(v instanceof ActionMenuView) {
            for(int j = 0; j < ((ActionMenuView)v).getChildCount(); j++) {

                //Step 2: Changing the color of any ActionMenuViews - icons that
                //are not back button, nor text, nor overflow menu icon.
                final View innerView = ((ActionMenuView)v).getChildAt(j);

                if(innerView instanceof ActionMenuItemView) {
                    int drawablesCount = ((ActionMenuItemView)innerView).getCompoundDrawables().length;
                    for(int k = 0; k < drawablesCount; k++) {
                        if(((ActionMenuItemView)innerView).getCompoundDrawables()[k] != null) {
                            final int finalK = k;

                            //Important to set the color filter in seperate thread, 
                            //by adding it to the message queue
                            //Won't work otherwise. 
                            //Works fine for my case but needs more testing

                            ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);

//                              innerView.post(new Runnable() {
//                                  @Override
//                                  public void run() {
//                                      ((ActionMenuItemView) innerView).getCompoundDrawables()[finalK].setColorFilter(colorFilter);
//                                  }
//                              });
                        }
                    }
                }
            }
        }
    }



}

তারপরে আপনার লেআউট ফাইলটিতে এটি উল্লেখ করুন। এখন আপনি একটি কাস্টম রঙ ব্যবহার করে সেট করতে পারেন

toolbar.setItemColor(Color.Red);

সূত্র:

আমি এখানে এটি করার তথ্য পেয়েছি: অ্যান্ড্রয়েড সরঞ্জামদণ্ডের আইকনগুলির পরিবর্তন কীভাবে করা যায়

এবং তারপরে আমি এটি সম্পাদনা করেছি, এটির উপরে উন্নতি করেছি এবং এটি এখানে পোস্ট করেছি: গিটহাব: অ্যান্ড্রয়েড ডায়নামিকটুলবার আইটেম রঙ


এটি প্রশ্নের উত্তর দেয় না। বিশেষত অংশটি "আমার লক্ষ্যটি হল এই প্রাথমিক রঙটি ব্যবহার করার জন্য অ্যাকশনবার এবং একটি চেকবক্সের মতো সমস্ত উইজেট have "
nhaarman

তারপরে একটি চেকবক্স অন্তর্ভুক্ত করার জন্য কেবল যুক্ত করুন। উদাহরণস্বরূপ, যদি (v উদাহরণস্বরূপ চেকবক্স) {থিমচেক্সনক্সউইথকলার (সরঞ্জামদণ্ড আইকনস কলর) যুক্ত করুন; আমি দেখতে পাচ্ছি না কীভাবে এটি আপনার প্রশ্নের উত্তর সৎভাবে দেয় না
মাইকেল কার্ন

@ নীহারম্যান আপনি এই স্ট্যাকওভারফ্লোয়ের মতো অ্যাকশনবারের রঙটি গতিশীলভাবে সেট করতে পারেন / প্রশ্নগুলি / ২৩70০৮/change/ / চেঞ্জ-অ্যাকশনবার্স-ব্যাকগ্রাউন্ড- কালার- আদর্শভাবে আমি ঠিক আপনার প্রশ্নটি বুঝতে পারি না
মাইকেল কার্ন

আমার একটি অ্যাপ্লিকেশন রয়েছে যেখানে ব্যবহারকারী অ্যাকশনবারের রঙ এবং অ্যাকশনবার আইটেমের রঙ চয়ন করতে পারেন। আপনার আর কী প্রয়োজন তা আমি দেখতে পাচ্ছি না
মাইকেল কার্ন

2
এটি আমার পক্ষে খুব সহায়ক ছিল।
ফায়ারফ্লাই

-6

এটি আপনি যা করতে পারেন:

অঙ্কনযোগ্য ফোল্ডারে একটি ফাইল লিখুন, এর নাম দিন ব্যাকগ্রাউন্ড.এক্সএমএল

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="?attr/colorPrimary"/>
</shape>

তারপরে আপনার লেআউটটি সেট করুন (বা এরপরে যা কিছু হয়) android:background="@drawable/background"

আপনার থিমটি সেট করার সময় এই রঙটি একই উপস্থাপন করবে।

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