android案例--继承实现UI公用

作者: return_toLife | 来源:发表于2017-08-20 00:21 被阅读78次

其实这次是自己学习的时候遇到的坑:

  • 需求分析:让activity共享一部分UI
  • 应用案例:toolbar,或者只想改变activity中的点击事件,ui复用
  • 思路分析:写一个activity的子类,然后将公共部分的UI在这个子类activity中 实现,命名为BaseActivity,最后所有要共享此部分UI的activity都继承这个BaseActivity

国际惯例,效果图:

Paste_Image.png

1. 我们一般是用setContentView来渲染我们的UI,但是父类调用一次,子类调用一次,总会有一方会被覆盖的,那么我们先来看看setContentView到底做了什么

Paste_Image.png

(ps:图片出处后面会说明)

一、DecorView为整个Window界面的最顶层View。

二、DecorView只有一个子元素为LinearLayout。代表整个Window界面,包含通知栏,标题栏,内容显示栏三块区域。

三、LinearLayout里有两个FrameLayout子元素。
(20)为标题栏显示界面。只有一个TextView显示应用的名称。也可以自定义标题栏,载入后的自定义标题栏View将加入FrameLayout中。
(21)为内容栏显示界面。就是setContentView()方法载入的布局界面,加入其中。
所以要实现activity具有公共部分的UI,重写setContentView()方法;

2. ok,那我们现在来实现BaseActivity并重写setContentView()方法:


public class BaseActivity extends Activity {

   //把父类activity和子类activity的view都add到这里
    private LinearLayout parentLinearLayout;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initContentView(R.layout.layout_baseactivity);
    }

    /**
     * 初始化contentview
     */
    private void initContentView(int layoutResID) {
        ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.content);
        viewGroup.removeAllViews();
        parentLinearLayout = new LinearLayout(this);
        parentLinearLayout.setOrientation(LinearLayout.VERTICAL);
        viewGroup.addView(parentLinearLayout);
        LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true);


    }


    @Override
    public void setContentView(int layoutResID) {

        LayoutInflater.from(this).inflate(layoutResID, parentLinearLayout, true);

    }

    @Override
    public void setContentView(View view) {

        parentLinearLayout.addView(view);
    }

    @Override
    public void setContentView(View view, ViewGroup.LayoutParams params) {

        parentLinearLayout.addView(view, params);
    }
}

(ps:三个重写的setContentView可以根据自己的情况来重写哪个)

3. 然后子类按照我们正常的情况写,就能显示两个布局在一起了

原文地址

相关文章

  • android案例--继承实现UI公用

    其实这次是自己学习的时候遇到的坑: 需求分析:让activity共享一部分UI 应用案例:toolbar,或者只想...

  • RecyclerView折叠item的垃圾实现方法

    Android 原生ExpandableListView 是继承ListView绘制,可直接实现此UI,自行搜索使...

  • 31-封装、继承、多态

    封装、继承、多态 面向对象编程有三大重要特征:封装、继承和多态。 继承 继承机制实现了代码的复用,多个类公用的代码...

  • Android 异步处理

    Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面 概述:每个Android应用...

  • js的prototype()应用

    给原型对象增加函数,就是让对象拥有公用的函数; 给原型对象增加属性,也就是给对象增加公用的属性; 实现原型继承; ...

  • UI线性渐变

    布局实现:UI 设计: 转换为android的UI,实现: 在res中建立drawable文件夹。 在drawab...

  • 第21章 类层次: UI 设计 & 不涉及 事件驱动技术

    Note 21.1 设计 类层次: 建立 "虚拟 UI 系统" - 分离 UI 与 应用程序 1 实现继承 2 接...

  • 继承

    继承的引入和概述 继承案例和继承的好处 继承的弊端 Java中继承的特点 继承的注意实现和什么时候使用继承 继承中...

  • 自定义View简单案例-自绘控件

    实现的效果 继承View 继承ViewGroup实现一个顶栏 下面来实现上面效果自定义View基础:Android...

  • Android UI Libs之DiscreteSeekBar

    Android UI Libs之DiscreteSeekBar 1. 说明 DiscreteSeekBar可以实现...

网友评论

    本文标题:android案例--继承实现UI公用

    本文链接:https://www.haomeiwen.com/subject/yzyxdxtx.html