অ্যাপকম্প্যাট অ্যাকশনবার্টিভিটি দিয়ে স্ট্যাটাস বারের রঙ পরিবর্তন করুন Change


145

আমার একটি ক্রিয়াকলাপে, আমি ব্যবহার করে সরঞ্জামদণ্ডের রঙ পরিবর্তন করেছি Palette। 5.0 ডিভাইসে রঙটি ব্যবহার ActionBarActivityকরে আমার ক্রিয়াকলাপের থিমটিতে status barআমার রঙ হয় colorPrimaryDarkতাই আমার 2 টি খুব আলাদা রঙ রয়েছে এবং এটি দেখতে ভাল লাগে না।

আমি বুঝতে পারি যে 5.0 এ আপনি ব্যবহার করতে পারেন Window.setStatusBarColor()তবে ActionBarActivityএটি নেই have

সুতরাং আমার প্রশ্ন 5.0 এ আছে আমি কীভাবে স্ট্যাটাস বারের রঙটি পরিবর্তন করতে পারি ActionBarActivity?


আপনি সিস্টেমবার্টিন্ট লাইব ব্যবহার করার চেষ্টা করেছেন? github.com/jgilfelt/SstmBarTint
নিকোলা দেশপোটোস্কি

উত্তর:


419

আমি নিশ্চিত না যে আমি সমস্যাটি বুঝতে পেরেছি।

আমি আপনাকে স্ট্যাটাস বারের রঙ প্রোগ্রামিয়ালি পরিবর্তন করতে চাই (এবং সরবরাহ করলে ডিভাইসে অ্যান্ড্রয়েড 5.0 থাকে) তবে আপনি ব্যবহার করতে পারেন Window.setStatusBarColor()। এটি একটি পার্থক্য কার্যকলাপ থেকে প্রাপ্ত করা হয় কিনা করা উচিত নয় Activityবা ActionBarActivity

শুধু করার চেষ্টা করুন:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.BLUE);
}

ActionBarActivityএটির সাথে এটি পরীক্ষা করা হয়েছে এবং এটি ঠিক কাজ করে।


দ্রষ্টব্য: FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDSআপনার values-v21স্টাইলগুলির ফাইলটি ইতিমধ্যে সেট করা থাকলে প্রোগ্রামটিমেটিকভাবে পতাকাটি সেট করা প্রয়োজন হয় না :

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>

1
আহ ঠিক আছে আমি ব্যবহার getWindow()
করছিলাম না

কোডটি LOLLIPOP পুরানো অ্যান্ড্রয়েডগুলিতে পাওয়া না গেলে এটি ক্রাশ হবে। এটি ব্যবহার করার জন্য সবচেয়ে ভাল> = 21
511788465541441

12
@ কোড578841441 আসলে, এটি হওয়া উচিত নয়। সংকলন করার সময় ধ্রুবকগুলি অন্তর্ভুক্ত থাকে।
matiash

4
@ কোড578841441: এর কারণ আপনি একটি পুরানো এসডিকে সংকলন করছেন। আপনার সর্বদা সর্বশেষতম অ্যান্ড্রয়েড এসডিকে সংকলনের জন্য প্রচেষ্টা করা উচিত , এমনকি আপনার যদি পুরানো এপিআই সংস্করণ সীমাবদ্ধতা থাকে (যেমন minSdkVersionএবং / অথবা উপাদানটিতে targetSdkVersionবৈশিষ্ট্যগুলি <uses-sdk ...>)।
dbm

3
আমাকে getWindow ()। AddFlags (উইন্ডোম্যানেজ। লেআউটপ্যারামস.ফ্ল্যাজ_ড্রাআউআরএসএসওয়াইএসটিএম_বার_ব্যাক কেগ্রোআউন্ডস) কল করতে হয়েছিল; এটি কাজ করতে
ফিলিপ ই

61

স্ট্যাটাস বারের রঙ পরিবর্তন করার বিভিন্ন উপায় রয়েছে।

1) স্টাইল.এক্সএমএল ব্যবহার করা। এটি সহজ তবে স্থিতিশীল উপায়ে করতে আপনি অ্যান্ড্রয়েড: স্ট্যাটাস বারকলার অ্যাট্রিবিউট ব্যবহার করতে পারেন।

দ্রষ্টব্য: আপনি উপাদান থিমের সাথে এই বৈশিষ্ট্যটিও ব্যবহার করতে পারেন।

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

2) আপনি উইন্ডো ক্লাসে সেটস্ট্যাটাসবারারকাল (ইন) পদ্ধতিটি ব্যবহার করে গতিশীলভাবে এটি সম্পন্ন করতে পারেন। তবে মনে রাখবেন যে এই পদ্ধতিটি কেবলমাত্র 21 21 বা ততোধিকের জন্য উপলব্ধ available সুতরাং এটি পরীক্ষা করে দেখুন বা আপনার অ্যাপ্লিকেশন অবশ্যই নিম্ন ডিভাইসে ক্রাশ হবে cra

এই পদ্ধতির একটি কার্যকারী উদাহরণ এখানে।

if (Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}

যেখানে প্রাথমিক অ্যাপ্লিকেশনটি আমি আমার অ্যাপ্লিকেশনটিতে ব্যবহার করছি সেই প্রাথমিক রঙের 700 টি রঙ। আপনি color.xml ফাইলে এই রঙটি সংজ্ঞায়িত করতে পারেন।

একবার চেষ্টা করে দেখুন এবং যদি আপনার কোন প্রশ্ন থাকে তবে আমাকে জানান। আশা করি এটা সাহায্য করবে.


এটি উইন্ডো.ক্লিয়ারফ্ল্যাগস (উইন্ডো ম্যানেজ। লেআউটপ্যারামস.এফএলএইচ_TRANSLUCENT_STATUS) এর মতো দেখাচ্ছে; প্রয়োজন নেই - তবে এটি আমার জন্য কাজ করেছে
বুকুরজিয়াস

প্রোগ্রামেটিক সংস্করণে কাজ করবে এমন কোনও ধারণা তবে শৈলী সংস্করণটি কাজ করে না?
অ্যান্ড্রু

আমার ক্ষেত্রে ক্রিয়াকলাপের স্টাইলে ফ্লাহা ট্রান্সলুসেন্ট_স্ট্যাটাস সেট ছিল, সুতরাং উইন্ডো.ক্লিয়ারফ্ল্যাগস কমান্ড ব্যতীত এটি কাজ করে না। সুতরাং এর জন্য আপনাকে ধন্যবাদ!
বিএমেসিডো

কি শান্তি! এটি উত্তর গ্রহণ করা উচিত, clearFlagsআমার সমস্যা সমাধান করুন
ফ্যানজ্যাবাইদ

9

আমি মনে করি না স্ট্যাটাস বারের রঙটি এখনও অ্যাপকম্পটে প্রয়োগ করা হয়েছে। এটি উপলব্ধ বৈশিষ্ট্য যা:

    <!-- ============= -->
    <!-- Color palette -->
    <!-- ============= -->

    <!-- The primary branding color for the app. By default, this is the color applied to the
         action bar background. -->
    <attr name="colorPrimary" format="color" />

    <!-- Dark variant of the primary branding color. By default, this is the color applied to
         the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
    <attr name="colorPrimaryDark" format="color" />

    <!-- Bright complement to the primary branding color. By default, this is the color applied
         to framework controls (via colorControlActivated). -->
    <attr name="colorAccent" format="color" />

    <!-- The color applied to framework controls in their normal state. -->
    <attr name="colorControlNormal" format="color" />

    <!-- The color applied to framework controls in their activated (ex. checked) state. -->
    <attr name="colorControlActivated" format="color" />

    <!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
    <attr name="colorControlHighlight" format="color" />

    <!-- The color applied to framework buttons in their normal state. -->
    <attr name="colorButtonNormal" format="color" />

    <!-- The color applied to framework switch thumbs in their normal state. -->
    <attr name="colorSwitchThumbNormal" format="color" />

( \ এসডিকে \ অতিরিক্তগুলি \ অ্যান্ড্রয়েড \ সমর্থন \ v7 \ অ্যাপকম্প্যাট \ রেজ \ মানগুলি \ attrs.xML থেকে )


1
এটি সম্ভব যে পুরানো ওএস সংস্করণগুলি স্থিতি দণ্ডটি সংশোধন করার কোনও ক্ষমতা না দিলে এটি অ্যাপকম্পটে কখনও প্রয়োগ করা হবে না।
TheIT

2
<অ্যাট্রির নাম = "colorPrimaryDark" ফর্ম্যাট = "রঙ" /> <! - প্রাথমিক ব্র্যান্ডিং রঙের অন্ধকার বৈকল্পিক। ডিফল্টরূপে, এটি স্ট্যাটাস বারে (স্ট্যাটাস বারকলার মাধ্যমে) এবং নেভিগেশন বারে (নেভিগেশনবারকলরের মাধ্যমে) প্রয়োগ করা রঙ। ->
সোহেল সেতায়েশি

3

এটি ব্যবহার করে দেখুন, আমি এটি ব্যবহার করেছি এবং এটি v21 এর সাথে খুব ভাল কাজ করে।

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimaryDark">@color/blue</item>
</style>

1

Xamarin.android এমভিভিএমক্রস অ্যাপ্লিকেশনটির জন্য নির্দিষ্ট গবেষণা ও ডি-র পরে, তাদের সহায়তায় উপরের উত্তরের জন্য ধন্যবাদ

পদ্ধতি অনক্রিটে ক্রিয়াকলাপের জন্য নির্দিষ্ট ফ্ল্যাগ

protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
    }

প্রতিটি এমভিএক্সএকটিভিটির জন্য, থিমটি নীচে হিসাবে উল্লেখ করা হয়েছে

 [Activity(
    LaunchMode = LaunchMode.SingleTop,
    ScreenOrientation = ScreenOrientation.Portrait,
    Theme = "@style/Theme.Splash",
    Name = "MyView"
    )]

আমার স্প্ল্যাশস্টাইল.এক্সএমএল নীচের মত দেখাচ্ছে

<?xml version="1.0" encoding="utf-8"?>
<resources> 
    <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
          <item name="android:statusBarColor">@color/app_red</item>
          <item name="android:colorPrimaryDark">@color/app_red</item>
    </style>
 </resources>

এবং আমার কাছে ভি 7 অ্যাপকম্প্যাক্ট উল্লেখ করা হয়েছে।


1

[কোটলিন সংস্করণ] আমি এই এক্সটেনশনটি তৈরি করেছি যা ব্যাটারি স্ট্যাটাস আইকন, ঘড়ি ইত্যাদির মতো সিস্টেম ইউআই লুকানোর জন্য পছন্দসই রঙের যথেষ্ট বৈসাদৃশ্য রয়েছে কিনা তাও পরীক্ষা করে দেখি আমরা সিস্টেম ইউআইটিকে সাদা বা কালো এটি অনুসারে সেট করি।

fun Activity.coloredStatusBarMode(@ColorInt color: Int = Color.WHITE, lightSystemUI: Boolean? = null) {
    var flags: Int = window.decorView.systemUiVisibility // get current flags
    var systemLightUIFlag = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
    var setSystemUILight = lightSystemUI

    if (setSystemUILight == null) {
        // Automatically check if the desired status bar is dark or light
        setSystemUILight = ColorUtils.calculateLuminance(color) < 0.5
    }

    flags = if (setSystemUILight) {
        // Set System UI Light (Battery Status Icon, Clock, etc)
        removeFlag(flags, systemLightUIFlag)
    } else {
        // Set System UI Dark (Battery Status Icon, Clock, etc)
        addFlag(flags, systemLightUIFlag)
    }

    window.decorView.systemUiVisibility = flags
    window.statusBarColor = color
}

private fun containsFlag(flags: Int, flagToCheck: Int) = (flags and flagToCheck) != 0

private fun addFlag(flags: Int, flagToAdd: Int): Int {
    return if (!containsFlag(flags, flagToAdd)) {
        flags or flagToAdd
    } else {
        flags
    }
}

private fun removeFlag(flags: Int, flagToRemove: Int): Int {
    return if (containsFlag(flags, flagToRemove)) {
        flags and flagToRemove.inv()
    } else {
        flags
    }
}

0

প্রয়োগ করা হচ্ছে

    <item name="android:statusBarColor">@color/color_primary_dark</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>

মধ্যে Theme.AppCompat.Light.DarkActionBarআমার জন্য কাজ করে নি। কৌতুকটি কী ছিল, স্টাইলস.এক্সএমএল colorPrimaryDarkসহ যথারীতি প্রদানandroid:colorPrimary

<item name="android:colorAccent">@color/color_primary</item>
<item name="android:colorPrimary">@color/color_primary</item>
<item name="android:colorPrimaryDark">@color/color_primary_dark</item>

এবং সেটিং এ

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    Window window = this.Window;
                    Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
                }

কোডে স্ট্যাটাসবারের রঙ সেট করতে হয়নি।

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