今天需要在代码中动态的给一个布局添加一个imageview,现在把方法记录如下。直接看demo代码

  1. //创建容器
  2. final LinearLayout layout = new LinearLayout(this);
  3. //设置背景
  4. layout.setBackgroundColor(0x7700ffff);
  5. //设置垂直排列
  6. layout.setOrientation(LinearLayout.VERTICAL);
  7. //设置控件水平居中
  8. layout.setGravity(Gravity.CENTER_HORIZONTAL);
  9. //创建属性
  10. LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(300,300);
  11. addContentView(layout, layoutParams);
  12.  
  13. //创建控件image
  14. ImageView imageView = new ImageView(this);
  15. imageView.setBackgroundColor(0xffff0000);
  16. LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(100,100);
  17.  
  18. //设置子控件的margin数值
  19. layoutParams2.leftMargin=50;
  20. layoutParams2.topMargin=50;
  21. //添加到容器
  22. layout.addView(imageView, layoutParams2);
  23.  
  24. //创建textiew
  25. TextView textView = new TextView(this);
  26. textView.setText("textview");
  27. LinearLayout.LayoutParams layoutParams3 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
         //设置相对父容器的位置
    //layoutParams.gravity = Gravity.END;
    //设置自身内容相对自身位置
    //button.setGravity(Gravity.END);
  28. //设置padding
  29. layoutParams3.leftMargin=70;
  30. layoutParams3.topMargin=20;
  31. layout.addView(textView, layoutParams3);

看效果图

其实,代码中动态添加view,就跟使用xml一样的,xml中有的属性,都可以通过代码设置实现。这些属性,要么通过创建的控件(imageview)方法来设,要么就是通过

  1. LayoutParams

其实,在这个类里面主要含有的是margin相关属性,下面是它源码的一部分

  1.             this.leftMargin = source.leftMargin;
  2. this.topMargin = source.topMargin;
  3. this.rightMargin = source.rightMargin;
  4. this.bottomMargin = source.bottomMargin;
  5. this.startMargin = source.startMargin;
  6. this.endMargin = source.endMargin;

还有另外一个常用的relativelayout,我们也写一个小的demo看下

xml

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:id="@+id/aaa"
  5. android:layout_height="match_parent"
  6. tools:context="com.example.testcode.MainActivity" >
  7.  
  8. <TextView
  9. android:id="@+id/tv"
  10. android:text="origin text"
  11. android:layout_width="100dp"
  12. android:layout_height="100dp"
  13. android:background="#ff0000"
  14. />
  15.  
  16. </RelativeLayout>

代码如下

  1. package com.example.testcode;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.Menu;
  5. import android.view.MenuItem;
  6. import android.widget.Button;
  7. import android.widget.LinearLayout.LayoutParams;
  8. import android.widget.RelativeLayout;
  9. import android.widget.TextView;
  10.  
  11. public class MainActivity extends Activity {
  12. private TextView textView;
  13. private RelativeLayout aaaLayout;
  14.  
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. textView = (TextView) findViewById(R.id.tv);
  20. aaaLayout = (RelativeLayout) findViewById(R.id.aaa);
  21. Button button = new Button(this);
  22. RelativeLayout.LayoutParams layoutParams_button = new RelativeLayout.LayoutParams(
  23. 100, 100);
  24. RelativeLayout relativeLayout = new RelativeLayout(this);
  25. //LinearLayout这个方法有三个参数的,加了一个权重在里面,RelativeLayout就不存在了
  26. //LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width, height, weight);
  27. RelativeLayout.LayoutParams layoutParams_text = new RelativeLayout.LayoutParams(
  28. LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  29. //设置控件相对R.id.tv位置
  30. //layoutParams_text.addRule(RelativeLayout.BELOW, R.id.tv);
  31. //设置控件相对父容器位置
  32. layoutParams_text.addRule(RelativeLayout.CENTER_HORIZONTAL);
  33. layoutParams_text.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
  34. //layoutParams_text.addRule(RelativeLayout.CENTER_IN_PARENT);
  35. relativeLayout.addView(button, layoutParams_button);
  36. aaaLayout.addView(relativeLayout, layoutParams_text);
  37. }
  38.  
  39. @Override
  40. public boolean onCreateOptionsMenu(Menu menu) {
  41. // Inflate the menu; this adds items to the action bar if it is present.
  42. getMenuInflater().inflate(R.menu.main, menu);
  43. return true;
  44. }
  45.  
  46. @Override
  47. public boolean onOptionsItemSelected(MenuItem item) {
  48. // Handle action bar item clicks here. The action bar will
  49. // automatically handle clicks on the Home/Up button, so long
  50. // as you specify a parent activity in AndroidManifest.xml.
  51. int id = item.getItemId();
  52. if (id == R.id.action_settings) {
  53. return true;
  54. }
  55. return super.onOptionsItemSelected(item);
  56. }
  57. }

我们看下效果

  1.  

layout-代码中添加view的更多相关文章

  1. 代码中添加事务控制 VS(数据库存储过程+事务) 保证数据的完整性与一致性

    做人事档案的系统考虑到数据的安全性与一致性,毕竟是要对外上线.真正投入使用的项目,数据库的可靠性与安全性上我们开发人员要考虑的就很多了,记得做机房收费系统时注册新卡是自己为了简单,写成了一个存储过程( ...

  2. Ado.Net实体数据模型EF,如何在代码中添加数据库连接密码

    在创建EF模型的时候,VS2013提示说“在连接字符串中存储敏感数据可能有安全风险”,于是我选择了在代码中添加,可是如何通过代码添加呢? 我在网上百度了下,没有人说的清楚直观. 假设我们创建了一个名字 ...

  3. Android中如何在代码中设置View的宽和高?

    Android中如何在代码中设置View的宽和高?https://zhidao.baidu.com/question/536302117.htmlhttps://blog.csdn.net/u0141 ...

  4. 移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签)

    移动端网站如何开发(电脑端网站到手机端网站我们需要在html代码中添加哪个meta标签) 一.总结 一句话总结: 添加viewport标签:meta name="viewport" ...

  5. delphi 在代码中 添加 TO-DO 并且 管理

    TO-DO List是一项非常好用的功能.采用她可以让我们很清楚的了解以前完成了那些任务,还有哪些任务需要做,由谁负责完成,是不是比较紧急的任务等.今天来不及完成的,明天上班就可以很快的找到任务所在的 ...

  6. 在代码中写view 的长宽高等

    获得资源的id的另一种方法 int layoutRes = getResources().getIdentifier("pager_view" + i, "layout& ...

  7. (转)Unity3d使用心得(1):ModelImporter的使用、在代码中添加动画片段。

    在使用 Unity3d 倒入Fbx模型的时候,动画的动画片段需要自己手动添加模型多了以后会是一个不小的工作量. Unity3d支持 编辑器脚本来控制资源导入的过程.添加一个 AssetPostproc ...

  8. 如何给DropDownList在后台代码中添加一个空的选项

    代码如何: ddl_dept.Items.Insert(, new ListItem("---请选择---","")); new ListItem的第一个参数表 ...

  9. 往Layout中动态添加View

    需要注意几个方法:基本上所有的方法参数单位是px 1.设置View的宽高: LinearLayout.LayoutParams params = new LinearLayout().LayoutPa ...

随机推荐

  1. BZOJ 1927 最小费用流问题

    From lydrainbowcat //By SiriusRen #include <queue> #include <cstdio> #include <cstrin ...

  2. 空值(NULL)和非空(NOT NULL)(十二)

    不多说,直接上干货! NULL:表示字段可以为空 NOT NULL:表示字段不允许为空 注意:NULL和NOT NULL不可以同时用于一个字段上. create table tb2( username ...

  3. for循环练习-----ATM取款

    要求: 代码: package com.jianglai.atm; import java.util.Scanner; public class ATM { public static void ma ...

  4. ES6中object对象属性

    //////es5中定义对象属性要么字面量.要么点.要么[],变量与空格在这些方法中没有得到好的支持 /////在es6中可以这么定义: let w='www'; let obj1={w};//obj ...

  5. Unity API 解析(13)—— Vector3 类

    三维向量或三维坐标点 normalized —— 单位化向量 返回方向相同模长为1的向量 sqrMagnitude —— 模长平方 Scale —— 向量缩放 Angle —— 两向量夹角 Cross ...

  6. caffe(2) 数据层及参数

    要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe.proto这个文件 ...

  7. [SDOI2012]Longge的问题 欧拉反演_欧拉函数

    Code: #include<cstdio> #include<algorithm> #include<cmath> #include<string> ...

  8. 学习优化《机器学习与优化》中文PDF+英文PDF

    正在学习机器学习中的优化处理,感觉<机器学习与优化>写得还是比较通俗易懂的,第七章特征选择我需要,特征提取:相关系数,相关比,熵和互信息..更高级的应该是文本挖掘的特征提取,比如LDA提取 ...

  9. springboot实现热部署,修改代码不用重启服务

    1.引入热部署依赖 <!-- 热部署模块 --> <dependency> <groupId>org.springframework.boot</groupI ...

  10. [Poi] Use Poi to Build an Index.js with Modern JavaScript Features

    Poi can easily launch an index.js file simply by running the poi command. This will launch a dev-ser ...