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
- Android MainActivity如何加载BaseActivity的布局
- Android 的BaseActivity
- 论如何写出优雅的Android代码--------BaseActivity
- android如何设置一开始先加载LoginActivity(登陆)页面而不是MainActivity主页面
- Android中BaseActivity的用法
- Android中BaseActivity的使用
- Android 基类BaseActivity的封装
- Android 基类BaseActivity的封装
- 《一个Android工程的从零开始》-2、base(一) BaseActivity布局
- 简化网络请求&页面加载的baseActivity
- Android开发(31) 布局文件中tools:context=".MainActivity的作用
- 《一个Android工程的从零开始》-3、base(二) BaseActivity布局相关代码——空布局控件的运用
- android BaseActivity
- android如何提高加载布局页面速度
- android如何提高加载布局页面速度
- android jar 如何加载布局文件
- Android的BaseActivity的设计问题
- Android中基类BaseActivity的设计与实现
- 剑指offer-反转链表
- MySQL数据库总结(8)字符集与校对集
- Object-C学习笔记——内存管理
- Django 数据模型进阶
- C语言指针函数链表复习
- Android MainActivity如何加载BaseActivity的布局
- 1500: [NOI2005]维修数列
- HBASE---数据存储实践
- 第三周项目4:穷举法解决组合问题
- 自定义Log
- FastSocket.Net
- 文章标题
- Eratosthenes筛计算N以内的素数
- uva 10055