在代码中,通过new的方式,添加控件

今天需要在代码中动态的给一个布局添加一个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. //创建控件image
  13. ImageView imageView = new ImageView(this);
  14. imageView.setBackgroundColor(0xffff0000);
  15. LinearLayout.LayoutParams layoutParams2 = new LinearLayout.LayoutParams(100,100);
  16. //设置子控件的margin数值
  17. layoutParams2.leftMargin=50;
  18. layoutParams2.topMargin=50;
  19. //添加到容器
  20. layout.addView(imageView, layoutParams2);
  21. //创建textiew
  22. TextView textView = new TextView(this);
  23. textView.setText("textview");
  24. LinearLayout.LayoutParams layoutParams3 = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
         //设置相对父容器的位置
    //layoutParams.gravity = Gravity.END;
    //设置自身内容相对自身位置
    //button.setGravity(Gravity.END);
  25. //设置padding
  26. layoutParams3.leftMargin=70;
  27. layoutParams3.topMargin=20;
  28. 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. public class MainActivity extends Activity {
  11. private TextView textView;
  12. private RelativeLayout aaaLayout;
  13. @Override
  14. protected void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.activity_main);
  17. textView = (TextView) findViewById(R.id.tv);
  18. aaaLayout = (RelativeLayout) findViewById(R.id.aaa);
  19. Button button = new Button(this);
  20. RelativeLayout.LayoutParams layoutParams_button = new RelativeLayout.LayoutParams(
  21. 100, 100);
  22. RelativeLayout relativeLayout = new RelativeLayout(this);
  23. //LinearLayout这个方法有三个参数的,加了一个权重在里面,RelativeLayout就不存在了
  24. //LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(width, height, weight);
  25. RelativeLayout.LayoutParams layoutParams_text = new RelativeLayout.LayoutParams(
  26. LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  27. //设置控件相对R.id.tv位置
  28. //layoutParams_text.addRule(RelativeLayout.BELOW, R.id.tv);
  29. //设置控件相对父容器位置
  30. layoutParams_text.addRule(RelativeLayout.CENTER_HORIZONTAL);
  31. layoutParams_text.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
  32. //layoutParams_text.addRule(RelativeLayout.CENTER_IN_PARENT);
  33. relativeLayout.addView(button, layoutParams_button);
  34. aaaLayout.addView(relativeLayout, layoutParams_text);
  35. }
  36. @Override
  37. public boolean onCreateOptionsMenu(Menu menu) {
  38. // Inflate the menu; this adds items to the action bar if it is present.
  39. getMenuInflater().inflate(R.menu.main, menu);
  40. return true;
  41. }
  42. @Override
  43. public boolean onOptionsItemSelected(MenuItem item) {
  44. // Handle action bar item clicks here. The action bar will
  45. // automatically handle clicks on the Home/Up button, so long
  46. // as you specify a parent activity in AndroidManifest.xml.
  47. int id = item.getItemId();
  48. if (id == R.id.action_settings) {
  49. return true;
  50. }
  51. return super.onOptionsItemSelected(item);
  52. }
  53. }

我们看下效果




 

版权声明:本文为zhangshuli-1989原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_layout_158131625.html