Android MainActivity如何加载BaseActivity的布局

来源:互联网 发布:王师傅知乎 编辑:程序博客网 时间:2024/06/01 14:16

BaseActivity

package com.example.android_002.activity;import com.example.android_002.R;import com.example.android_002.utils.ToastUtils;import android.app.Activity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.view.ViewGroup;import android.view.Window;import android.widget.LinearLayout;public class BaseActivity extends Activity {    private LinearLayout parentLinearLayout; //把父类的activity和子类的activity的view都add到这里来    @Override    protected void onCreate(Bundle savedInstanceState) {        // TODO Auto-generated method stub        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        initContentView(R.layout.activity_base);    }    //初始化content的View    /**     * 以下代码可以这样理解     * 每个Activity的窗口布局都有一个根布局     * 那么以下的几个实例对象group ,parentLinearLayout,activityBase(xml子布局将他理解成一个View对象)的关系可以表示成如下关系     * group : 爷爷(findViewById(android.R.id.content);android.R.id.content是Android内部提供的每一个活动的根布局都是这个id)     * parentLinearLayout:父亲     * activityBase:儿子     *      * group.addView(parentLinearLayout); 表示将父亲的布局依附到爷爷的布局上     * LayoutInflater.from(this).inflate(activityBase, parentLinearLayout, true);//表示将儿子的布局依附到父亲布局上,true表示同意依附的意思     * 通过以上两句显然爷爷,父亲,儿子的布局的关系是相互联系的,都是按照顺序链接在一起的     *      * @param activityBase     */    private void initContentView(int layoutResID) {        // TODO Auto-generated method stub        ViewGroup group = (ViewGroup) findViewById(android.R.id.content);  //得到窗口的根布局        group.removeAllViews(); //首先先移除在根布局上的组件        //创建自定义父布局        parentLinearLayout  = new LinearLayout(this);        parentLinearLayout.setOrientation(LinearLayout.VERTICAL);        group.addView(parentLinearLayout); //将自定义的父布局,加载到窗口的根布局上        LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true);//这句话的意思就是将自定义的子布局加到parentLinearLayout上,true的意思表示添加上去    }    /**     * 这句的意思表示将MainActivity的布局又加到parentLinearLayout上     */    @Override    public void setContentView(int layoutResID) {        // TODO Auto-generated method stub//      super.setContentView(layoutResID);//一定不能调用这句话,不然之前做的添加的布局都被覆盖了        LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true);    }    @Override    public void setContentView(View view) {        // TODO Auto-generated method stub        super.setContentView(view);        parentLinearLayout.addView(view);    }    @Override    public void setContentView(View view, LayoutParams params) {        // TODO Auto-generated method stub        super.setContentView(view, params);        parentLinearLayout.addView(view,params);    }}

activity_base.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:orientation="vertical"     >    <com.example.android_002.CustemTitle         android:layout_width="match_parent"        android:layout_height="wrap_content"       /></LinearLayout>

CustemTitle

package com.example.android_002;import com.example.android_002.utils.ToastUtils;import android.app.Activity;import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.Button;import android.widget.LinearLayout;import android.widget.TextView;public class CustemTitle extends LinearLayout implements View.OnClickListener{    private Button btnback;    private Button btnEdit;    private TextView tvShow;    public CustemTitle(Context context, AttributeSet attrs) {        super(context, attrs);        // TODO Auto-generated constructor stub        View view = LayoutInflater.from(context).inflate(R.layout.layout_title, this);        initComp(view);    }    private void initComp(View view) {        // TODO Auto-generated method stub        btnEdit = (Button) view.findViewById(R.id.btn_title_edit);        btnback = (Button) view.findViewById(R.id.btn_title_back);        btnEdit.setOnClickListener(this);        btnback.setOnClickListener(this);        tvShow = (TextView) view.findViewById(R.id.tv_title_show);    }    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.btn_title_back:            ((Activity)getContext()).finish();            break;        case R.id.btn_title_edit:            ToastUtils.toastShort("编辑");            break;        default:            break;        }    }    /**     * 设置标题     * @param title 设置标题的文本     */    public void setTitleText(String title){        tvShow.setText(title);    }}

layout_title.xml

<?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="wrap_content"    android:orientation="horizontal"     android:background="#00f">    <Button         android:id="@+id/btn_title_back"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:textColor="#fff"        android:layout_margin="5dp"        android:text="后退"/>    <TextView         android:id="@+id/tv_title_show"        android:layout_width="0dp"        android:layout_weight="1"        android:gravity="center"        android:textColor="#fff"        android:textSize="20sp"        android:layout_gravity="center"        android:layout_height="wrap_content"        android:text="this is a TextView"/>    <Button         android:layout_gravity="center"        android:id="@+id/btn_title_edit"        android:layout_margin="5dp"        android:textColor="#fff"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="编辑"/></LinearLayout>

MainActivity

package com.example.android_002;import com.example.android_002.activity.BaseActivity;import com.example.android_002.utils.ToastUtils;import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.View;public class MainActivity extends BaseActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }   public void click(View view){       ToastUtils.toastShort("MainActivity");   }}

效果如下:

这里写图片描述

0 0
原创粉丝点击