আমি এমন একটি অ্যাপ্লিকেশন বিকাশ করছি যা অ্যাকশনবার এবং স্ট্যাটাসবার কাস্টমাইজেশনের ক্ষেত্রে আসে> = API14 এর সাথে সমস্ত ডিভাইসে একই দেখতে পাওয়া দরকার। অবশেষে আমি একটি সমাধান খুঁজে পেয়েছি এবং যেহেতু এটি আমার কিছুটা সময় নিয়েছে আমি আপনার কিছুটি সংরক্ষণ করার জন্য এটি ভাগ করব। আমরা একটি অ্যাপকম্প্যাট -21 নির্ভরতা ব্যবহার করে শুরু করি।
স্বচ্ছ Actionbar :
মান / styles.xml :
<style name="AppTheme" parent="Theme.AppCompat.Light">
...
</style>
<style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
<item name="android:windowContentOverlay">@null</item>
<item name="windowActionBarOverlay">true</item>
<item name="colorPrimary">@android:color/transparent</item>
</style>
<style name="AppTheme.ActionBar" parent="AppTheme">
<item name="windowActionBarOverlay">false</item>
<item name="colorPrimary">@color/default_yellow</item>
</style>
মান-ভি 21 / স্টাইল.এক্সএমএল :
<style name="AppTheme" parent="Theme.AppCompat.Light">
...
</style>
<style name="AppTheme.ActionBar.Transparent" parent="AppTheme">
<item name="colorPrimary">@android:color/transparent</item>
</style>
<style name="AppTheme.ActionBar" parent="AppTheme">
<item name="colorPrimaryDark">@color/bg_colorPrimaryDark</item>
<item name="colorPrimary">@color/default_yellow</item>
</style>
AndroidManifest.xml
কোন ক্রিয়াকলাপ স্বচ্ছ বা বর্ণযুক্ত হবে তা নির্দিষ্ট করতে এখন আপনি এই থিমগুলি ব্যবহার করতে পারেন ActionBar
:
<activity
android:name=".MyTransparentActionbarActivity"
android:theme="@style/AppTheme.ActionBar.Transparent"/>
<activity
android:name=".MyColoredActionbarActivity"
android:theme="@style/AppTheme.ActionBar"/>
দ্রষ্টব্য: এপিআই> = 21 এ Actionbar
স্বচ্ছ পেতে আপনাকেও স্বচ্ছ হওয়া দরকার Statusbar
, অন্যথায় আপনার রঙের শৈলীর সম্মান করা হবে না এবং হালকা-ধূসর থাকবে।
স্বচ্ছ স্ট্যাটাসবার (শুধুমাত্র এপিআই> = 19 এর সাথে কাজ করে) :
এটি বেশ সহজ এটি কেবল নীচের কোডটি ব্যবহার করুন:
protected void setStatusBarTranslucent(boolean makeTranslucent) {
if (makeTranslucent) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
তবে আপনি একটি মজাদার ফলাফল লক্ষ্য করবেন:
এটি ঘটবে কারণ Statusbar
স্বচ্ছ হলে লেআউটটি তার উচ্চতা ব্যবহার করবে। এটি রোধ করতে আমাদের কেবল দরকার:
সমাধান এক: আপনার লেআউট ভিউ ধারকটিতে
এই লাইনটি যুক্ত করুন android:fitsSystemWindows="true"
যা আপনি অ্যাকশনবারে বেলো রাখতে চান:
...
<LinearLayout
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</LinearLayout>
...
সমাধান দুটি:
আমাদের আগের পদ্ধতিতে কয়েকটি লাইন যুক্ত করুন:
protected void setStatusBarTranslucent(boolean makeTranslucent) {
View v = findViewById(R.id.bellow_actionbar);
if (v != null) {
int paddingTop = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ? MyScreenUtils.getStatusBarHeight(this) : 0;
TypedValue tv = new TypedValue();
getTheme().resolveAttribute(android.support.v7.appcompat.R.attr.actionBarSize, tv, true);
paddingTop += TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
v.setPadding(0, makeTranslucent ? paddingTop : 0, 0, 0);
}
if (makeTranslucent) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
} else {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
R.id.bellow_actionbar
আমরা যাই হোক না কেন লেবু স্থাপন করতে চাই তার লেআউট কনটেইনার ভিউ আইডি কোথায় থাকবে Actionbar
:
...
<LinearLayout
android:id="@+id/bellow_actionbar"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</LinearLayout>
...
সুতরাং এটি এটি, এটি মনে হয় আমি কিছু ভুলে যাচ্ছি না। এই উদাহরণে আমি একটি ব্যবহার করি নি Toolbar
তবে আমি মনে করি এটির একই ফলাফল হবে। আমি নিজের কাস্টমাইজটি এভাবেই করি Actionbar
:
@Override
protected void onCreate(Bundle savedInstanceState) {
View vg = getActionBarView();
getWindow().requestFeature(vg != null ? Window.FEATURE_ACTION_BAR : Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(getContentView());
if (vg != null) {
getSupportActionBar().setCustomView(vg, new ActionBar.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
getSupportActionBar().setDisplayShowCustomEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);
getSupportActionBar().setDisplayUseLogoEnabled(false);
}
setStatusBarTranslucent(true);
}
দ্রষ্টব্য: এটি এমন একটি abstract class
যা ActionBarActivity
আশা করে এটি সাহায্য করে!