laobie / StatusBarUtil

A util for setting status bar style on Android App.
http://t.cn/Rq746Kb
Apache License 2.0
8.82k stars 1.72k forks source link

StatusBarUtil.setColor(this, Color.BLUE)位移不对 #38

Closed sungerk closed 8 years ago

sungerk commented 8 years ago
StatusBarUtil.setColor(this, Color.BLUE);
<style name="Theme.AppCompat.Translucent" parent="AppTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>

`_

_`

laobie commented 8 years ago

这个方法不涉及位移,贴上图说明下? @sungerk

sungerk commented 8 years ago

qq 20160904114738 qq 20160904114847

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="#f2f2f2"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:background="#fff"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/collapse_toolbar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fitsSystemWindows="true"
                app:contentScrim="@color/white"
                app:layout_scrollFlags="scroll|exitUntilCollapsed">

                <include layout="@layout/view_header_view_user_info"></include>

                <include layout="@layout/common_toolbar"></include>

                <android.support.design.widget.TabLayout
                    android:id="@+id/tab_layout"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:layout_gravity="bottom"
                    android:background="@color/white"
                     app:tabIndicatorColor="@color/colorAccent"
                    app:tabSelectedTextColor="#000"
                    app:tabTextColor="#000"
                    app:tabMode="scrollable"/>

            </android.support.design.widget.CollapsingToolbarLayout>

        </android.support.design.widget.AppBarLayout>

        <android.support.v4.view.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />
        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|start"
            android:layout_margin="@dimen/fab_margin"
            app:rippleColor="#ff8500"
            app:backgroundTint="#ff5900"
            app:srcCompat="@mipmap/ico_back"
            app:elevation="6dp"
            app:pressedTranslationZ="12dp"
            app:layout_behavior="com.dumovie.app.widget.behavior.ScrollAwareFABBehavior"
            />

    </android.support.design.widget.CoordinatorLayout>

</android.support.v4.widget.SwipeRefreshLayout>

view_header_view_user_info.xml

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="?attr/actionBarSize">

    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_marginTop="-1dp"
        android:id="@+id/imageview_user_skin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        fresco:actualImageScaleType="fitXY"
        fresco:placeholderImage="@mipmap/bg_user_skin"
        fresco:viewAspectRatio="1.62" />

    <com.facebook.drawee.view.SimpleDraweeView
        android:id="@+id/imageview_user_header_iamge"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignBottom="@+id/imageview_user_skin"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="40dp"
        fresco:placeholderImage="@mipmap/ico_peron_non"
        app:layout_behavior=" com.dumovie.app.widget.behavior.AvatarImageBehavior"/>

</RelativeLayout>

顶部图片好像不能在状态栏显示

laobie commented 8 years ago

顶部图片在状态栏显示需要用 setForImageView 那个方法,你用了 CollapsingToolbarLayout 可能也有问题,因为这个 CollapsingToolbarLayout 的滑动变化应该是他自己处理的,你用工具类没法处理滑动后状态栏变化的。

sungerk commented 8 years ago

都试了都不行,看新浪微博手机客户端,个人主页就实现了

laobie commented 8 years ago

@sungerk 新浪的肯定是自己监听滑动然后动态设置状态栏的,不会是使用 CollapsingToolbarLayout 的。 或者你要使用 CollapsingToolbarLayout 的话看看这篇文章中提到的 http://blog.csdn.net/u013260551/article/details/51150336

实现肯定是可以的,但是肯定不是用这个工具类能简单搞定的。

sungerk commented 8 years ago

谢谢

sungerk commented 8 years ago

完美搞定了

laobie commented 8 years ago

@sungerk 哪个方案搞定的

sungerk commented 8 years ago

private static View mStatusBarView;

/**
 * CollapsingToolbarLayout状态栏(可折叠图片)
 *
 * @param activity
 * @param coordinatorLayout
 * @param appBarLayout
 * @param imageView
 * @param toolbar
 */
public static void setCollapsingToolbar(Activity activity, CoordinatorLayout coordinatorLayout,
                                        AppBarLayout appBarLayout, ImageView imageView, Toolbar toolbar) {
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
        coordinatorLayout.setFitsSystemWindows(false);
        appBarLayout.setFitsSystemWindows(false);
        imageView.setFitsSystemWindows(false);
        toolbar.setFitsSystemWindows(true);
        CollapsingToolbarLayout.LayoutParams lp = (CollapsingToolbarLayout.LayoutParams) toolbar.getLayoutParams();
        lp.height = (int) (getStatusBarHeight(activity) +
                activity.getResources().getDimension(R.dimen.abc_action_bar_default_height_material));
        toolbar.setLayoutParams(lp);
        setKKStatusBar(activity, R.color.statusBar);
        setCollapsingToolbarStatus(appBarLayout);
    }
}

/**
 * Android4.4上CollapsingToolbar折叠时statusBar显示和隐藏
 *
 * @param appBarLayout
 */
private static void setCollapsingToolbarStatus(AppBarLayout appBarLayout) {
    ViewCompat.setAlpha(mStatusBarView, 1);
    appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            int maxScroll = appBarLayout.getTotalScrollRange();
            float percentage = (float) Math.abs(verticalOffset) / (float) maxScroll;
            ViewCompat.setAlpha(mStatusBarView, percentage);
        }
    });
}

private static void setKKStatusBar(Activity activity, int statusBarColor) {
    ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
    mStatusBarView = contentView.getChildAt(0);
    //改变颜色时避免重复添加statusBarView
    if (mStatusBarView != null && mStatusBarView.getMeasuredHeight() == getStatusBarHeight(activity)) {
        mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));
        return;
    }
    mStatusBarView = new View(activity);
    ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            getStatusBarHeight(activity));
    mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));
    contentView.addView(mStatusBarView, lp);
}

private static int getStatusBarHeight(Context context) {
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    return context.getResources().getDimensionPixelSize(resourceId);
}
laobie commented 8 years ago

@sungerk 看起来不错

sungerk commented 8 years ago

...........国产手机无法适配.........