封装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);
}