Android基于Window.ID_ANDROID_CONTENT给定id添加子View

这一技术特点在一些视频播放器中比较有用。

例如代码:

package zhangphil.demo;

import android.app.Activity;

import android.content.Context;

import android.content.ContextWrapper;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.view.Window;

import android.widget.FrameLayout;

public class MainActivity extends AppCompatActivity {

private static final int VIEW_ID = 0xf0a01;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//setContentView(R.layout.activity_main);

int w = 500;

int h = 500;

int gap = 100;

addView(w, h, getResources().getColor(android.R.color.holo_orange_light));

addView(w - gap, h - gap, getResources().getColor(android.R.color.holo_green_light));

addView(w - gap * 2, h - gap * 2, getResources().getColor(android.R.color.holo_red_light));

}

private void addView(int w, int h, int color) {

ViewGroup vp = (ViewGroup) (scanForActivity(this))//.getWindow().getDecorView();

.findViewById(Window.ID_ANDROID_CONTENT);

View old = vp.findViewById(VIEW_ID);

if (old != null) {

vp.removeView(old);

}

FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(w, h, Gravity.CENTER);

FrameLayout newView = new FrameLayout(this);

newView.setBackgroundColor(color);

newView.setId(VIEW_ID);

vp.addView(newView, params);

}

public static Activity scanForActivity(Context context) {

if (context == null) return null;

if (context instanceof Activity) {

return (Activity) context;

} else if (context instanceof ContextWrapper) {

return scanForActivity(((ContextWrapper) context).getBaseContext());

}

return null;

}

}

运行结果:

如果在addView里面把这段代码注释掉:

// View old = vp.findViewById(VIEW_ID);

// if (old != null) {

// vp.removeView(old);

// }

运行结果。

这一特性如果巧妙加以利用可制作成特殊视频view的呈现。

android 添加子view,Android基于Window.ID_ANDROID_CONTENT给定id添加子View相关推荐

  1. android 模板 ui布局,Android UI布局

    一.线性布局-LinearLayout(至上而下布局) 其中 android:orientation="vertical"意思为垂直 方向的线性布局,此处的"vertic ...

  2. android 常用布局组件,Android六大基本布局

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 一.基本理论 Android六大基本布局分别是: 线性布局LinearLayout. 表格布局TableLayout. ...

  3. android 布局 orientation,布局 Android

    1.线性布局 LinearLayout又称作线性布局,是一种非常常用的布局.通过android:orientation属性指定了排列方向是vertical还是horizontal. 如果LinearL ...

  4. android ui布局开发,Android UI设计初步(基本布局)

    1.线性布局(LinearLayout) 线性布局是最简单,Android开发者使用得最多的布局类型之一,开发者用它来组织你们的用户界面上的控件.线性布局的作用就像它的名字一样:它将控件组织在一个垂直 ...

  5. android 代码加view,Android中将View添加至窗口的源码分析

    本文主要内容是讲解一个视图View或者一个ViewGroup对象是如何添加至应用程序窗口中的.下文中提到的窗口可泛指我们能看到的界面,包括一个Activity呈现的界面(我们可以将之理解为应用程序窗口 ...

  6. android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...

    Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出 在CoordinatorLayout的Behavior出现之前 ...

  7. Android 中MVC实例之Activity,Window和View

    MVC模式的简单介绍: 除此之外,此模式通过对复杂度的简化,使程序结构更加直观.软件系统通过对自身基本部份分离的同时也赋予了各个基本部分应有的功能.专业人员可以通过自身的专长分组: (控制器Contr ...

  8. android gone动画_java – Android添加简单的动画,而setvisibility(view.Gone)

    我设计了一个简单的布局.我已经完成了设计没有动画,但现在我想添加动画时textview点击事件,我不知道如何使用它. 我的xml设计看起来不错吗? 任何建议,将不胜感激. 我的XML android: ...

  9. 移除动态view android,请教Android,动态添加到控件能动态删除吗?

    可以的.有2中方式: 1.动态添加的时候为组件设置id,删除的时候根据id查找到对应组件,然后删除 2.根据父节点,获取所有父组件下的子组件,然后依次删除. 示例: protected View cr ...

最新文章

  1. 【Qt】通过QtCreator源码学习Qt(七):插件管理类简介
  2. Keras—ModelCheckpoint
  3. IOS之同步请求、异步请求、GET请求、POST请求
  4. java集群解析文件_干货:一文详解Redis集群原理核心内容
  5. 使用gpu(gtx1080) cudnn 5.1下编译faster rcnn
  6. MAC地址表配置与绑定
  7. React基础学习(第三天)
  8. PyTorch 1.0 中文文档:torchvision.utils
  9. JFinal 表自动绑定插件实现,实现零配置,支持多数据源
  10. hadoop之 hadoop日志存放路径
  11. Hive入门学习随笔(一)
  12. 企业 IT 架构转型之道:阿里巴巴中台战略思想与架构实战
  13. 再说市场资金流向问题
  14. 系统性学习计算机(一)
  15. EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传
  16. 【 力扣(LeetCode)刷题详细介绍】
  17. 解决ubuntu系统使用vim时方向键乱跳问题
  18. 使用豆瓣源安装Django
  19. java将sql数据转xml文件_把从SQL中取出的数据转化成XMl格式
  20. node.js+puppeteer创建定时任务自动登录网站截取图片

热门文章

  1. 【PAT乙级】1001 害死人不偿命的(3n+1)猜想 (15 分)
  2. Spring boot修改静态资源映射
  3. c 语言冒泡排序,c 语言冒泡排序
  4. python文件读写用到的库是什么_Python中的文件读写-理论知识
  5. String类为什么被设计为不可变的?
  6. 【Spring注解系列10】SpringBean的生命周期
  7. Java常用类之【八种基本数据类型】
  8. (Mybatis)动态SQL
  9. 作业收缴系统设计手册(自写开源小系统)
  10. 《R语言实战》第6章