PDA

View Full Version : سفارشی کردن theme



sh.mahdavi
شنبه 03 مهر 1395, 10:57 صبح
سلام

کدهای من به صورت زیر هستند:

v21/styles.xml



<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:colorPrimary">@color/primaryColor</item>
<item name="android:colorPrimaryDark">@color/primaryColorDarck</item>

</style>

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>

</resources>


styles.xml



<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="AppTheme.Base">
<!-- Customize your theme here. -->
</style>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/primaryColor</item>
<item name="colorPrimaryDark">@color/primaryColorDarck</item>

</style>

<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

<style name="dialog_anim1">
<item name="android:windowEnterAnimation">@anim/in1</item>
<item name="android:windowExitAnimation">@anim/out2</item>
</style>

</resources>


من میخوام رنگ statusbar به صورت gradiant در بیاد.
در قمست drawable اینو درست کردم:


<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="135"
android:centerColor="#a0379c"
android:endColor="#863bb2"
android:startColor="#bc3587"
android:type="linear" />
</shape>

وقتی در قسمت رنگها(color) رنگ gradiant دارو نسبت میدم به primarycolor و primarydarkcolor در اندروید 5 به بالا برنامه فورس کلوز میده.
حالا اگهمن بخوام این رنگ gradiant دارو نسبت بدم به statusbar و actionbar پطور باید انجام بدم؟

@drawbale/color_gradiant

اینو که نسبت میدم برنامه فورس کلوز میده
142738

Nevercom
شنبه 03 مهر 1395, 12:02 عصر
میتونید رنگ StatusBar رو Transparent قرار بدید و بعد در لایه تون هر شئ ی که دوست دارین رو در اون قسمت نمایش بدین.

اینا رو به style اضافه کنید:


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


این مشخصه رو هم به آبجکت روت لایه تون اضافه کنید. (مثلاً LinearLayout)


android:fitsSystemWindows="true"


با اینکار باید تو نسخه هایی از اندروید که ساپورت میشه، کل لی اوت بیفته زیر استتوس بار.

اگر با اینکار مشکلی به وجود اومد، اون خط مربوط به fitSystemWindows رو از لایه حذف کنید و با کد زیر تغییرات رو اعمال کنید:



if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
/* Set paddingTop of toolbar to height of status bar.
* Fixes statusbar covers toolbar issue
*/


mToolbar.setPadding(0, Utils.getStatusBarHeight(this), 0, 0);


}


اون خط آخر که پدینگ تولبار رو تغییر میده بخاطر این هست که با اعمال این تغییر کل لایه از زیر استتوس بار رسم میشه و ممکنه قسمتس از تولبار بیفته زیر استتوس بار، در این شرایط پدینگ تولبار رو تغییر میدیم تا از زیر استتوس بار نمایش داده بشه.

متدی که ارتفاع استتوس بار رو محاسبه می کنه:


public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resou rceId);
}
return result;
}