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;
@Override
protected void onCreate (Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
initContentView(R.layout.activity_base);
}
/**
* 以下代码可以这样理解
* 每个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) {
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 );
}
/**
* 这句的意思表示将MainActivity的布局又加到parentLinearLayout上
*/
@Override
public void setContentView (int layoutResID) {
LayoutInflater.from(this ).inflate(layoutResID, parentLinearLayout, true );
}
@Override
public void setContentView (View view) {
super .setContentView(view);
parentLinearLayout.addView(view);
}
@Override
public void setContentView (View view, LayoutParams params) {
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);
View view = LayoutInflater.from(context).inflate(R.layout.layout_title, this );
initComp(view);
}
private void initComp (View view) {
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" );
}
}
效果如下: