记一次Android完整项目(2) 项目通用UI的实现

565 阅读1分钟

封装NavigationBar

原因:很多时候我们应用使用的Activity由于处于不同的界面,需要显示不同的效果,如:或许需要出现返回按钮;或许需要个人中心按钮等等,所以我们就将导航封装起来,当外部要使用时,就可以直接调用其布局,通过传递不同的参数来实现不同的界面效果。

步骤
1.在layout文件中创建一个nav_bar.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="@dimen/navBarHeight"
    android:background="@color/mainColor"
    android:paddingLeft="@dimen/marginSize"
    android:paddingRight="@dimen/marginSize">

    <ImageView
        android:id="@+id/iv_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/back"
        android:layout_gravity="center_vertical"/>

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="@dimen/navBarTitleSize"
        android:textColor="@android:color/white"
        android:text="音乐"
        android:layout_gravity="center"/>

    <ImageView
        android:id="@+id/iv_me"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/me"
        android:layout_gravity="right|center_vertical"/>

</FrameLayout>
2.在其他xml布局文件中通过<include layout = ""/>引用
<include layout="@layout/nav_bar" />
3.在父类的Activity.java中封装
/**
     * 初始化NavigationBar
     * @param isShowBack
     * @param title
     * @param isShowMe
     */
    protected void initNavBar (boolean isShowBack, String title, boolean isShowMe){

        mIvBack = fd(R.id.iv_back);
        mTvTitle = fd(R.id.tv_title);
        mIvMe = fd(R.id.iv_me);

        mIvBack.setVisibility(isShowBack ? View.VISIBLE : View.GONE);
        mTvTitle.setText(title);
        mIvMe.setVisibility(isShowMe ? View.VISIBLE : View.GONE);

        // 给返回键一个点击事件
        mIvBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

        mIvMe.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(BaseActivity.this,MeActivity.class));
            }
        });
    }
4.在使用的activity中调用并初始化
/**
     * 初始化view
     */
    private void initView (){
        initNavBar(false,"登录", false);

        mInputPhone = fd(R.id.input_phone);
        mInputPassword = fd(R.id.input_password);
    }