标题栏封装

来源:互联网 发布:飞行员夹克搭配男 知乎 编辑:程序博客网 时间:2024/06/05 12:50

自定义title

public class Title extends LinearLayout {    /**     * 上下文     */    private Context mContext;    /**     * 左侧按钮     */    private ImageButton mLeftBtn;    /**     * 左侧文字     */    private TextView mLeftTxt;    /**     * 左侧布局     */    private LinearLayout mLeftLayout;    /**     * 标题     */    private TextView mTitleTv;    /**     * 右侧文字     */    private TextView mRightText;    /**     * 右侧按钮     */    private ImageView mRightImg;    /**     * 右侧布局     */    private LinearLayout mRightLayout;    /**     * 标题栏点击事件     */    private OnTitleBarClickListener mTitleBarClickListener;    /**     * 构造标题栏     */    public Title(Context context) {        super(context);        mContext = context;        init();    }    /**     * 初始化     */    private void init() {        LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);        View contentView = null;        contentView = inflater.inflate(R.layout.view_title_bar, this);        mLeftBtn = contentView.findViewById(R.id.btn_left);        mLeftLayout = (LinearLayout) contentView.findViewById(R.id.li_left_btn);        mTitleTv = (TextView) contentView.findViewById(R.id.tv_title);        mRightLayout = (LinearLayout) contentView.findViewById(R.id.li_right_layout);        mRightText = (TextView) contentView.findViewById(R.id.tv_right_btn);        mLeftTxt = (TextView) contentView.findViewById(R.id.tv_left_txt);        mRightImg = (ImageView) contentView.findViewById(R.id.tv_right_img);        /**         * 左侧布局点击事件         * */        mLeftLayout.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View arg0) {                mTitleBarClickListener.leftBtnClick(arg0);            }        });        /**         * 右侧布局点击事件         * */        mRightLayout.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mTitleBarClickListener.rightBtnClick(v);            }        });    }    /**     * 设置右边布局是否可见     */    public void setRightButtonVisibility(boolean isShow) {        if (isShow) {            mRightLayout.setVisibility(View.VISIBLE);        } else {            mRightLayout.setVisibility(View.GONE);        }    }    /**     * 设置右边图片的资源     */    public void setRightButtonDrawable(int nResId) {        mRightText.setVisibility(View.GONE);        mRightImg.setVisibility(View.VISIBLE);        mRightImg.setBackgroundResource(nResId);    }    /**     * 设置右边的文字     */    public void setRightText(String nText) {        mRightText.setVisibility(View.VISIBLE);        mRightText.setText(nText);        mRightImg.setVisibility(View.GONE);    }    /**     * 设置标题栏监听事件     */    public void setOnTitleBarClickListener(            OnTitleBarClickListener titleBarClickListener) {        this.mTitleBarClickListener = titleBarClickListener;    }    /**     * 设置标题     */    public void setTitle(int resId) {        mTitleTv.setText(mContext.getText(resId));    }    /**     * 设置标题     */    public void setTitle(String title) {        mTitleTv.setText(title);    }    /**     * 设置左边按钮图片资源     */    public void setLeftBtnBackground(int id) {        mLeftTxt.setVisibility(GONE);        mLeftBtn.setVisibility(VISIBLE);        mLeftBtn.setBackgroundResource(id);    }    /**     * 设置左边按钮文字     */    public void setLeftTxt(String str) {        mLeftTxt.setVisibility(VISIBLE);        mLeftBtn.setVisibility(GONE);        mLeftTxt.setText(str);    }    /**     * 设置左边布局不可见     */    public void setLeftLayoutVisibility(boolean isShow) {        if (isShow) {            mLeftLayout.setVisibility(View.VISIBLE);        } else {            mLeftLayout.setVisibility(View.GONE);        }    }    /**     * 按钮点击事件接口     */    public interface OnTitleBarClickListener {        /**         * TitleBar 左侧按钮\文字点击事件         */        void leftBtnClick(View arg0);        /**         * TitleBar 右侧按钮\文字点击事件         */        void rightBtnClick(View v);    }}
定义基类BaseActivity

public class BaseActivity extends Activity implements Title.OnTitleBarClickListener {    /**     * 沉浸状态栏占位view     */    private View positionView;    private Title mTitleBar;    /**     * 上下文     */    protected Context mContext;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mContext = this;    }    @Override    public void setContentView(@LayoutRes int layoutResID) {        // 设置TopBar        mTitleBar = new Title(this);        mTitleBar.setVisibility(View.VISIBLE);        mTitleBar.setOnTitleBarClickListener(this);        ViewGroup localViewGroup = genRealRootView();        ViewGroup root = genRootView();        View paramView = getLayoutInflater().inflate(layoutResID, null);        root.addView(this.mTitleBar, LinearLayout.LayoutParams.FILL_PARENT,                LinearLayout.LayoutParams.WRAP_CONTENT);        root.addView(paramView, LinearLayout.LayoutParams.FILL_PARENT,                LinearLayout.LayoutParams.FILL_PARENT);        localViewGroup.addView(root, LinearLayout.LayoutParams.FILL_PARENT,                LinearLayout.LayoutParams.FILL_PARENT);        localViewGroup.setBackgroundResource(R.color.white);        // 1. 沉浸式状态栏        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            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);            } else {                getWindow()                        .setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            }        }        positionView = mTitleBar.findViewById(R.id.position_view);        dealStatusBar(); // 调整状态栏高度        super.setContentView(localViewGroup);    }    /**     * 调整沉浸式菜单的title     */    private void dealStatusBar() {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            int statusBarHeight = getStatusBarHeight();            ViewGroup.LayoutParams lp = positionView.getLayoutParams();            lp.height = statusBarHeight;            positionView.setLayoutParams(lp);        }    }    private int getStatusBarHeight() {        Class<?> c = null;        Object obj = null;        Field field = null;        int x = 0, statusBarHeight = 0;        try {            c = Class.forName("com.android.internal.R$dimen");            obj = c.newInstance();            field = c.getField("status_bar_height");            x = Integer.parseInt(field.get(obj).toString());            statusBarHeight = getResources().getDimensionPixelSize(x);        } catch (Exception e1) {            e1.printStackTrace();        }        return statusBarHeight;    }    public ViewGroup genRealRootView() {        LinearLayout localLinearLayout = new LinearLayout(this);        localLinearLayout.setOrientation(LinearLayout.VERTICAL);        return localLinearLayout;    }    public ViewGroup genRootView() {        LinearLayout localLinearLayout = new LinearLayout(this);        localLinearLayout.setOrientation(LinearLayout.VERTICAL);        return localLinearLayout;    }    /**     * 设置标题栏文字资源     */    public void setTitle(int resId) {        mTitleBar.setTitle(resId);    }    /**     * 设置标题栏文字     */    protected void setTitle(String title) {        mTitleBar.setTitle(title);    }    /**     * 设置标题栏是否可见     */    protected void setTitleBarVisiable(boolean isShow) {        if (isShow) {            mTitleBar.setVisibility(View.VISIBLE);        } else {            mTitleBar.setVisibility(View.GONE);        }    }    /**     * 设置标题栏右侧是否可见     */    protected void setRightButtonVisibility(boolean isShow) {        mTitleBar.setRightButtonVisibility(isShow);    }    /**     * 设置标题栏左侧是否可见     */    protected void setLeftButtonVisibility(boolean isShow) {        mTitleBar.setLeftLayoutVisibility(isShow);    }    /**     * 设置右侧图片资源     */    protected void setRightButtonDrawable(int resId) {        mTitleBar.setRightButtonDrawable(resId);    }    /**     * 设置右侧按钮文字     */    protected void setRightButtonText(String text) {        mTitleBar.setRightText(text);    }    /**     * 设置左侧按钮文字     */    protected void setLeftButtonText(String text) {        mTitleBar.setLeftTxt(text);    }    /**     * 设置左边按钮图片资源     */    protected void setLeftButtonDrawable(int resId) {        mTitleBar.setLeftBtnBackground(resId);    }    //页面跳转方法    protected void startActivity(Class<? extends Activity> cls) {        startActivity(cls, null);    }    protected void startActivity(Class<? extends Activity> cls, Bundle bundle) {        Intent intent = new Intent(mContext, cls);        if (bundle != null) {            intent.putExtras(bundle);        }        startActivity(intent);    }    protected void startActivityForResult(Class<? extends Activity> cls,                                          Bundle bundle, int requestCode) {        Intent localIntent = new Intent();        if (bundle != null) {            localIntent.putExtras(bundle);        }        localIntent.setClass(this, cls);        startActivityForResult(localIntent, requestCode);    }    //回调方法    protected void startActivityForResult(Class<? extends Activity> cls,                                          int requestCode) {        startActivityForResult(cls, null, requestCode);    }    @Override    public void leftBtnClick(View v) {        finish();    }    @Override    public void rightBtnClick(View v) {    }}
调用:

public class MainActivity extends BaseActivity {    @Bind(R.id.title_bar)    Button titleBar;    @Bind(R.id.title_bar2)    Button titleBar2;    @Bind(R.id.title_bar3)    Button titleBar3;    @Bind(R.id.title_bar4)    Button titleBar4;    @Bind(R.id.title_bar5)    Button titleBar5;    @Bind(R.id.title_bar6)    Button titleBar6;    @Bind(R.id.title_bar7)    Button titleBar7;    @Bind(R.id.title_bar8)    Button titleBar8;    private boolean tle = false;    private boolean leftbln = true;    private boolean rightbln = true;    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main_layout);        ButterKnife.bind(this);    }    @OnClick({R.id.title_bar, R.id.title_bar2, R.id.title_bar3, R.id.title_bar4, R.id.title_bar5, R.id.title_bar6, R.id.title_bar7, R.id.title_bar8})    public void onViewClicked(View view) {        switch (view.getId()) {            case R.id.title_bar:                if (!tle) {                    tle = true;                    setTitleBarVisiable(false);                } else {                    tle = false;                    setTitleBarVisiable(true);                }                break;            case R.id.title_bar2:                setLeftButtonDrawable(R.mipmap.ic_launcher);                break;            case R.id.title_bar3:                setLeftButtonText("左侧文字");                break;            case R.id.title_bar4:                setRightButtonDrawable(R.mipmap.ic_launcher);                break;            case R.id.title_bar5:                setRightButtonText("右侧按钮");                break;            case R.id.title_bar6:                setTitle("我是标题");                break;            case R.id.title_bar7:                if (leftbln) {                    leftbln = false;                    setLeftButtonVisibility(false);                } else {                    leftbln = true;                    setLeftButtonVisibility(true);                }                break;            case R.id.title_bar8:                if (rightbln) {                    rightbln = false;                    setRightButtonVisibility(false);                } else {                    rightbln = true;                    setRightButtonVisibility(true);                }                break;        }    }    @Override    public void leftBtnClick(View v) {//        super.leftBtnClick(v);        Toast.makeText(mContext, "点击了左侧", Toast.LENGTH_LONG).show();    }    @Override    public void rightBtnClick(View v) {        Toast.makeText(mContext, "点击了右侧", Toast.LENGTH_LONG).show();    }}
资源文件view_title_bar

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/title_id"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:background="#F54337">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical">        <View            android:id="@+id/position_view"            android:layout_width="1px"            android:layout_height="1px" />        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="50dp">            <LinearLayout                android:id="@+id/li_left_btn"                android:layout_width="wrap_content"                android:layout_height="fill_parent"                android:layout_alignParentLeft="true"                android:layout_centerVertical="true"                android:background="@drawable/title_bar_lay_backgroud"                android:orientation="horizontal"                android:paddingLeft="16dp"                android:paddingRight="16dp">                <ImageButton                    android:id="@+id/btn_left"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:layout_gravity="center"                    android:background="@mipmap/back"                    android:scaleType="fitXY" />                <TextView                    android:id="@+id/tv_left_txt"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:layout_gravity="center_vertical"                    android:scaleType="fitXY"                    android:text="按钮"                    android:textColor="#ffffff"                    android:textSize="16sp"                    android:visibility="gone" />            </LinearLayout>            <TextView                android:id="@+id/tv_title"                android:layout_width="wrap_content"                android:layout_height="wrap_content"                android:layout_centerInParent="true"                android:text="标题"                android:textColor="#ffffff"                android:textSize="18sp" />            <LinearLayout                android:id="@+id/li_right_layout"                android:layout_width="wrap_content"                android:layout_height="match_parent"                android:layout_alignParentRight="true"                android:layout_centerVertical="true"                android:background="@drawable/title_bar_lay_backgroud"                android:gravity="center"                android:paddingLeft="16dp"                android:paddingRight="16dp">                <TextView                    android:id="@+id/tv_right_btn"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:text="完成"                    android:textColor="#ffffff"                    android:textSize="16sp" />                <ImageView                    android:id="@+id/tv_right_img"                    android:layout_width="wrap_content"                    android:layout_height="wrap_content"                    android:background="@android:drawable/btn_plus"                    android:scaleType="fitXY"                    android:visibility="gone" />            </LinearLayout>        </RelativeLayout>    </LinearLayout></RelativeLayout>
效果图:

源码链接自定义titleBar



原创粉丝点击