被产品经理虐的android要给所有activity加上ios11大标题加滚动滑动然后一个月之后又要取消是什么体验?那么我之前是如何处理的?

被产品经理虐的android要给所有activity加上ios11大标题加滚动滑动变成小标题。
ios说很简单,我特么估计就一个属性吧。

这么多界面,很多底部权重界面都需要单独处理的,我虽然也是用代码控制继承,但是还是有点反感变态的需求
我虽然写的很好,不是重写所有xml布局,而是通过继承 ,实现了快速解决所有问题。 全是通过java代码控制。
所以这次变态的需求果然我还是可以应付的。

我是如何封装的



public class IOSHeaderHeper {


    private static final String TAG = "IOSHeaderHeper";
    private boolean mShowIing;
    public ViewGroup iosLayoutRootView;
    public ViewGroup myContentView;
    public AppBarLayout appbarLayout;
    public TextView toolBar;
    public ViewGroup headViewWrapFix;
    public CollapsingToolbarLayout collapsingToolbarlayout;
    public ViewGroup buttomContainer;
    public TextView tvTitleBig;
    private View headView;
    public View viewIosHeader;
    public ViewGroup keepShowArea;
    public CoordinatorLayout coordinatorLayout;


    public void setHeaderTitle(String str) {
        toolBar.setText(str);
        collapsingToolbarlayout.setTitle(str);
        if(tvTitleBig!=null){
            tvTitleBig.setText(str);
        }
    }

    protected void switchLightMode() {
        collapsingToolbarlayout.setCollapsedTitleTextColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
        toolBar.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
        if (tvTitleBig == null) {
            Log.e(TAG, "无法设置头部");

        } else {
            tvTitleBig.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));

        }

        toolBar.setBackgroundColor(Color.WHITE);
        collapsingToolbarlayout.setBackgroundColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));
    }

    protected void switchNightMode() {
        collapsingToolbarlayout.setCollapsedTitleTextColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));
        toolBar.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));
        if (tvTitleBig == null) {
            Log.e(TAG, "无法设置头部");

        } else {
            tvTitleBig.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));

        }
        toolBar.setBackgroundColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
        collapsingToolbarlayout.setBackgroundColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
    }

    protected void onCreateViewFixFinish(View view) {
        ViewGroup parent = (ViewGroup) view.getParent();
        int index = parent.indexOfChild(view);
        parent.removeViewAt(index);

//        binding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.ios11layout_wrap, parent, false);
        iosLayoutRootView = (ViewGroup) LayoutInflater.from(view.getContext()).inflate(getIos11Layout(), parent, false);
        myContentView = (ViewGroup) iosLayoutRootView.findViewById(R.id.my_content_view);

        coordinatorLayout = (CoordinatorLayout) iosLayoutRootView.findViewById(R.id.coordinator);
        appbarLayout = (AppBarLayout) iosLayoutRootView.findViewById(R.id.appbar);


        toolBar = (TextView) iosLayoutRootView.findViewById(R.id.toolbar);
        keepShowArea = (ViewGroup) iosLayoutRootView.findViewById(R.id.view_keep_show_area);


        buttomContainer = (ViewGroup) iosLayoutRootView.findViewById(R.id.buttom_container);
        collapsingToolbarlayout = (CollapsingToolbarLayout) iosLayoutRootView.findViewById(R.id.collapsing_toolbarlayout);
        headViewWrapFix = (ViewGroup) iosLayoutRootView.findViewById(R.id.head_view_wrap_fix);
        myContentView.addView(view);
        parent.addView(iosLayoutRootView);

//        LayoutTransition transition = new LayoutTransition();
//        transition.setAnimator(LayoutTransition.CHANGE_APPEARING, null);
//        ((ViewGroup) binding.toolbar.getParent()).setLayoutTransition(transition);

        appbarLayout.addOnOffsetChangedListener(new OnAppBarStateChangedListener() {
            @Override
            public void onStateChanged(AppBarLayout appBarLayout, State state) {

                if (state == State.EXPANDED) {
                    toolBar.setVisibility(View.GONE);
                    Prt.w(TAG, "展开中");
                } else if (state == State.COLLAPSED) {
                    toolBar.setVisibility(View.VISIBLE);
                    Prt.w(TAG, "收缩中");
                } else {

                }
            }

            @Override
            public void onScrolling(AppBarLayout appBarLayout, State state) {
            }
        });
    }

    /**
     * 把view移除然后添加到底部
     *
     * @param view
     */
    public void moveViewToBottomContainer(View view) {
        ViewGroup viewGroup = ((ViewGroup) view.getParent());
        if (viewGroup != null) {
            viewGroup.removeView(view);

        }
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
        buttomContainer.addView(view, params);
    }

    /**
     * 头部插入
     *
     * @param
     * @return
     */
    public ViewGroup addHeadView() {
        return addHeadView(getHeadViewDefaultResouce());
    }

    public ViewGroup addHeadView(int headViewResource) {
        headView = LayoutInflater.from(headViewWrapFix.getContext()).inflate(headViewResource, headViewWrapFix, false);
        tvTitleBig = (TextView) headView.findViewById(R.id.view_head_center);
        viewIosHeader = headView.findViewById(R.id.view_head);
        headViewWrapFix.addView(headView);
        return headViewWrapFix;
    }

    public ViewGroup addHeadView(View view) {
        headView = view;
        tvTitleBig = (TextView) headView.findViewById(R.id.view_head_center);
        viewIosHeader = headView.findViewById(R.id.view_head);
        headViewWrapFix.addView(headView);
        return headViewWrapFix;
    }


    protected boolean isNeedHead() {
        return true;
    }

    protected int getIos11Layout() {
        return R.layout.ios11layout_wrap;
    }


    public int getHeadViewDefaultResouce() {
        return R.layout.view_head_ios11;
    }
}

public abstract class IOSHeaderActivity extends BaseActionBarActivity {

    private IOSHeaderHeper headerHeper;

    @Override
    protected void onCreateBefore(Bundle savedInstanceState) {
        headerHeper = new IOSHeaderHeper();
    }

    @Override
    protected View onCreateViewFix() {
        return super.onCreateViewFix();
    }

    @Override
    protected void onCreateViewFixFinish(View view) {
        headerHeper.onCreateViewFixFinish(view);
    }

    @Override
    protected int getHeadViewResouce() {
        return headerHeper.getHeadViewDefaultResouce();
    }


    protected void switchLightMode() {
        headerHeper.switchLightMode();
    }

    protected void switchNightMode() {
        headerHeper.switchNightMode();
        ;
    }


    public void moveViewToBottomContainer(View view) {

        headerHeper.moveViewToBottomContainer(view);
    }



    @Override
    protected boolean isNeedHead() {
        return true;
    }

    protected int getIos11Layout() {
        return headerHeper.getIos11Layout();
    }

    @Override
    protected ViewGroup addHeadView(ViewGroup view) {
        return headerHeper.addHeadView();
    }

    @Override
    public void setHeaderTitle(String str) {
        headerHeper.setHeaderTitle(str);

    }

    protected ViewGroup getheadViewWrapFix() {
        return headerHeper.headViewWrapFix;
    }



}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data></data>

    <LinearLayout
        android:id="@+id/root_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

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

            android:layout_height="match_parent"
            android:layout_weight="1">

            <android.support.design.widget.AppBarLayout
                android:id="@+id/appbar"
                android:layout_width="match_parent"

                android:layout_height="wrap_content">

                <android.support.design.widget.CollapsingToolbarLayout
                    android:id="@+id/collapsing_toolbarlayout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@color/colorThemeColor"
                    app:collapsedTitleGravity="center"
                    app:contentInsetLeft="0dp"
                    app:contentInsetStart="0dp"
                    app:contentScrim="@color/transparent"
                    app:expandedTitleGravity="left|center_vertical"
                    app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
                    app:scrimAnimationDuration="100"
                    app:scrimVisibleHeightTrigger="0dp"
                    app:titleEnabled="false">


                    <FrameLayout
                        android:id="@+id/head_view_wrap_fix"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:layout_collapseMode="pin">

                    </FrameLayout>
                    <!--app:layout_scrollFlags="exitUntilCollapsed"-->
                    <!--上滑保留标题栏 app:layout_collapseMode-->

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

                <TextView
                    android:id="@+id/toolbar"
                    style="@style/style_ios_small_title"
                    android:text="@string/app_name"
                    app:layout_scrollFlags="exitUntilCollapsed" />

                <FrameLayout
                    android:id="@+id/view_keep_show_area"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_scrollFlags="exitUntilCollapsed">



                </FrameLayout>


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


            <FrameLayout
                android:id="@+id/my_content_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior">

            </FrameLayout>


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

        <FrameLayout
            android:id="@+id/buttom_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        </FrameLayout>


    </LinearLayout>
</layout>

public abstract class WanNengIOSHeaderActivity extends BaseActionBarActivity {

    public IOSHeaderHeper getHeaderHeper() {
        return headerHeper;
    }

    private IOSHeaderHeper headerHeper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onCreateBefore(Bundle savedInstanceState) {
        headerHeper = new IOSHeaderHeper(false);
    }

    @Override
    protected View onCreateViewFix() {
        return super.onCreateViewFix();
    }

    @Override
    protected void onCreateViewFixFinish(View view) {
        headerHeper.onCreateViewFixFinish(view);
    }

    @Override
    protected int getHeadViewResouce() {
        return headerHeper.getHeadViewDefaultResouce();
    }


    protected void switchLightMode() {
        headerHeper.switchLightMode();
    }

    protected void switchNightMode() {
        headerHeper.switchNightMode();
        ;
    }


    public void moveViewToBottomContainer(View view) {

        headerHeper.moveViewToBottomContainer(view);
    }


    @Override
    protected boolean isNeedHead() {
        return true;
    }

    protected int getIos11Layout() {
        return headerHeper.getIos11Layout();
    }

    @Override
    protected ViewGroup onAddHeadView(ViewGroup view) {
        return headerHeper.addHeadView();
    }

    @Override
    public void setHeaderTitle(String str) {
        headerHeper.setHeaderTitle(str);

    }


那么接下来要如何改?实际上很简单了,因为我已经通过基类控制了。

某个用户界面是最复杂的 但是这个界面我也是不想改了的,而且这个界面基本上不需要改吧。我觉得。


    private void layoutView() {
        //把头部切换器移动到 固定头部固定keepShowArea区域。
        ViewGroup parent = (ViewGroup) headerBinding.radioGroup.getParent();
        parent.removeView(headerBinding.radioGroup);
        getHeaderHeper().keepShowArea.addView(headerBinding.radioGroup);

        //视频区域滑动不流畅不是这个smartlayout导致的
        //smartlayout移动到根部============
        ((ViewGroup) binding.smartLayout.getParent()).removeView(binding.smartLayout);//把刷新布局添加到根部
        getHeaderHeper().iosLayoutRootView.addView(binding.smartLayout);


        //把coordlayout移动到 smartlayout下面
        getHeaderHeper().iosLayoutRootView.removeView(getHeaderHeper().coordinatorLayout);//把原来coordinatorLayout根部的移动到smartlayout下面
        binding.smartLayout.addView(getHeaderHeper().coordinatorLayout);
        //把底部buttomycontainer移动出去移动到线性布局下面 称之为修复权重让 底部按钮始终底部


        binding.smartLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 1));//设置权重,因为添加到了线性布局了
        ViewGroup parentButtonContainer = (ViewGroup) getHeaderHeper().buttomContainer.getParent();
        parentButtonContainer.removeView(getHeaderHeper().buttomContainer);
        getHeaderHeper().iosLayoutRootView.addView(getHeaderHeper().buttomContainer);


        //添加发送消息按钮到底部固定
        LayoutInflater inflater = LayoutInflater.from(this);
        viewSendMsg = inflater.inflate(R.layout.view_item_young_send_msg, getHeaderHeper().buttomContainer, false);
        viewSendMsg.findViewById(R.id.btn_send_msg).setOnClickListener(this);
        getHeaderHeper().moveViewToBottomContainer(viewSendMsg);


    }

最后,我打算封装成一个库,可以解决底部固定问题又可以扩展控制随时可以砍掉这个功能,或者恢复这个功能

在附上我又调整过的

package com.buyao.tv.activity.base;

import android.graphics.Color;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.design.widget.CoordinatorLayout;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.buyao.tv.R;
import com.buyao.tv.global.AppContext;
import com.buyao.tv.ui.materialdesign.OnAppBarStateChangedListener;
import com.buyao.tv.util.Prt;

/**
 * Created by qssq on 2018/1/30 qssq666@foxmail.com
 * 2个产品经理,一个产品经理说要高仿ios 给每一个页面加大标题,滑动缩放成小标题,给我的感觉他是跪舔ios的,觉得ios什么都很美,出的设计图基本上是高仿ios界面。
 * 之后他被辞职了,这次来一个另外一个产品经理又要砍掉大标题。
 */

public class IOSHeaderHeper {

    private View saveRootView;

    public IOSHeaderHeper(boolean needIosHeader) {
        this.needIosHeader = needIosHeader;
    }

    public IOSHeaderHeper() {

    }

    private static final String TAG = "IOSHeaderHeper";
    private boolean mShowIing;
    public ViewGroup iosLayoutRootView;
    public ViewGroup myContentView;
    public AppBarLayout appbarLayout;
    public TextView toolBar;
    public ViewGroup headViewWrapFix;
    public CollapsingToolbarLayout collapsingToolbarlayout;
    public ViewGroup buttomContainer;
    public TextView tvTitleBig;
    private View headView;
    public View viewIosHeader;
    public ViewGroup keepShowArea;
    public CoordinatorLayout coordinatorLayout;


    public boolean isNeedIosHeader() {
        return needIosHeader;
    }

    public void setNeedIosHeader(boolean needIosHeader) {
        this.needIosHeader = needIosHeader;
    }

    boolean needIosHeader = true;

    public void setHeaderTitle(String str) {

        if (!needIosHeader) {
            return;
        }
        toolBar.setText(str);
        collapsingToolbarlayout.setTitle(str);
        if (tvTitleBig != null) {
            tvTitleBig.setText(str);
        }
    }

    protected void switchLightMode() {

        if (!needIosHeader) {
            return;
        }

        collapsingToolbarlayout.setCollapsedTitleTextColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
        toolBar.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
        if (tvTitleBig == null) {
            Log.e(TAG, "无法设置头部");

        } else {
            tvTitleBig.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));

        }

        toolBar.setBackgroundColor(Color.WHITE);
        collapsingToolbarlayout.setBackgroundColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));
    }

    protected void switchNightMode() {
        if (!needIosHeader) {
            return;
        }

        collapsingToolbarlayout.setCollapsedTitleTextColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));
        toolBar.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));
        if (tvTitleBig == null) {
            Log.e(TAG, "无法设置头部");

        } else {
            tvTitleBig.setTextColor(AppContext.getInstance().getResources().getColor(R.color.colorWhite));

        }
        toolBar.setBackgroundColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
        collapsingToolbarlayout.setBackgroundColor(AppContext.getInstance().getResources().getColor(R.color.colorThemeBlack));
    }

    protected void onCreateViewFixFinish(View view) {


        if (!needIosHeader) {
            saveRootView = view;
            return;
        }

        ViewGroup parent = (ViewGroup) view.getParent();
        int index = parent.indexOfChild(view);
        parent.removeViewAt(index);

//        binding = DataBindingUtil.inflate(LayoutInflater.from(this), R.layout.ios11layout_wrap, parent, false);
        iosLayoutRootView = (ViewGroup) LayoutInflater.from(view.getContext()).inflate(getIos11Layout(), parent, false);
        myContentView = (ViewGroup) iosLayoutRootView.findViewById(R.id.my_content_view);

        coordinatorLayout = (CoordinatorLayout) iosLayoutRootView.findViewById(R.id.coordinator);
        appbarLayout = (AppBarLayout) iosLayoutRootView.findViewById(R.id.appbar);


        toolBar = (TextView) iosLayoutRootView.findViewById(R.id.toolbar);
        keepShowArea = (ViewGroup) iosLayoutRootView.findViewById(R.id.view_keep_show_area);


        buttomContainer = (ViewGroup) iosLayoutRootView.findViewById(R.id.buttom_container);
        collapsingToolbarlayout = (CollapsingToolbarLayout) iosLayoutRootView.findViewById(R.id.collapsing_toolbarlayout);
        headViewWrapFix = (ViewGroup) iosLayoutRootView.findViewById(R.id.head_view_wrap_fix);
        myContentView.addView(view);
        parent.addView(iosLayoutRootView);

//        LayoutTransition transition = new LayoutTransition();
//        transition.setAnimator(LayoutTransition.CHANGE_APPEARING, null);
//        ((ViewGroup) binding.toolbar.getParent()).setLayoutTransition(transition);

        appbarLayout.addOnOffsetChangedListener(new OnAppBarStateChangedListener() {
            @Override
            public void onStateChanged(AppBarLayout appBarLayout, State state) {

                if (state == State.EXPANDED) {
                    toolBar.setVisibility(View.GONE);
                    Prt.w(TAG, "展开中");
                } else if (state == State.COLLAPSED) {
                    toolBar.setVisibility(View.VISIBLE);
                    Prt.w(TAG, "收缩中");
                } else {

                }
            }

            @Override
            public void onScrolling(AppBarLayout appBarLayout, State state) {
            }
        });
    }

    /**
     * 把view移除然后添加到底部
     *
     * @param view
     */
    public void moveViewToBottomContainer(View view) {
        if (!needIosHeader) {
            return;
        }

        ViewGroup viewGroup = ((ViewGroup) view.getParent());
        if (viewGroup != null) {
            viewGroup.removeView(view);

        }
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, Gravity.CENTER);
        buttomContainer.addView(view, params);
    }

    /**
     * 头部插入
     *
     * @param
     * @return
     */
    public ViewGroup addHeadView() {

        if (!needIosHeader) {
            if (saveRootView == null) {

                throw new RuntimeException("抱歉,由于产品经理又要让所有界面取消大标题,于是乎我修改了很多界面,如果您看到本信息,说此界面程序员忘记修改了");
            }
            return addHeadView(saveRootView, getHeadViewDefaultResouce());

        }

        return addHeadView(getHeadViewDefaultResouce());
    }

    public ViewGroup addHeadView(int headViewResource) {

        if (!needIosHeader) {
            if (saveRootView == null) {

                throw new RuntimeException("抱歉,由于产品经理又要让所有界面取消大标题,于是乎我修改了很多界面,如果您看到本信息,说此界面程序员忘记修改了");
            }
            return addHeadView(saveRootView, headViewResource);
        }
        headView = LayoutInflater.from(headViewWrapFix.getContext()).inflate(headViewResource, headViewWrapFix, false);
        tvTitleBig = (TextView) headView.findViewById(R.id.view_head_center);
        viewIosHeader = headView.findViewById(R.id.view_head);
        headViewWrapFix.addView(headView);
        return headViewWrapFix;
    }

    public ViewGroup addHeadView(View view) {
        return addHeadView(view, getHeadViewDefaultResouce());
    }

    public ViewGroup addHeadView(View view, int headResource) {
        if (!needIosHeader) {
            view = LayoutInflater.from(view.getContext()).inflate(headResource, headViewWrapFix, false);


        }
        headView = view;
        tvTitleBig = (TextView) headView.findViewById(R.id.view_head_center);
        viewIosHeader = headView.findViewById(R.id.view_head);
        headViewWrapFix.addView(headView);
        return headViewWrapFix;
    }


    protected boolean isNeedHead() {
        return true;
    }

    protected int getIos11Layout() {
        return R.layout.ios11layout_wrap;
    }


    public int getHeadViewDefaultResouce() {
        if(isNeedIosHeader()){
        return  R.layout.view_head_ios11;

        }else{
            return R.layout.view_head_back;
        }
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容