1.layout_common.xml

复用的布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 复用的布局文件 -->
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="wrap_content"
  6. android:orientation="horizontal" >
  7.  
  8. <TextView
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_weight="1" />
  12.  
  13. <Button
  14. android:id="@+id/common_button1"
  15. android:layout_width="wrap_content"
  16. android:layout_height="wrap_content"
  17. android:text="按钮1" />
  18.  
  19. <TextView
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_weight="1" />
  23.  
  24. <Button
  25. android:id="@+id/common_button2"
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:text="按钮2" />
  29.  
  30. <TextView
  31. android:layout_width="wrap_content"
  32. android:layout_height="wrap_content"
  33. android:layout_weight="1" />
  34.  
  35. <Button
  36. android:id="@+id/common_button3"
  37. android:layout_width="wrap_content"
  38. android:layout_height="wrap_content"
  39. android:text="按钮3" />
  40.  
  41. <TextView
  42. android:layout_width="wrap_content"
  43. android:layout_height="wrap_content"
  44. android:layout_weight="1" />
  45.  
  46. </LinearLayout>

2.layout_main.xml

主布局文件 ,在这里引用复用的布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 主布局文件 -->
  3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical" >
  7.  
  8. <RelativeLayout
  9. android:layout_width="match_parent"
  10. android:layout_height="0dp"
  11. android:layout_margin="16dp"
  12. android:layout_weight="1" >
  13. </RelativeLayout>
  14.  
  15. <!-- 在布局文件中引用复用的布局文件 -->
  16.  
  17. <include layout="@layout/layout_common" />
  18.  
  19. </LinearLayout>

3.CommonView.java

复用布局文件实例化。单独封装,接口回调。 避免重复写布局文件,避免重复实例化控件,避免重复设置监听方法

  1. package com.example.mytestapp;
  2.  
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8.  
  9. /**
  10. * 复用布局文件实例化
  11. */
  12. public class CommonView implements OnClickListener {
  13.  
  14. // 接口
  15. public interface OnCommonViewClick {
  16. public void onButton1Click(View v);
  17.  
  18. public void onButton2Click(View v);
  19.  
  20. public void onButton3Click(View v);
  21. }
  22.  
  23. public void setListener(OnCommonViewClick listener) {
  24. this.listener = listener;
  25. }
  26.  
  27. Context mContext;
  28. OnCommonViewClick listener;
  29.  
  30. public CommonView(Context context) {
  31. this.mContext = context;
  32. }
  33.  
  34. public Button button1, button2, button3;
  35.  
  36. public CommonView init() {
  37. button1 = (Button) ((Activity) mContext).findViewById(R.id.common_button1);
  38. button2 = (Button) ((Activity) mContext).findViewById(R.id.common_button2);
  39. button3 = (Button) ((Activity) mContext).findViewById(R.id.common_button3);
  40. button1.setOnClickListener(this);
  41. button2.setOnClickListener(this);
  42. button3.setOnClickListener(this);
  43. return this;
  44. }
  45.  
  46. @Override
  47. public void onClick(View v) {
  48. if (listener == null)
  49. return;
  50. switch (v.getId()) {
  51. case R.id.common_button1:
  52. listener.onButton1Click(v);
  53. break;
  54. case R.id.common_button2:
  55. listener.onButton2Click(v);
  56. break;
  57. case R.id.common_button3:
  58. listener.onButton3Click(v);
  59. break;
  60. default:
  61. break;
  62. }
  63. }
  64.  
  65. }

4.MainActivity.java

主界面实例化

  1. package com.example.mytestapp;
  2.  
  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.Toast;
  7.  
  8. /*
  9. * 问题:
  10. * 1.如何用代码改变控件的文字或颜色?
  11. */
  12.  
  13. public class MainActivity extends Activity implements CommonView.OnCommonViewClick {
  14.  
  15. int clickTimes = 0;
  16.  
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.layout_main);
  21. // 在这里实例化布局文件, 并实现监听接口方法
  22. // 只需要一行代码就可以直接完成复用代码块的实例化
  23. new CommonView(this).init().setListener(this);
  24. }
  25.  
  26. @Override
  27. public void onButton1Click(View v) {
  28. clickTimes++;
  29. // 在这里实现对应点击事件的方法
  30. Toast.makeText(this, "你点击了button" + clickTimes + "次", Toast.LENGTH_SHORT).show();
  31.  
  32. }
  33.  
  34. @Override
  35. public void onButton2Click(View v) {
  36. // 在这里实现对应点击事件的方法
  37. }
  38.  
  39. @Override
  40. public void onButton3Click(View v) {
  41. // 在这里实现对应点击事件的方法
  42. }
  43.  
  44. }

【Android-布局复用】 多个界面复用一个布局文件(一)的更多相关文章

  1. Android 手机卫士--实现设置界面的一个条目布局结构

    本文地址:http://www.cnblogs.com/wuyudong/p/5908986.html,转载请注明源地址. 本文以及后续文章,将一步步完善功能列表: 要点击九宫格中的条目,需要注册点击 ...

  2. 【Android-布局复用】 多个界面复用一个布局文件(二)

    多个界面复用一个布局界面 ,如何找到复用布局文件中的控件的id? 举个栗子: 1.  layout_common.xml 复用的布局文件,如何找到button 的id? <?xml versio ...

  3. Android性能优化之中的一个 布局优化

    本文为Android性能优化--布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不必要的嵌套和View节点.降低不必要的infalte及其它Layout方面 ...

  4. android界面设计之布局管理

    谈到android界面设计,各种布局样式不得不提!传统的布局方式有6种,我们会一一介绍. 在android studio2.2版本之后出现了一款超棒的布局方式,真正意义上的所见即所得,后面我们也会讲到 ...

  5. freemarker实现通用布局的模板拆分与复用

    原文:http://www.hawu.me/coding/733 一.基础页面布局 假设我们项目页面的通用布局如下图所示: 实现这样的布局的基本html代码如下:           XHTML   ...

  6. Android 手机卫士--导航界面1的布局编写

    本文地址:http://www.cnblogs.com/wuyudong/p/5943005.html,转载请注明出处. 本文实现导航界面1的布局的实现,效果如下图所示: 首先分析所使用的布局样式: ...

  7. android 引入一个布局库后该有的操作

    背景 引入一个布局库:com.zhy:percent-support-extends 然后sync now 成功了,也就是同步成功了. 然而开始使用的时候报告了: The following clas ...

  8. Android笔记——在布局文件中插入另一个布局文件

    假如有一个布局文件A.xml想把另外一个布局文件B.xml引进其布局,则可以通过下面的代码 <include layout="@layout/B" />

  9. Android Studido下的应用性能优化总结--布局优化

    前言:一个应用的成功=产品设计*性能 ,再此我们不讨论一个应用的设计,那交给我们可爱又可恨的产品经理和UI设计师来决定!所以这里分步骤讨论如何提升一个应用的性能,这里先探讨布局优化问题. 布局优化 避 ...

随机推荐

  1. Linux Centos下软件的安装与卸载方法

    转载于: http://blog.csdn.net/zolalad/article/details/11368879 Linux下软件的安装与卸载   第一章   linux下安装软件,如何知道软件安 ...

  2. 15.Ansible安装与配置简单版

    Ansible是一个简单高效的自动化运维管理工具,用Python开发,能大批量管理N多台机器,可以并发的在多台机器上部署应用.安装软件.执行命令.配置和编排任务. 一.Ansible工作机制 从图中可 ...

  3. gin获取全部参数

    原文链接:https://blog.csdn.net/keyunq/article/details/82226280 一直都是用结构体接收参数,假如事先不清楚参数名,或者参数是不固定的,就要动态获取. ...

  4. 7-MySQL DBA笔记-研发规范

    第7章 研发规范 本章将为读者解读一份研发规范.为了更好地协同工作和确保所开发的应用尽可能的稳定.高效,建立一套数据库相关的研发规范是很有必要的,虽然研发规范的确立和推广是一项很耗时的工作,但所取得的 ...

  5. windows下将jar包打入maven仓库

    mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.27 -Dpac ...

  6. C# Redis分布式锁的应用 - 叶子栈 - SegmentFault 思否

    原文:C# Redis分布式锁的应用 - 叶子栈 - SegmentFault 思否 叶子 1 微信扫一扫 新浪微博 Twitter Facebook C# Redis分布式锁的应用 c#redis分 ...

  7. react用高阶组件实现路由守卫

    react-router不像vue-router一样有很多钩子函数,可以做路由守卫.想实现路由守卫,可以用高阶组件来实现. @connect(state => ({ isLogin: state ...

  8. arcgis 服务网页打开需要输入用户名和密码问题解决

    解决方法: 在站点manager中,检查服务的安全性,确认是否是公共.如果不是,设置为公共,面向任何人:如果服务已经被设置为面向公共,那么先设置为私有,面向所选用户,然后再设置为公共,面向任何人 如果 ...

  9. YOLOV3 训练WIDER_FACE

    1. dowload the img and labels : http://mmlab.ie.cuhk.edu.hk/projects/WIDERFace/index.html 2.

  10. docker 无法使用vi

    更新来源 apt-get update   安装vim apt-get install -y vim