您的位置:首页 > 移动开发 > Android开发

Android 实现标题重用

2015-06-24 09:01 351 查看
有时候我们需要在不同Activity中使用相似的标题,这时候我们可以定义一个BaseHeadActivity来代表标题,在其它Activity中继承BaseHeadActivity就可以实现标题的重用,也可以在BaseHeadActivity中定义一些方法控制标题组件的显示样式。

实现的最核心的部分是BaseHeadActivity需要重写父类的三个setContentView方法,BaseHeadActivity的布局文件要有一个View容器,用来存放其它Activity的布局。

(1)首先来看看[b] BaseHeadActivity 的布局文件定义:[/b]









<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
就可以了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: