有时候我们需要在不同Activity中使用相似的标题,这时候我们可以定义一个BaseHeadActivity来代表标题,在其它Activity中继承BaseHeadActivity就可以实现标题的重用,也可以在BaseHeadActivity中定义一些方法控制标题组件的显示样式。
实现的最核心的部分是BaseHeadActivity需要重写父类的三个setContentView方法,BaseHeadActivity的布局文件要有一个View容器,用来存放其它Activity的布局。
(1)首先来看看 BaseHeadActivity 的布局文件定义:
<span style="font-size:12px;"><strong><span style="font-size:18px;">activity_basehead.xml</span></strong>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="@dimen/dimen_title_bar_height"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:background="@color/color_title_bar_blue"
android:padding="@dimen/dimen_layout_margin_little"
android:id="@+id/rl_title_bar">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/title"
android:id="@+id/tv_title"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textColor="@color/color_text_while"
android:textSize="@dimen/dimen_level1_text_size" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img_button"
android:layout_centerVertical="true"
android:layout_alignParentStart="true"
android:background="@mipmap/arrow_back"
android:layout_marginLeft="@dimen/dimen_layout_margin_little" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:id="@+id/<span style="color:#FF6666;">rl_container</span>"></RelativeLayout>
</LinearLayout>
</span>
(2)然后是在 BaseHeadActivity 中重写父类 Activity 的三个 setContentView 方法,当继承 BaseHeadActivity 的类在调用setContentView 方法时,布局就会添加到在View容器中。
<span style="font-size:12px;">@Override
public void setContentView(View view) {
setContentView(view,view.getLayoutParams());
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
<span style="color:#FF6666;">rl_container</span>.addView(view,params);
}
@Override
public void setContentView(int layoutResID) {
View v = getLayoutInflater().inflate(layoutResID,rl_container,false);
setContentView(v);
}</span>
完整的
BaseHeadActivity 代码:
public class BaseHeadActivity extends Activity {
private RelativeLayout rl_title_bar,rl_container;
private TextView tv_title;
private ImageButton img_button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_basehead);
assignview();
}
@Override
public void setContentView(View view) {
setContentView(view,view.getLayoutParams());
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
rl_container.addView(view,params);
}
@Override
public void setContentView(int layoutResID) {
View v = getLayoutInflater().inflate(layoutResID,rl_container,false);
setContentView(v);
}
private void assignview() {
rl_title_bar = (RelativeLayout)findViewById(R.id.rl_title_bar);
rl_container = (RelativeLayout)findViewById(R.id.rl_container);
tv_title = (TextView)findViewById(R.id.tv_title);
img_button = (ImageButton)findViewById(R.id.img_button);
}
//设置标题
protected void setTitle(String title){
tv_title.setText(title);
}
//隐藏左按钮
protected void hideBackButton(){
img_button.setVisibility(View.GONE);
}
//显示左按钮
protected void showBackButton(){
img_button.setVisibility(View.VISIBLE);
}
//添加左按钮点击事件
protected void setBackButtonOnClickListener(View.OnClickListener listener){
img_button.setOnClickListener(listener);
}
//设置标题字体颜色
protected void setTitleTextColor(int color){
tv_title.setTextColor(color);
}
//设置标题颜色
protected void setTitleBarColor(int color){
rl_title_bar.setBackgroundColor(color);
}
}
(3)在需要使用标题的Activity继承
BaseHeadActivity 就可以了。