ললিপপ: স্বচ্ছতে সেট করা রঙের সাথে স্ট্যাটাস বারের পিছনে আঁকুন


142

আমি আমার থিমের নীচের লাইনটি দিয়ে ললিপপের জন্য আমার স্ট্যাটাস বারের রঙটি স্বচ্ছ হিসাবে সেট করেছি:

<item name="android:statusBarColor">@android:color/transparent</item>

এখন আমার এটির পিছনে আঁকতে হবে তবে আমি এর পিছনে কোনও ভিউ ড্র করতে পারি না। windowTranslucentStatusসম্পত্তি সহ এটি কীভাবে করা যায় তা আমি জানি তবে এই সম্পত্তিটি ব্যবহার করতে চাই না কারণ এটি স্থিতি বারের রঙটিকে স্বচ্ছ হিসাবে সেট করে উপেক্ষা করবে।


2
আপনি এছাড়াও ব্যবহার করতে পারেনandroid:fitsSystemWindows="true"
Aznix

উত্তর:


385

পদ্ধতি # 1:

সম্পূর্ণ স্বচ্ছ স্ট্যাটাস বারটি অর্জন করতে, আপনাকে ব্যবহার করতে হবে statusBarColor, যা কেবলমাত্র 21 এবং তারপরের উপরে উপলব্ধ। windowTranslucentStatusএপিআই 19 এবং তারপরের উপরে উপলব্ধ, তবে এটি স্ট্যাটাস বারের জন্য একটি রঙিন পটভূমি যুক্ত করে। যাইহোক, সেটিংটি windowTranslucentStatusএমন একটি জিনিস অর্জন করে যা স্বচ্ছতে পরিবর্তিত statusBarColorহয় না: এটি পতাকা SYSTEM_UI_FLAG_LAYOUT_STABLE এবং SYSTEM_UI_FLAG_LAYOUT_FULLSCREENপতাকা সেট করে । একই প্রভাবটি পাওয়ার সহজতম উপায় হ'ল এই পতাকাগুলি ম্যানুয়ালি সেট করা, যা অ্যান্ড্রয়েড লেআউট সিস্টেম দ্বারা আরোপিত ইনসেটগুলি কার্যকরভাবে অক্ষম করে এবং আপনাকে নিজের প্রতিরোধের জন্য ছেড়ে দেয়।

আপনি আপনার onCreateপদ্ধতিতে এই লাইনটি কল করুন :

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

/Res/values-v21/styles.xml এ স্বচ্ছতা সেট করতে ভুলবেন না:

<item name="android:statusBarColor">@android:color/transparent</item>

বা স্বচ্ছতা প্রোগ্রামক্রমে সেট করুন:

getWindow().setStatusBarColor(Color.TRANSPARENT);

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

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

পদ্ধতি # 2:

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

পদ্ধতি # 3:

আপনি যদি অন্য বিন্যাসে কাজ করার সময় কিছু লেআউটগুলির জন্য স্ট্যান্ডার্ড সিস্টেম ইনসেটগুলি উপেক্ষা করতে পারেন তবে এটি করার একমাত্র কার্যকর উপায় হ'ল প্রায়শই সংযুক্ত ScrimInsetsFrameLayoutশ্রেণীর সাথে কাজ করা । অবশ্যই, এই শ্রেণিতে করা কিছু জিনিস সমস্ত পরিস্থিতিতে প্রয়োজনীয় নয়। উদাহরণস্বরূপ, যদি আপনি সিন্থেটিক স্ট্যাটাস বার ওভারলে ব্যবহার করার পরিকল্পনা না করেন তবে কেবল init()পদ্ধতিটিতে সমস্ত কিছু মন্তব্য করুন এবং অ্যাটর্স.এক্সএমএল ফাইলটিতে কোনও কিছু যুক্ত করার ঝামেলা করবেন না। আমি এই পদ্ধতির কাজটি দেখেছি, তবে আমি মনে করি আপনি এটি খুঁজে পেতে পারেন যে এটি কিছু অন্যান্য প্রভাব নিয়ে আসে যা প্রায়শই পেতে অনেক কাজ হতে পারে।

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


9
অনেক অনেক ধন্যবাদ, পতাকা SYSTEM_UI_FLAG_LAYOUT_STABLEএবং SYSTEM_UI_FLAG_LAYOUT_FULLSCREENপতাকাগুলি নির্ধারণ করাই আমি যে সমাধানটি খুঁজছিলাম।
alxscms

3
আমি আপনার প্রথম সমাধানটি এক মাসের জন্য অনুসন্ধান করেছি। ধন্যবাদ!
নিওক্রি

1
ওহে. আপনার কোড পুরোপুরি সূক্ষ্ম কাজ করে। তবে আমি যখন খণ্ডটি প্রস্থান করব, কীভাবে আমার রোলব্যাক পরিবর্তন হবে?
TheOnlyAnil

3
এটি CollapsingToolbarLayoutএবং এর সাথে কাজ করে না Toolbar: স্ট্যাটাস বার পুরোপুরি স্বচ্ছ নয় এবং android:statusBarColorকোনও প্রভাব ফেলবে না
কনস্ট্যান্টিন কনোপকো

ধন্যবাদ। তারপরে আপনি যদি কোনও সম্পূর্ণ-স্ক্রীন অ্যাক্টিভিটিতে ফিরে যেতে চান তবে বিকাশকারী.সমনোবাইল / জ্ঞান- বেস / টিউটোরিয়ালগুলি পড়ুন …
কুলমাইন্ড

43

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


// Create/Set toolbar as actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// Check if the version of Android is Lollipop or higher
if (Build.VERSION.SDK_INT >= 21) {

    // Set the status bar to dark-semi-transparentish
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
            WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

    // Set paddingTop of toolbar to height of status bar.
    // Fixes statusbar covers toolbar issue
    toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
}

// A method to find height of the status bar
public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

স্ট্যাটাস বারগুলির সাথে কাজ করার বিষয়ে আরও তথ্যের জন্য: youtube.com/watch?v=_mGDMVRO3iE



@ দ্য অ্যানিল একটি নির্দিষ্ট সরঞ্জামদণ্ডের উচ্চতা নির্ধারণ করুন :) "56 ডিপি" বা তাই ভাল দেখতে হবে
মাইকেল

4
স্ট্যাটাস বারের উচ্চতা এর মতো পাওয়া সম্পূর্ণ অসমর্থিত, অনাবৃত, এবং ভবিষ্যতের সংস্করণগুলিতে অবশ্যই ভেঙে যায়। পরিবর্তে ফিটসিসটেম উইন্ডোজ = "সত্য" ব্যবহার করুন।
গ্রেগ এনিস 13

1
ঠিক আছে আমি এটি করছি কারণ কখনও কখনও আপনার শুধু করতে হবে।
গ্রেগ এনিস

2
ক্রিস ব্যানসের (গুগল ইঞ্জিনিয়ার) এই আলাপে এটি একটি খুব খারাপ ধারণা: youtube.com/watch?v=_mGDMVRO3iE
মার্টিন মার্কনকিনি

1
@ মিশেল এফডাব্লুআইডাব্লু, আমি অতীতে এটি করেছি এবং উইন্ডো ইনসেটস এপিআই (পদ্ধতি) এটি করার জন্য "এটি সম্পর্কে সহজ চিন্তাভাবনা করে আমাদের হওয়া উচিত", তবে এটি নয়, এটি একটি খোঁড়া অপদার্থ এপিআই যা যুক্ত করে অপ্রয়োজনীয় ওভারহেড প্রচুর গুগল সর্বদা 80% সম্পূর্ণ এবং সর্বশেষ 20% ডেভগুলিকে ছেড়ে দেয় ... যারা এটি না হওয়া পর্যন্ত সমস্ত উপায় হ্যাক করে। ¯_ (ツ) _ / ¯
মার্টিন মার্কনচিনি

21

এই থিম চেষ্টা করুন

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@android:color/transparent</item>
    <item name="colorPrimary">@color/md_blue_200</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

আপনার লেআউট সেট যে নিশ্চিত হন

android:fitsSystemWindows="false"

4
android:fitsSystemWindows="false"অর্ধেক সরঞ্জাম সেটিং কাটা হয়।
হামাদ নাসির

16

পরিবর্তে

<item name="android:statusBarColor">@android:color/transparent</item>

নিম্নলিখিত ব্যবহার:

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

এবং আপনার 'মেইনএকটিভিটি' লেআউটে শীর্ষ প্যাডিং (যা ডিফল্টরূপে যুক্ত হয়) মুছে ফেলার বিষয়টি নিশ্চিত করুন।

মনে রাখবেন যে এটি স্ট্যাটাস বারটিকে পুরোপুরি স্বচ্ছ করে তোলে না এবং এখনও আপনার স্ট্যাটাস বারের উপরে "বিবর্ণ কালো" ওভারলে থাকবে।


2
ব্যবহার করার সময় <item name="android:windowTranslucentStatus">true</item>, এটি অ্যান্ড্রয়েডকে স্থিতি দণ্ডের নীচে একটি বিবর্ণ কালো পটভূমি রাখে যা আমি যা খুঁজছি তা নয়। এই কালো বিবর্ণ পটভূমি না থাকলেও কোনও উপায়?
alxscms

1
আমি অনেকগুলি চেষ্টা করেছি, তবে বিবর্ণ কালো পটভূমি সরিয়ে দেওয়ার কোনও উপায় আমি খুঁজে পাচ্ছি না। সুতরাং অ্যান্ড্রয়েডে এটি সম্ভব নয় (এমনকি স্ক্রিমলাউট দিয়েও নয়) এই বলে আমি আমার গবেষণাটি শেষ করছি। এই ধরণের অর্থ উপলব্ধি করে, কারণ এটি সর্বদা আপনার স্থিতি দণ্ডের যথাযথ পাঠযোগ্যতা নিশ্চিত করে। আমি আমার উত্তর উপরে আপডেট করব।
জেরোইন মলস 15'15

আমি মনে করি এটির পিছনে আঁকতে সক্ষম না হয়ে স্ট্যাটাস বারে স্বচ্ছ রঙ লাগাতে সক্ষম হওয়া খুব অদ্ভুত হবে। আমি বুঝতে পেরেছি কেন আপনি বলছেন যে এটি বোঝা যায় যে আপনি এই কালো বিবর্ণ পটভূমিটি সরাতে পারবেন না, তবে স্থিতি বারের আইকনটি দৃশ্যমান রাখতে যথেষ্ট সতর্কতা অবলম্বন করা এতটা কঠিন নয়। এখানে অ্যান্ড্রয়েড পুলিশের একটি নিবন্ধ এখানে স্বচ্ছ স্ট্যাটাস বারের ব্যবহার দেখায় androidpolice.com/2014/07/04/… । আমি লেখকের সাথে যোগাযোগ করার চেষ্টা করব।
alxscms

1
আশা করি আপনি তাঁর সাথে যোগাযোগ করতে পারেন। আমি এটি করার ক্ষেত্রেও খুব আগ্রহী হচ্ছি :)
জেরোইন মোলস

গ্রেট! আমার উত্তর আপডেটও।
জেরোইন মলস 20'15 'র

9

কোডি টমবসের সমাধান প্রায় আমার জন্য কৌশলটি করেছে। আমি নিশ্চিত যে এটি জামারিন সম্পর্কিত কিনা , তবে আমার এখন একটি গ্রহণযোগ্য সমাধান রয়েছে:

উদাহরণ

এটি আমার সেটআপ:

আমার কাছে একটি অ্যান্ড্রয়েড প্রকল্প রয়েছে যেখানে আমি অ্যান্ড্রয়েডকে সমর্থন করেছি S সমর্থন v4 এবং v7 প্যাকেজগুলি। আমার দুটি স্টাইল সংজ্ঞায়িত হয়েছে:

মান / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

মান-v21 / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

অ্যান্ড্রয়েড ম্যানিফেস্ট লক্ষ্য করে "মাই স্টাইল":

Andro আইডি:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.agn.test.test">
    <uses-sdk android:minSdkVersion="10" />
    <application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:theme="@style/MyStyle">
    </application>
</manifest>

এবং অবশেষে মূল ক্রিয়াকলাপে কোড:

[Activity (Label = "Test", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);

        SetContentView (Resource.Layout.Main);
        //Resource.Layout.Main is just a regular layout, no additional flags. Make sure there is something in there like an imageView, so that you can see the overlay.

        var uiOptions = (int)Window.DecorView.SystemUiVisibility;
        uiOptions ^= (int)SystemUiFlags.LayoutStable;
        uiOptions ^= (int)SystemUiFlags.LayoutFullscreen;
        Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;

        Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds);
    }
}

লক্ষ্য করুন যে আমি ড্রসসিস্টেমবারব্যাকগ্রাউন্ড ফ্ল্যাগ সেট করেছি, এটি সমস্ত পার্থক্য তৈরি করে

Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds); 

আমি এটি সঠিকভাবে পেতে অনেক সময় ব্যয় করেছি, বাস্তবে খুব বেশি সময়। আশা করি এই উত্তরটি যে কেউ একই জিনিস অর্জনের চেষ্টা করছে তাদের সহায়তা করবে।


1
android:windowTranslucentStatusএপিআই লেভেল 19 বা ততোধিক প্রয়োজন , এটি android:minSdkVersion10 টির মধ্যে থাকা অবস্থায় আপনি কীভাবে এটি আপনার মান / স্টাইল.এক্সএমএল ব্যবহার করছেন তা সম্ভব ?
mradzinski

7

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

এখানে কোটলিন কোড স্নিপেট রয়েছে:

if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true)
}

if (Build.VERSION.SDK_INT >= 19) {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}

if (Build.VERSION.SDK_INT >= 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
    getWindow().setStatusBarColor(Color.TRANSPARENT)
}

private fun setWindowFlag(activity: Activity, bits: Int, on: Boolean) {

    val win: Window = activity.getWindow()

    val winParams: WindowManager.LayoutParams = win.getAttributes()
    if (on) {
        winParams.flags = winParams.flags or bits
    } else {
        winParams.flags = winParams.flags and bits.inv()
    }
    win.setAttributes(winParams)
}

আপনারও যোগ করতে হবে

android:fitsSystemWindows="false"

আপনার বিন্যাসের মূল দৃশ্য।


3

আমার একই সমস্যা ছিল তাই আমি চিত্রকল্পটি তৈরি করি যা স্ট্যাটাস বারের এপিআই 19+ এর পিছনে আঁকতে পারে

স্থিতি দণ্ড gist.github.com এর পিছনে কাস্টম চিত্র সেট করুন

public static void setTransparent(Activity activity, int imageRes) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        return;
    }
    // set flags
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
    } else {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

    // get root content of system window
    //ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
    // rootView.setFitsSystemWindows(true);
    // rootView.setClipToPadding(true);

    ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
    if (contentView.getChildCount() > 1) {
        contentView.removeViewAt(1);
    }

    // get status bar height
    int res = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
    int height = 0;
    if (res != 0)
        height = activity.getResources().getDimensionPixelSize(res);

    // create new imageview and set resource id
    ImageView image = new ImageView(activity);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height);
    image.setLayoutParams(params);
    image.setImageResource(imageRes);
    image.setScaleType(ScaleType.MATRIX);

    // add image view to content view
    contentView.addView(image);
    // rootView.setFitsSystemWindows(true);

}

2

আপনি স্ক্রিমআইনেসেট ফ্রেমলয়আউট ব্যবহার করতে পারেন

https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java

অ্যান্ড্রয়েড: ফিটসিসটেম উইন্ডোস = "সত্য" স্ক্রিম লেআউটে সেট করা উচিত!


আমি যে ক্লাসটি দেখেছি তবে আমি যদি একটি RelativeLayoutপরিবর্তে একটি ব্যবহার করতে চাই তবে কী হবে FrameLayout?
alxscms

3
ফ্রেমলেটের অভ্যন্তরে আপেক্ষিক বিন্যাস ব্যবহার করুন।
মুর্তজা খুরশীদ হুসেন

2
বিন্যাসে
বাসা বাঁধাই

1
অ্যাপ্লিকেশন কর্মক্ষমতা বিভিন্ন বিষয়ের উপর নির্ভর করে যা পরিবর্তিত হতে পারে। যদি আপনার কোন উপায় না থাকে তবে চেষ্টা করুন। ভাগ্যের সেরা
মুর্তজা খুরশীদ হুসেন

আপনি যা বলতে চাইছেন তা আমি পেয়েছি তবে অন্য একটি সমাধান অবশ্যই হবে, যদি না হয় তবে এই কাস্টম ফ্রেম বিন্যাসে কী কার্যকর হয়েছে তা কোনও লেআউটে প্রয়োগ করার উপায় থাকতে পারে। তবে যেকোন
উপায়েই

1

পোস্ট করা কয়েকটি সমাধানের মতো, তবে আমার ক্ষেত্রে আমি স্ট্যাটাস বারটি স্বচ্ছ করেছিলাম এবং কিছু নেতিবাচক মার্জিন সহ অ্যাকশন বারের অবস্থানটি ঠিক করেছি

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().setStatusBarColor(Color.TRANSPARENT);
    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) toolbar.getLayoutParams();
    lp.setMargins(0, -getStatusBarHeight(), 0, 0);
}

এবং আমি সরঞ্জামদণ্ড এবং রুট ভিউতে ব্যবহার করেছি

android:fitsSystemWindows="true"

1
getStatusBarHeight () মান নয়
রোয়েল

এই পদ্ধতিটি @ মাইক-মিল্লা থেকে সমাধানের জন্য প্রয়োগ করা হয়েছে ... পাবলিক ইন্ট getStatusBarHeight () {int ফলাফল = 0; ইন্টো রিসোর্সআইডি = get রিসোর্স ()। getIdentifier ("স্ট্যাটাস_বার_হাইট", "ডাইমড", "অ্যান্ড্রয়েড"); যদি (রিসোর্সআইডি> 0) {ফলাফল = getRes উত্স ()। getDimesionPixelSize (রিসোর্সআইডি); } রিটার্ন ফলাফল; }
জেগুমি

ধন্যবাদ। আমি এটি করেছি: অ্যাপবারআলআউট.লায়আউটপ্যারামস এলপি = (অ্যাপবারআলআউট.লায়আউটপ্যারামস) সরঞ্জামদণ্ড.সেটলয়আউটপ্যারামস (); lp.topMargin + = getStatusBarHeight ();
কুলমাইন্ড

1

@ লাবির একটি ভাল গ্রন্থাগার রয়েছে যা স্ট্যাটাসবারে চিত্রটি সহজেই আঁকতে সহায়তা করে।

শুধু আপনার যোগ করুন build.gradle:

compile 'com.jaeger.statusbarutil:library:1.4.0'

তারপরে অ্যাক্টিভিটি সেটে

StatusBarUtil.setTranslucentForImageView(Activity activity, int statusBarAlpha, View viewNeedOffset)

বিন্যাসে

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <ImageView
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:adjustViewBounds="true"
        android:layout_height="wrap_content"
        android:src="@drawable/toolbar_bg"/>

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/view_need_offset"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@android:color/transparent"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

        <!-- Your layout code -->
    </android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

আরও তথ্যের জন্য গিথুব পৃষ্ঠা থেকে ডেমো বা ক্লোন ডাউনলোড করুন এবং সমস্ত বৈশিষ্ট্য সহ খেলুন।

দ্রষ্টব্য: কিটকাট এবং উপরের সমর্থন করুন।

আশা করি যে অন্য কাউকে সাহায্য করবে!


0

অ্যান্ড্রয়েড স্টুডিও ১.৪ সহ, বয়লার প্লেট কোড সহ টেম্পলেট প্রকল্পটি Overlayআপনার অ্যাপবারলআউট এবং / অথবা সরঞ্জামদণ্ডে থিম সেট করে। এগুলি fitSystemWindowঅ্যাট্রিবিউট = ট্রুথ দিয়ে স্ট্যাটাস বারের পিছনে রেন্ডার করার জন্যও সেট করা আছে । এটি কেবলমাত্র সরঞ্জামদণ্ডকে সরাসরি স্ট্যাটাস বারের নীচে রেন্ডার করতে পারে এবং সমস্ত কিছু সরঞ্জামদণ্ডের নীচে রেন্ডার করা হবে। সুতরাং উপরে প্রদত্ত সমাধানগুলি তাদের নিজস্বভাবে কাজ করবে না। আপনাকে নিম্নলিখিত পরিবর্তনগুলি করতে হবে।

  • ওভারলে থিমটি সরান বা সরঞ্জামদণ্ডের জন্য এটি ওভারলে থিমে পরিবর্তন করুন।
  • আপনার স্টাইল -21.xML ফাইলটিতে নিম্নলিখিত কোডটি রাখুন ।

    @android: রঙ / স্বচ্ছ

  • অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইলে নেভিগেশন ড্রয়ারযুক্ত ক্রিয়াকলাপে এই থিমটি বরাদ্দ করুন।

এটি নেভিগেশন ড্রয়ারকে স্বচ্ছ স্থিতি বারের পিছনে রেন্ডার করে তুলবে।


0

আপনাকে যা করতে হবে তা হ'ল আপনার থিমটিতে এই বৈশিষ্ট্যগুলি সেট করা

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

1
আমি নিশ্চিত যে এটি আপনার লেআউটটিকে ইউআই নেভিগেশন বোতামের (অন-স্ক্রিন নেভিগেশন সহ ডিভাইস) নীচে ফেলে দেবে pretty এটি নীচে নেভিগেশন
ভিউটিকে

0

গৃহীত উত্তরটি একটি কলসিংটুলবারলআউট ব্যবহার করে আমার পক্ষে কাজ করেছে। যদিও এটি লক্ষ করা গুরুত্বপূর্ণ, এটি setSytstemUiVisibility()সেই ফাংশনে আগের কোনও কলকে ওভাররাইড করে। তাই আপনি যদি একই দৃশ্যের জন্য অন্য কোথাও যে ফাংশন ব্যবহার করছেন, তাহলে আপনি অন্তর্ভুক্ত করতে হবে View.SYSTEM_UI_FLAG_LAYOUT_STABLEএবং View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREENপতাকা, অথবা তারা নতুন কলের মাধ্যমে ওভাররাইড হবে।

এটি আমার ক্ষেত্রে ছিল এবং আমি যখন দুটি জায়গায় ফোন করছিলাম তখন আমি দুটি পতাকা যুক্ত করলে setSystemUiVisibility(), গৃহীত উত্তরটি পুরোপুরি কার্যকর হয়েছিল worked


0

আমি এখানে আরও কিছু তথ্য যুক্ত করা হবে। সর্বশেষতম অ্যান্ড্রয়েড বিকাশ স্ট্যাটাস বারে অনেকগুলি কেস পরিচালনা করা বেশ সহজ করে তুলেছে। নিম্নলিখিত থেকে আমার পর্যবেক্ষণ নীচেstyles.xml

  1. পটভূমির রঙ : এসডিকে 21+ এর জন্য, প্রচুর উত্তর হিসাবে উল্লেখ করা হয়েছে, <item name="android:windowTranslucentStatus">true</item> স্ট্যাটাস বারটি স্বচ্ছ করে তুলবে এবং ইউআইয়ের সামনে প্রদর্শিত হবে। আপনার ক্রিয়াকলাপ উপরের পুরো স্থানটি নিয়ে যাবে।
  2. পটভূমির রঙ : আবার, SDK 21+ এর জন্য, <item name="android:statusBarColor">@color/your_color</item>অন্য কোনও কিছু প্রভাবিত না করে কেবল আপনার স্ট্যাটাস বারে একটি রঙ দেবে।

  3. তবে, পরবর্তী ডিভাইসে (অ্যান্ড্রয়েড এম / +), আইকনগুলি বিভিন্ন শেডে আসতে শুরু করে। আপনি যদি ফোল্ডারে নিজের styles.xmlফাইলটিকে ওভাররাইড করে values-23যোগ করেন তবে ওএস SDK 23 / + এর জন্য আইকনগুলিকে ধূসর রঙের গা shade় ছায়া দিতে পারে <item name="android:windowLightStatusBar">true</item>
    এইভাবে, আপনি আপনার ব্যবহারকারীকে আরও দৃশ্যমান স্থিতি দণ্ড সরবরাহ করবেন, যদি আপনার স্ট্যাটাস বারের হালকা রঙ থাকে (ভেবে দেখুন কীভাবে অনেকগুলি গুগল অ্যাপ্লিকেশন হালকা ব্যাকগ্রাউন্ড রয়েছে তবে আইকনগুলি ধূসর বর্ণে দৃশ্যমান রয়েছে)।
    আমি আপনাকে এটি ব্যবহার করার পরামর্শ দিচ্ছি, যদি আপনি পয়েন্ট # 2 এর মাধ্যমে আপনার স্ট্যাটাস বারে রঙ দিচ্ছেন

  4. সর্বাধিক সাম্প্রতিক ডিভাইসে, SDK 29 / + সিস্টেম ব্যাপী হালকা এবং গা dark় থিম নিয়ে আসে যা ব্যবহারকারীর দ্বারা নিয়ন্ত্রণযোগ্য। ডেভস হিসাবে, values-nightব্যবহারকারীকে 2 টি ভিন্ন অভিজ্ঞতা দেওয়ার জন্য আমাদের একটি নতুন ফোল্ডারে আমাদের স্টাইল ফাইলকে ওভাররাইড করার কথা রয়েছে ।
    এখানে আবারও, আমি "2 বারের পটভূমির রঙের পটভূমিতে রঙ সরবরাহ" করতে কার্যকর পয়েন্ট # 2 পেয়েছি। কিন্তু সিস্টেমটি আমার অ্যাপ্লিকেশনটির জন্য স্ট্যাটাস বার আইকনের রঙ পরিবর্তন করছে না। যেহেতু আমার দিনের স্টাইলের সংস্করণটি হালকা থিমের সমন্বয়ে গঠিত, এর অর্থ হল যে ব্যবহারকারীরা কম দৃশ্যমানতায় ভুগবেন (হালকা পটভূমিতে সাদা আইকন)
    এই সমস্যাটি সমাধান করা যেতে পারে পয়েন্ট # 3 পদ্ধতির সাহায্যে বা values-29ফোল্ডারে স্টাইল ফাইলকে ওভাররাইড করে এবং আরও নতুন ব্যবহার করে API <item name="android:enforceStatusBarContrast">true</item>। আপনার পটভূমির রঙ খুব হালকা হলে এটি স্বয়ংক্রিয়ভাবে আইকনগুলিতে ধূসর বর্ণকে কার্যকর করবে।


-1

এটি সম্পাদন করতে আমি যে থিমটি ব্যবহার করি তা এখানে:

<style name="AppTheme" parent="@android:style/Theme.NoTitleBar">

    <!-- Default Background Screen -->
    <item name="android:background">@color/default_blue</item>
    <item name="android:windowTranslucentStatus">true</item>

</style>

1
কিছু অদ্ভুত ডাউনভোটার রয়েছে। এমনকি যদি কোনও সমাধান আপনার এবং অন্য কারও কাছে সঠিক ছিল, তারা অন্য উত্তরে যাওয়ার পরিবর্তে নীচে নামবে।
কুলমাইন্ড

আমি যা চাইছি তার একটি ব্যাখ্যা। আমি মনে করি না যে লোকেরা কোনও ব্যাখ্যা ছাড়াই ডাউনভোট করতে সক্ষম হবে।
ড্রড ক্রিস

আমিও তাই ভাবতেছি.
কুলমাইন্ড

আমি ব্যাখ্যা করব ব্যাকগ্রাউন্ড বিকল্পটি এই বান্ডলে সঠিকভাবে কাজ করে না। দয়া করে আপনার উত্তরটি সংশোধন করুন।
মোরোজভ

হুমম ... অ্যান্ড্রয়েডের কোন সংস্করণ আপনি এটি করছেন? আমি এই কনফিগারেশনটি অ্যান্ড্রয়েড এম-এ ব্যবহার করছি
ড্রয়েড ক্রিস

-3

সঠিক সমাধানটি হল আপনার ক্রিয়াকলাপের অধীনে XML এ থাকা কোনও সম্পত্তিটিকে নীচের শৈলীতে পরিবর্তন করা। এটা ঠিক কাজ করে

  android:theme="@style/Theme.AppCompat.Light.NoActionBar"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.