公用标题栏(TitleBar)

来源:互联网 发布:ubuntu 图形界面 编辑:程序博客网 时间:2024/05/22 09:12

开发的时候标题栏随着不同的activity变化而相应发生变化,如果一个一个写显得很麻烦。可以在BaseActivity中自定义一个标题栏,其余activity通过继承而简单的通过BaseActivity中的某个方法直接进行标题栏的设置。

1、定义BaseActivity,在BaseActivity中自定义一个标题栏,并曝露出一个方法,可以让子类通过继承而实现直接设置标题栏中的文字,设置按钮和返回按钮

public classBaseActivity extends AppCompatActivity {@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic voidonClick(View v) {Intent intent =newIntent(BaseActivity.this,SettingActivity.class);startActivity(intent);}});}}}

2、在其余activity中继承BaseActivity,并通过setMyActionBar(boolaean,String,boolean),方法进行本页标题栏的设置,其中第一个参数代表是否显示返回按钮,第二个参数代表标题栏文字,第三个代表是否显示设置按钮

SettingActivity代码如下:

public classSettingActivityextendsBaseActivity {@Overrideprotected voidonCreate(@NullableBundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_setting);setMyActionBar("设置",true,false);}}

MainActivity代码如下:

public classMainActivityextendsBaseActivity {@Overrideprotected 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

这里写图片描述

这里写图片描述

0 0