অ্যান্ড্রয়েড সম্পূর্ণ স্বচ্ছ স্ট্যাটাস বার?


184

আমি ডকুমেন্টেশন সন্ধান করেছি কিন্তু এটি কেবল পেয়েছি: লিঙ্ক । কোনটি বারটি স্বচ্ছ হতে ব্যবহৃত হয় ? আমি যা করার চেষ্টা করছি তা হ'ল স্ট্যাটাস বারটি সম্পূর্ণ স্বচ্ছ করা (নীচের চিত্রের মতো দেখানো হয়েছে) এবং এটি এপিএ <<19 এর জন্য পিছনের দিকে সামঞ্জস্যপূর্ণ করা: এখানে চিত্র বর্ণনা লিখুন

আমার স্টাইল.এক্সএমএল:

<resources xmlns:tools="http://schemas.android.com/tools">

  <style name="AppTheme" parent="Theme.AppCompat.Light">
  <item name="android:actionBarStyle">@style/ThemeActionBar</item>
  <item name="android:windowActionBarOverlay">true</item>
  <!-- Support library compatibility -->
  <item name="actionBarStyle">@style/ThemeActionBar</item>
  <item name="windowActionBarOverlay">true</item>
  </style>

  <style name="ThemeActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid">
  <item name="android:background"> @null </item>
  <!-- Support library compatibility -->
  <item name="background">@null</item>
  <item name="android:displayOptions"> showHome | useLogo</item>
  <item name="displayOptions">showHome|useLogo</item>

  </style>

</resources>

আমি যা করতে পেরেছি:

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

উত্তর:


369

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

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

আপনার ক্রিয়াকলাপ / ধারক বিন্যাসের জন্য আপনি একটি স্বচ্ছ স্থিতি বার চান এই সম্পত্তি সেটটি প্রয়োজন:

android:fitsSystemWindows="true"

প্রাক-Kitkat এ নিশ্চিতভাবে এটি সম্পাদন করা সম্ভব হয় না, দেখে মনে হচ্ছে আপনি এটি করতে পারেন তবে কিছু অদ্ভুত কোড এটিকে তা করে

সম্পাদনা: আমি এই লিবিবটি সুপারিশ করব: প্রচুর প্রাক-ললিপপ স্থিতি বারের রঙ নিয়ন্ত্রণের জন্য https://github.com/jgilfelt/SystemBarTint

বেশ আলোচনার পরে আমি জানতে পেরেছি যে লোলিপপের জন্য স্ট্যাটাস বার এবং নেভিগেশন বারে রাখা কোনওরকম রূপান্তর বা সম্পূর্ণরূপে অক্ষম করার উত্তরটি উইন্ডোটিতে এই পতাকাটি সেট করতে হবে:

// In Activity's onCreate() for instance
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

অন্য কোনও থিম-ইনগিংয়ের প্রয়োজন নেই, এটি এরকম কিছু তৈরি করে:

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


21
আমি কোডটি ব্যবহার করেছি এবং তারপরে একটি চিত্র ব্যাকগ্রাউন্ড হিসাবে যুক্ত android:fitsSystemWindows="true"করেছি এবং তারপরে আমার কার্যকলাপ_মাইন.এক্সএমএলে যুক্ত করেছি। সিস্টেম বারগুলি স্বচ্ছ নয় এবং স্বচ্ছ নয়।
মুহাম্মদ আলী

9
ঠিক আছে, আমি বিশ্বাস করি তখন আপনার প্রয়োজন অনুসারে <item name="android:statusBarColor">@android:color/transparent</item>আপনার থিমটিতে যুক্ত করা :)
ড্যানিয়েল উইলসন ২

7
হ্যাঁ আমরা আছি, আপনার ধৈর্যের জন্য আপনাকে ধন্যবাদ, আমি যখন প্রায় কয়েক ঘন্টা এক্সডি থেকে এটি করার চেষ্টা করছিলাম তখন থেকে আমি প্রায় একটি কাত হয়ে আছি। উপরের কোডটি কাজ করে না তবে আমি সেটটিকে android:windowTranslucentStatusমিথ্যাতে সেট করেছি এবং এটি স্ট্যাটাস বারটিকে স্বচ্ছ করে তুলেছে। এখন আমি নেভিগ্যাটন বারের সাথে একই জিনিসটি করেছি এবং যুক্ত করেছি <item name="android:navigationBarColor">@android:color/transparent</item>তবে এটি উভয় বারকে ধূসর করে তোলে। ইসস!
মুহাম্মদ আলী

4
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);পরিবর্তে "অ্যাডজাস্টপ্যান" কাজের ব্যবহার করতে
আর্দা কারা

4
দ্রষ্টব্য: FLAG_LAYOUT_NO_LIMITS পতাকা ব্যবহার করে আপনার লেআউটটি নীচে ভার্চুয়াল এনএভি বারের নীচে রাখবে। সাধারণভাবে, আপনি এটি করতে চান না ... তাই অন্য লোকেরা কী বলেছেন :-(
কেনেই


16

আপনি বহিঃস্থ গ্রন্থাগার স্ট্যাটাসবার্টিল ব্যবহার করতে পারেন :

আপনার মডিউল স্তরে যুক্ত করুন build.gradle:

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

তারপরে স্থিতি দণ্ডকে স্বচ্ছ করতে আপনি কোনও ক্রিয়াকলাপের জন্য নিম্নলিখিত ব্যবহারটি ব্যবহার করতে পারেন:

StatusBarUtil.setTransparent(Activity activity)

উদাহরণ:

ললিপপ এবং কিটকাটের স্বচ্ছ স্থিতি দণ্ড


নেভিগেশন ড্রয়ারের জন্য এটি কীভাবে করবেন?
রিজেশ পিকে

24
ঠিক এটি সমাধান করার জন্য একটি জ্বলন্ত আলো জ্বালানো শক্তি দিয়ে একটি মোমবাতি
ফিলিপ ক্যাসটিলহস

@ ফিলিপ কাস্টিলহোস হ্যাঁ, তবে আপনি যদি স্ট্যাটাস বারের সাথে অনেকগুলি আলাদা জিনিস করছেন এবং গুগল আপনাকে যে খারাপ এপিআই সরবরাহ করে তা যদি আপনি মোকাবেলা করতে চান না তবে কী হবে?
ডেভিড রাউসন

@ ডেভিডরউসন যা একটি ভিন্ন দৃশ্য। এখানে আমরা কেবল স্বচ্ছতা যুক্ত করার কথা বলছি। আপনার কোডবেসে কেবল এটি পরিচালনা করার জন্য আরও অনেক তৃতীয় পক্ষের কোড যুক্ত করবেন?
ফিলিপ ক্যাসটিলহোস

14

অ্যান্ড্রয়েড কিটকাট এবং তারপরের জন্য কাজ করে (যারা স্ট্যাটাস বারটি স্বচ্ছ করতে চান এবং নেভিগেশনবারটি চালিত করতে চান না, কারণ এই সমস্ত উত্তর নেভিগেশনবারকেও স্বচ্ছ করবে!)

এটি অর্জনের সবচেয়ে সহজ উপায়:

এই 3 টি লাইন কোডটি styles.xml (v19)-> এ রাখুন যদি আপনি কীভাবে এটি (ভি 19) রাখেন তা জানেন না, কেবল আপনার ডিফল্টে এগুলি লিখুন styles.xmlএবং তারপরে এটি স্বয়ংক্রিয়ভাবে তৈরি করতে alt+ ব্যবহার করুন enter:

<item name="android:windowFullscreen">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:fitsSystemWindows">false</item>

এবং এখন, আপনার MainActivityক্লাসে যান এবং এই পদ্ধতিটি ক্লাসে অনক্রিটের বাইরে রাখুন:

public static void setWindowFlag(Activity activity, final int bits, boolean on) {

    Window win = activity.getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
}

তারপরে onCreateক্রিয়াকলাপের পদ্ধতিতে এই কোডটি রাখুন :

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) {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
    //make fully Android Transparent Status bar
    if (Build.VERSION.SDK_INT >= 21) {
        setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false);
        getWindow().setStatusBarColor(Color.TRANSPARENT);
    }

এটাই!


1
নতুন প্রতিক্রিয়া নেভিগেশন আমার অভিজ্ঞতা হিসাবে ... উপরের কোডগুলি কীবোর্ড (অ্যাডজাস্টারাইজ) দেখানোর সাথে বিরোধী। সুতরাং, আমি কেবলমাত্র সামান্য পরিবর্তন করেছি: Build `` যদি (বিল্ড.ভি.এস.আর.সি.ডি.কম) = 19) {গেট উইন্ডো ()। GetDecorView ()। SetSystemUiVisibility (View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } `` `এবং কম্পোনেন্টে` `Status <স্ট্যাটাসবার ট্রান্সলুসেন্ট = {সত্য} ব্যাকগ্রাউন্ড কালার =" স্বচ্ছ "/>` `` এবং অ্যাপম্যানিসফেসে - মেইনএকটিভিটি `` `অ্যান্ড্রয়েড: উইন্ডোসফট ইনপুটমোড =" অ্যাডজাস্টারাইজাইজ "` `` এবং বাকি কোডগুলি একই। FYI: `` "প্রতিক্রিয়া-নেটিভ": "0.61.5", `` আপনি @parsa dadras ধন্যবাদ
রুডি Wijaya

12

সম্পূর্ণ স্বচ্ছ স্ট্যাটাসবার এবং নেভিগেশনবার

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

    transparentStatusAndNavigation();
}


private void transparentStatusAndNavigation() {
    //make full transparent statusBar
    if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
        setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, true);
    }
    if (Build.VERSION.SDK_INT >= 19) {
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        );
    }
    if (Build.VERSION.SDK_INT >= 21) {
        setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
                | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, false);
        getWindow().setStatusBarColor(Color.TRANSPARENT);
        getWindow().setNavigationBarColor(Color.TRANSPARENT);
    }
}

private void setWindowFlag(final int bits, boolean on) {
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
}

কেবলমাত্র সমাধান যা কিয়স্ক মোডের সাথে আমার জন্য সত্যই কাজ করেছিল (স্ক্রিন পিনিং)
ব্রোন্টেস

11

আপনার লেআউটটি স্ট্যাটাসবারের নীচে আঁকতে:

মান / styles.xml

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

মান-v21 / styles.xml

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

সমন্বয়কারী লেআউট / ড্রয়ারলাউট ব্যবহার করুন যা ইতিমধ্যে ফিটসিসটাম উইন্ডো প্যারামিটারের যত্ন নেয় বা এটি পছন্দ করতে নিজের নিজস্ব বিন্যাস তৈরি করে:

public class FitsSystemWindowConstraintLayout extends ConstraintLayout {

    private Drawable mStatusBarBackground;
    private boolean mDrawStatusBarBackground;

    private WindowInsetsCompat mLastInsets;

    private Map<View, int[]> childsMargins = new HashMap<>();

    public FitsSystemWindowConstraintLayout(Context context) {
        this(context, null);
    }

    public FitsSystemWindowConstraintLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public FitsSystemWindowConstraintLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        if (ViewCompat.getFitsSystemWindows(this)) {
            ViewCompat.setOnApplyWindowInsetsListener(this, new android.support.v4.view.OnApplyWindowInsetsListener() {
                @Override
                public WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) {
                    FitsSystemWindowConstraintLayout layout = (FitsSystemWindowConstraintLayout) view;
                    layout.setChildInsets(insets, insets.getSystemWindowInsetTop() > 0);
                    return insets.consumeSystemWindowInsets();
                }
            });
            setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            TypedArray typedArray = context.obtainStyledAttributes(new int[]{android.R.attr.colorPrimaryDark});
            try {
                mStatusBarBackground = typedArray.getDrawable(0);
            } finally {
                typedArray.recycle();
            }
        } else {
            mStatusBarBackground = null;
        }
    }

    public void setChildInsets(WindowInsetsCompat insets, boolean draw) {
        mLastInsets = insets;
        mDrawStatusBarBackground = draw;
        setWillNotDraw(!draw && getBackground() == null);

        for (int i = 0; i < getChildCount(); i++) {
            View child = getChildAt(i);
            if (child.getVisibility() != GONE) {
                if (ViewCompat.getFitsSystemWindows(this)) {
                    ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) child.getLayoutParams();

                    if (ViewCompat.getFitsSystemWindows(child)) {
                        ViewCompat.dispatchApplyWindowInsets(child, insets);
                    } else {
                        int[] childMargins = childsMargins.get(child);
                        if (childMargins == null) {
                            childMargins = new int[]{layoutParams.leftMargin, layoutParams.topMargin, layoutParams.rightMargin, layoutParams.bottomMargin};
                            childsMargins.put(child, childMargins);
                        }
                        if (layoutParams.leftToLeft == LayoutParams.PARENT_ID) {
                            layoutParams.leftMargin = childMargins[0] + insets.getSystemWindowInsetLeft();
                        }
                        if (layoutParams.topToTop == LayoutParams.PARENT_ID) {
                            layoutParams.topMargin = childMargins[1] + insets.getSystemWindowInsetTop();
                        }
                        if (layoutParams.rightToRight == LayoutParams.PARENT_ID) {
                            layoutParams.rightMargin = childMargins[2] + insets.getSystemWindowInsetRight();
                        }
                        if (layoutParams.bottomToBottom == LayoutParams.PARENT_ID) {
                            layoutParams.bottomMargin = childMargins[3] + insets.getSystemWindowInsetBottom();
                        }
                    }
                }
            }
        }

        requestLayout();
    }

    public void setStatusBarBackground(Drawable bg) {
        mStatusBarBackground = bg;
        invalidate();
    }

    public Drawable getStatusBarBackgroundDrawable() {
        return mStatusBarBackground;
    }

    public void setStatusBarBackground(int resId) {
        mStatusBarBackground = resId != 0 ? ContextCompat.getDrawable(getContext(), resId) : null;
        invalidate();
    }

    public void setStatusBarBackgroundColor(@ColorInt int color) {
        mStatusBarBackground = new ColorDrawable(color);
        invalidate();
    }

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mDrawStatusBarBackground && mStatusBarBackground != null) {
            int inset = mLastInsets != null ? mLastInsets.getSystemWindowInsetTop() : 0;
            if (inset > 0) {
                mStatusBarBackground.setBounds(0, 0, getWidth(), inset);
                mStatusBarBackground.draw(canvas);
            }
        }
    }
}

main_activity.xml

<FitsSystemWindowConstraintLayout 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:fitsSystemWindows="true">

    <ImageView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:fitsSystemWindows="true"
        android:scaleType="centerCrop"
        android:src="@drawable/toolbar_background"
        app:layout_constraintBottom_toBottomOf="@id/toolbar"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="0dp"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:gravity="center"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/toolbar">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Content"
            android:textSize="48sp" />
    </LinearLayout>
</FitsSystemWindowConstraintLayout>

ফলাফল:

স্ক্রীনশট:
স্ক্রিনশট


10

স্ট্যাটাস বার স্বচ্ছ করতে আপনি নীচের কোড ব্যবহার করতে পারেন। লাল হাইলাইট সহ চিত্রগুলি দেখুন যা আপনাকে নীচের কোডের ব্যবহার শনাক্ত করতে সহায়তা করে

1]

আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জন্য কোটলিন কোড স্নিপেট

পদক্ষেপ: 1 তৈরি পদ্ধতিতে কোড লিখুন

if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
    setWindowFlag(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(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
    window.statusBarColor = Color.TRANSPARENT
}

পদক্ষেপ 2 : আপনার সেট উইন্ডো ফ্ল্যাগ পদ্ধতিটি প্রয়োজন যা নীচে কোডে বর্ণিত।

private fun setWindowFlag(bits: Int, on: Boolean) {
    val win = window
    val winParams = win.attributes
    if (on) {
        winParams.flags = winParams.flags or bits
    } else {
        winParams.flags = winParams.flags and bits.inv()
    }
    win.attributes = winParams
}

আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনের জন্য জাভা কোড স্নিপেট:

পদক্ষেপ 1: প্রধান ক্রিয়াকলাপ কোড

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) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}

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

পদক্ষেপ 2 : সেট উইন্ডোফ্ল্যাগ পদ্ধতি

public static void setWindowFlag(Activity activity, final int bits, boolean on) {
    Window win = activity.getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
}

1
আমি সাহায্যের জন্য কেবল আমার কোডটি আমাদের বিকাশকারী সম্প্রদায়ের সাথে ভাগ করি। ।
CodeInsideCofee


5

এখানে কোটলিনে একটি এক্সটেনশন যা কৌশলটি করে:

fun Activity.setTransparentStatusBar() {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        window.statusBarColor = Color.TRANSPARENT
    }
}

4

আপনার এক্সএমএলে এই কোডটি ব্যবহার করে, আপনি আপনার ক্রিয়াকলাপে সময় বার দেখতে সক্ষম হবেন:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

3

তিনটি পদক্ষেপ রয়েছে:

1) কেবলমাত্র আপনার @ অনক্রিয়া পদ্ধতিতে এই কোড বিভাগটি ব্যবহার করুন

@OnCreate{
  // FullScreen
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
  WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

আপনি যদি খণ্ডে কাজ করছেন, আপনার এই ক্রিয়াকলাপটি আপনার ক্রিয়াকলাপের @ অনক্রিয়েট পদ্ধতিতে করা উচিত।

2) /res/values-v21/styles.xML এ স্বচ্ছতা নির্ধারণ করতে ভুলবেন না:

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

অথবা আপনি প্রোগ্রামটিমে স্বচ্ছতা সেট করতে পারেন:

getWindow().setStatusBarColor(Color.TRANSPARENT);

3) যাইহোক আপনার স্টাইলস.এক্সএমএলে কোড সেগমেন্টটি যুক্ত করা উচিত

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

দ্রষ্টব্য: এই পদ্ধতিটি কেবলমাত্র 21 এবং ততোধিকের API এ কাজ করে।


2

আপনি আমার উদাহরণটি অ্যানিমেটেড অবতার এবং অ্যানিমেটেড পাঠ্যের সাথে দেখতেও পারেন

CollapsingAvatarToolbarSample

মিডিয়াম আমার পোস্ট পড়ুন

সুতরাং এটি কীভাবে কাজ করে তা আমাকে ব্যাখ্যা করতে দিন। আমি প্রয়োগ করা কাস্টম ভিউ তৈরি করেছি অ্যাপবারআলআউট.অনফসেটচ্যাঞ্জডলিস্টনার । হেডকোলাপসিং কাস্টম ভিউয়ের অভ্যন্তরে আমি অ্যাপবারআলআউটটিতে পাঠ্য এবং চিত্র প্রদর্শনের প্রতিষ্ঠা করেছি।

class HeadCollapsing(context: Context, attrs: AttributeSet?) : 
 FrameLayout(context, attrs), AppBarLayout.OnOffsetChangedListener {

  private fun findViews() {
            appBarLayout = findParentAppBarLayout()

            avatarContainerView = findViewById(R.id.imgb_avatar_wrap)

            titleToolbarText =  findViewById<AppCompatTextView>(id)

        }

  private fun findParentAppBarLayout(): AppBarLayout {
    val parent = this.parent
    return parent as? AppBarLayout ?: if (parent.parent is AppBarLayout) {
        parent.parent as AppBarLayout
    } else {
        throw IllegalStateException("Must be inside an AppBarLayout")
    }
}

  ...

     override fun onOffsetChanged(appBarLayout: AppBarLayout, offset:Int) {
           ...
           //Calculate expanded percentage
           val expandedPercentage = 1 - -offset / maxOffset
           updateViews(expandedPercentage)
     }
}

তারপরে গণনা করা শতাংশের মাধ্যমে দর্শনগুলি পরিবর্তন করুন। উদাহরণস্বরূপ, কীভাবে পাঠ্য দর্শন পরিবর্তন হচ্ছে:

         when {
                inversePercentage < ABROAD -> {
                    titleToolbarText?.visibility = View.VISIBLE
                    titleTolbarTextSingle?.visibility = View.INVISIBLE
                }

                inversePercentage > ABROAD -> {
                    titleToolbarText?.visibility = View.INVISIBLE
                    titleTolbarTextSingle?.visibility = View.VISIBLE
                    titleTolbarTextSingle?.let {
                        animateShowText(it)
                    }
                }
            }

যখন চিত্রের ধসের প্রয়োজন তখন শনাক্তকরণের তৈরি জোড় বস্তুটি সনাক্ত করতে

private var cashCollapseState: kotlin.Pair<Int, Int>? = null

রাজ্যগুলি সহ: TO_EXPANDED_STATE, TO_COLLAPSED_STATE, WAIT_FOR_SWITCH, সুইচড

  companion object {
        const val ABROAD = 0.95f
        const val TO_EXPANDED_STATE = 0
        const val TO_COLLAPSED_STATE = 1
        const val WAIT_FOR_SWITCH = 0
        const val SWITCHED = 1
    }

তারপরে অবতার সুইথ স্টেটের জন্য ক্রিটাযুক্ত অ্যানিমেশন:

 when {
                cashCollapseState != null && cashCollapseState != state -> {
                    when (state.first) {
                        TO_EXPANDED_STATE -> {
                          // do calculates
                        }
                        TO_COLLAPSED_STATE -> {

                    ValueAnimator.ofFloat(avatarContainerView.translationX, translationX).apply {
                        addUpdateListener {
                            avatarContainerView.translationX = it.animatedValue as Float
                        }

                        duration = 350
                        (state.first == TO_COLLAPSED_STATE).apply {
                            if (this) interpolator = LinearInterpolator()
                        }
                        start()
                    }
                //SWITCH STATE CASE
                cashCollapseState = kotlin.Pair(state.first, SWITCHED)
            }

            else -> {
                cashCollapseState = kotlin.Pair(state.first, WAIT_FOR_SWITCH)
            }

2

আপনি এটি চেষ্টা করতে পারেন।

private static void setStatusBarTransparent(Activity activity) {
    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);
    }
}

1

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

আন্তন হ্যাডটস্কির একটি নিবন্ধটি মনোযোগ সহকারে পড়ার পরে আমি বুঝতে পারছিলাম যে কী চলছে।

আমার DrawerLayoutসাথে ConstraintLayout(অর্থাত্ পাত্রে) যা রয়েছে Toolbar, মূল খণ্ডটি অন্তর্ভুক্ত করে এবং BottomNavigationView

সেট DrawerLayoutথাকার fitsSystemWindowsসত্যতে যথেষ্ট নয়, আপনি উভয় সেট করতে হবে DrawerLayoutএবং ConstraintLayout। স্বচ্ছ স্ট্যাটাস বার ধরে, স্ট্যাটাস বারের রঙ এখন এর পটভূমির রঙের মতো ConstraintLayout

তবে অন্তর্ভুক্ত থাকা খণ্ডটিতে এখনও স্ট্যাটাস বারটি অন্তর্নির্মিত রয়েছে, সুতরাং শীর্ষে থাকা আরও একটি 'পূর্ণ স্ক্রিন' টুকরাটি অ্যানিমেট করে স্থিতি বারটির রঙ পরিবর্তন করে না।

মধ্যে উল্লেখ করা নিবন্ধ থেকে কোড একটি বিট Activityএর onCreate:

ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
        insets.replaceSystemWindowInsets(
                insets.systemWindowInsetLeft,
                0,
                insets.systemWindowInsetRight,
                insets.systemWindowInsetBottom
        )
    }

এবং সমস্ত ভাল, এখন ব্যতীত Toolbarস্ট্যাটাস বারের উচ্চতার বিষয়টি চিহ্নিত করে না। আরও কিছু নিবন্ধটি উল্লেখ করে এবং আমাদের একটি সম্পূর্ণ কার্যক্ষম সমাধান রয়েছে:

val toolbar = findViewById<Toolbar>(R.id.my_toolbar)
    ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
        val params = toolbar.layoutParams as ViewGroup.MarginLayoutParams
        params.topMargin = insets.systemWindowInsetTop
        toolbar.layoutParams = params
        insets.replaceSystemWindowInsets(
                insets.systemWindowInsetLeft,
                0,
                insets.systemWindowInsetRight,
                insets.systemWindowInsetBottom
        )
    }

মূল_অ্যাক্টিভিটি.এক্সএমএল (দয়া করে মনে রাখবেন মার্জিনটপ ইন Toolbarপূর্বরূপ উদ্দেশ্যে, এটি কোড দ্বারা প্রতিস্থাপন করা হবে):

<?xml version="1.0" encoding="utf-8"?>
    <androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        >

    <androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/green"
        android:fitsSystemWindows="true"
        tools:context=".MainActivity">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/my_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_constraintTop_toTopOf="@id/container"
            android:layout_marginTop="26dp" 
            android:background="@android:color/transparent"
            ...>
            ...
        </androidx.appcompat.widget.Toolbar>

        <include layout="@layout/content_main" />
        ...
    </androidx.constraintlayout.widget.ConstraintLayout>
    ...
</androidx.drawerlayout.widget.DrawerLayout>

1

আমি স্টাইলস.এক্সএমএল এবং ক্রিয়াকলাপটি খুব জটিল হতে দেখলাম ফলে একটি সাধারণ ইউটিলিটি পদ্ধতি তৈরি করা হয়েছে যা নীচে অপশন সেট রয়েছে

জাভা

Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
window.setStatusBarColor(Color.TRANSPARENT);

কোটলিন ডিএসএল

activity.window.apply {
    clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    statusBarColor = Color.TRANSPARENT
}

এবং স্বচ্ছ স্থিতি দণ্ডটি অর্জন করতে এটিই লেগেছে। আশাকরি এটা সাহায্য করবে.


0

android:fitsSystemWindows="true"শুধুমাত্র v21 এ কাজ করুন। আমরা এটিকে থিম এক্সএমএলে বা প্যারেন্ট লেআউটে পছন্দ LinearLayoutবা পছন্দ করতে পারি CoordinateLayout। V21 এর নীচের জন্য, আমরা এই পতাকাটি যুক্ত করতে পারিনি। style.xmlআপনার প্রয়োজন অনুযায়ী দয়া করে বিভিন্ন ফাইল সহ বিভিন্ন মান ফোল্ডার তৈরি করুন ।


0

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

<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">false</item>

0

সবার একটা দরকার .োকা MainActivity.java


protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Window g = getWindow();
        g.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

        setContentView(R.layout.activity_main);

    }

তবে আমি যখন স্ক্রোলটি নামা শুরু করি তখন আমি কিছু ভীতিজনক বাগগুলি পাই।

0

আমার ক্ষেত্রে যেমন একটি নীচের সরঞ্জাম দণ্ড হিসাবে পূর্ববর্তী সমাধানগুলি পরীক্ষা করার সময় আমার একটি সমস্যা হয়েছিল, অ্যান্ড্রয়েড সিস্টেম বোতামগুলি আমার নীচের মেনুতে আচ্ছাদিত হয় আমার সমাধানটি ক্রিয়াকলাপের মধ্যে যুক্ত করা হয়:

সুরক্ষিত অকার্যকর অনক্রিট (বান্ডিল সেভড ইনস্ট্যান্সস্টেট) {সুপার.অনক্রিয়েট (সেভডআইনস্ট্যান্সস্টেট);

    // force full screen mode
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);


    setContentView(R.layout.main_activity_container);

0

আপনি নীচের কোডটি ব্যবহার করতে পারেন।

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
getWindow().setStatusBarColor(Color.TRANSPARENT);

আপনার মূল বিন্যাসে এই বিন্যাসটি অন্তর্ভুক্ত করুন।

toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbarNav"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        app:contentInsetEnd="0dp"
        app:contentInsetLeft="0dp"
        app:contentInsetRight="0dp"
        app:contentInsetStart="0dp">

        <RelativeLayout
            android:id="@+id/rlBackImageLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/main_background2">  //add your color here

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="@dimen/_40sdp"
                android:layout_marginTop="@dimen/_16sdp"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/toolbarIcon"
                    android:layout_width="@dimen/_30sdp"
                    android:layout_height="@dimen/_30sdp"
                    android:layout_gravity="center"
                    android:layout_marginStart="@dimen/_10sdp"
                    android:padding="@dimen/_5sdp"
                    android:src="@drawable/nav_icon" />

                <TextView
                    android:id="@+id/txtTitle"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:layout_marginEnd="@dimen/_30sdp"
                    android:fontFamily="@font/muli_semibold"
                    android:gravity="center"
                    android:textColor="#fff"
                    android:textSize="@dimen/_14ssp"
                    android:textStyle="bold"
                    tools:text="test Data" />

            </LinearLayout>

        </RelativeLayout>

    </androidx.appcompat.widget.Toolbar>

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


0

আমার ক্ষেত্রে, আমি "অনক্রিয়েট" এ সব কল করি না (এটি একটি প্রতিক্রিয়া নেটিভ অ্যাপ্লিকেশন এবং এটি প্রতিক্রিয়া-নেটিভ স্ট্যাটাসবার উপাদানটি ব্যবহার করেও সমাধান করা যেতে পারে) যে কেউ এইটি ব্যবহার করতে পারেন:

override fun onStart() {
        super.onStart()
        window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        window.statusBarColor = Color.TRANSPARENT
}

0

এই কাজ করা উচিত

// উদাহরণস্বরূপ ক্রিয়াকলাপের অনক্রিটে ()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

0

এই লাইব্রেরিটি তদন্ত করার সময় আমি উত্তরটি পেয়েছি: https://github.com/laobie/StatusBarUtil

সুতরাং আপনার ক্রিয়াকলাপে আপনাকে নিম্নলিখিত কোডগুলি যুক্ত করতে হবে

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
    window.statusBarColor = Color.TRANSPARENT
} else {
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
}

0

সেটকন্টেন্টভিউ () এর আগে আপনার ক্রিয়াকলাপে এই লাইনগুলি যুক্ত করুন

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

এই 2 লাইন আপনার AppTheme এ যুক্ত করুন

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

এবং সর্বশেষ জিনিসটি আপনার minSdkVersion অবশ্যই 19 বি

minSdkVersion 19

-1
 <item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
            <!--<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>-->

আত ব্যবহার windowLightStatusBarব্যবহার পরিবর্তেstatusBarColor = @android:color/transparent


-1

এটি কেবলমাত্র API স্তর> = 21 এর জন্য It এটি আমার পক্ষে কাজ করে। এখানে আমার কোড (কোটলিন)

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        findViewById<View>(android.R.id.content).systemUiVisibility =
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.