开发的时候标题栏随着不同的activity变化而相应发生变化,如果一个一个写显得很麻烦。可以在BaseActivity中自定义一个标题栏,其余activity通过继承而简单的通过BaseActivity中的某个方法直接进行标题栏的设置。
1、定义BaseActivity,在BaseActivity中自定义一个标题栏,并曝露出一个方法,可以让子类通过继承而实现直接设置标题栏中的文字,设置按钮和返回按钮
public classBaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void setMyActionBar(String title,boolean hasBackButton,boolean hasSettingButton){
View viewTitleBar = getLayoutInflater().inflate(R.layout.actionbar_myview, null);
ActionBar.LayoutParams lp =newActionBar.LayoutParams(
ActionBar.LayoutParams.MATCH_PARENT,
ActionBar.LayoutParams.MATCH_PARENT,
Gravity.CENTER);
ActionBar actionBar = getSupportActionBar();
actionBar.setCustomView(viewTitleBar,lp);
actionBar.setDisplayShowHomeEnabled(false);//去掉导航
actionBar.setDisplayShowTitleEnabled(false);//去掉标题
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
actionBar.setDisplayShowCustomEnabled(true);
TextView tvTitle = (TextView) actionBar.getCustomView().findViewById(R.id.tv_action_text);
tvTitle.setText(title);
ImageButton leftImageButton = (ImageButton)actionBar.getCustomView().findViewById(R.id.ibtn_left_back);
if(!hasBackButton) {
leftImageButton.setVisibility(View.INVISIBLE);
}else{
leftImageButton.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
BaseActivity.this.finish();
}
});
}
ImageButton rightImageButton = (ImageButton)actionBar.getCustomView().findViewById(R.id.ibtn_right_setting);
if(!hasSettingButton) {
rightImageButton.setVisibility(View.INVISIBLE);
}else{
rightImageButton.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Intent intent =newIntent(BaseActivity.this,SettingActivity.class);
startActivity(intent);
}
});
}
}
}
2、在其余activity中继承BaseActivity,并通过setMyActionBar(boolaean,String,boolean),方法进行本页标题栏的设置,其中第一个参数代表是否显示返回按钮,第二个参数代表标题栏文字,第三个代表是否显示设置按钮
SettingActivity代码如下:
public classSettingActivityextendsBaseActivity {
@Override
protected voidonCreate(@NullableBundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
setMyActionBar("设置",true,false);
}
}
MainActivity代码如下:
public classMainActivityextendsBaseActivity {
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setMyActionBar("标题栏",false,true);
}
}
下面上布局文件
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:id="@+id/ibtn_left_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_navigate_before_black_24dp"
android:layout_gravity="center_vertical"/>
android:text="2222"
android:layout_gravity="center_vertical"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:id="@+id/tv_action_text"
android:textSize="20sp"
android:layout_height="wrap_content"/>
android:layout_gravity="center_vertical"
android:src="@drawable/ic_build_black_24dp"
android:id="@+id/ibtn_right_setting"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
都是通过继承BaseActivity中的setMyActionBar()方法进行标题栏和按钮的设置的,简单又实用,仅仅定义了一个actionBar