动态添加对象属性android_android 动态添加属性 - CSDN
  • 动态给类和对象添加属性和方法

    千次阅读 2017-10-20 15:09:30
    动态给类和对象添加属性和方法动态给类和对象添加属性定义一个Person类class Person(object): def __init__(self, name): self.name = name给对象添加属性 # 创建2个Person,分别为p1,p2p1 = Person('amy') print...

    动态给类和对象添加属性和方法

    动态给类和对象添加属性

    定义一个Person类

    class Person(object):
        def __init__(self, name):
            self.name = name
    
    • 给对象添加属性
    # 创建2个Person,分别为p1,p2
    
    p1 = Person('amy')
    print(p1.name)
    p1.age = 10         # 给p1对象添加属性
    print(p1.age)       # 输出10
    
    p2 = Person('anne')
    print(p2.name)      
    p2.age = 18         # 给p2对象添加属性
    print(p2.age)       # 输出18
    
    
    • 给类添加属性
    Person.sex = 'female'
    
    print(p1.sex)    # 输出 female
    
    print(p2.sex)   # 输出 female
    
    p2.sex = 'male'
    
    print(p2.sex)   # 输出 male
    
    

    动态给类和对象添加方法

    • 动态给类添加方法
    # 在类的外部定义一个sleep函数
    
    def sleep(self):
        print('%s sleep' % (self.name))
    
    
    Person.sleep = sleep
    
    Person.sleep(p1)     # 输出 amy sleep
    
    Person.sleep(p2)     # 输出 anne sleep
    
    • 给对象添加方法
    
    import types    # 如果是给对象动态添加方法,需要导入types模块
    
    def eat(self):
        print('%s eat' % (self.name))
    
    p.eat = types.MethodType(eat, p)    # 调用MethodType()函数,参数1:方法名,参数2:对象名
    
    p.eat()             # 输出 amy eat
    
    展开全文
  • JavaBean动态添加删除属性

    千次阅读 2019-06-14 21:53:28
    2019独角兽企业重金招聘Python工程师标准>>> ...

    1.cglib

    BeanGenerator beanGenerator = new BeanGenerator();
    beanGenerator.addProperty("id", Long.class);
    beanGenerator.addProperty("username", String.class);
    Object obj = beanGenerator.create();
    BeanMap beanMap = BeanMap.create(obj);
    BeanCopier copier = BeanCopier.create(User.class, obj.getClass(), false);
    User user = new User();
    user.setId(1L);
    user.setUsername("name1");
    user.setPassword("123");
    copier.copy(user, obj, null);
    System.out.println(beanMap.get("username"));
    Class clazz = obj.getClass();
    Method[] methods = clazz.getDeclaredMethods();
    for (int i = 0; i < methods.length; i++) {
        System.out.println(methods[i].getName());
    }
    
    输出结果:
    name1
    getId
    getUsername
    setId
    setUsername
    

    从输出结果可以看出最后生成的obj只有id和username两个属性

    2.org.apache.commons.beanutils

    DynaProperty property = new DynaProperty("id", Long.class);
    DynaProperty property1 = new DynaProperty("username", String.class);
    BasicDynaClass basicDynaClass = new BasicDynaClass("user", null, new DynaProperty[]{property, property1});
    BasicDynaBean basicDynaBean = new BasicDynaBean(basicDynaClass);
    User user = new User();
    user.setId(1L);
    user.setUsername("name1");
    user.setPassword("123");
    
    BeanUtils.copyProperties(basicDynaBean, user);
    Map<String, Object> map = basicDynaBean.getMap();
    Iterator<String> it = map.keySet().iterator();
    while (it.hasNext()) {
        String key = it.next();
        System.out.println(key + ":" + map.get(key));
    }
    
    输入结果:
    id:1
    username:name1

    查看BasicDynaBean与BasicDynaClass之间的关系

    DynaBean的源码

    public interface DynaBean {
    
        public boolean contains(String name, String key);
    
        public Object get(String name);
    
        public Object get(String name, int index);
    
        public Object get(String name, String key);
    
        public DynaClass getDynaClass();
    
        public void remove(String name, String key);
    
        public void set(String name, Object value);
    
        public void set(String name, int index, Object value);
    
        public void set(String name, String key, Object value);
    
    
    }

    主要是接口的定义

    再来看看BasicDynaBean是怎么实现的,直接看public Object get(String name);

    
    /**
     * Return the value of a simple property with the specified name.
     *
     * @param name Name of the property whose value is to be retrieved
     * @return The property's value
     *
     * @exception IllegalArgumentException if there is no property
     *  of the specified name
     */
    public Object get(String name) {
    
        // Return any non-null value for the specified property
        Object value = values.get(name);
        if (value != null) {
            return (value);
        }
    
        // Return a null value for a non-primitive property
        Class<?> type = getDynaProperty(name).getType();
        if (!type.isPrimitive()) {
            return (value);
        }
    
        // Manufacture default values for primitive properties
        if (type == Boolean.TYPE) {
            return (Boolean.FALSE);
        } else if (type == Byte.TYPE) {
            return (new Byte((byte) 0));
        } else if (type == Character.TYPE) {
            return (new Character((char) 0));
        } else if (type == Double.TYPE) {
            return (new Double(0.0));
        } else if (type == Float.TYPE) {
            return (new Float((float) 0.0));
        } else if (type == Integer.TYPE) {
            return (new Integer(0));
        } else if (type == Long.TYPE) {
            return (new Long(0));
        } else if (type == Short.TYPE) {
            return (new Short((short) 0));
        } else {
            return (null);
        }
    
    }
    

    从以上代码可以看出是在values里取值的

        /**
         * The set of property values for this DynaBean, keyed by property name.
         */
        protected HashMap<String, Object> values = new HashMap<String, Object>();

    其实是用HashMap来实现的.

    3.总结

    用cglib动态删除添加属性时,虽然obj里有getUsername这个方法,却不能obj.getUsername()这样直接调用,想得到username的值只能通过beanMap.get("username")获取.

    org.apache.commons.beanutils从源码来看是使用HashMap来实现的.

    两种方式从操作角度来说和使用Map的区别不大.只是它们都提供了复制属性的工具方法.

    关于复制属性可以参看:

    java复制属性

    转载于:https://my.oschina.net/u/657390/blog/758131

    展开全文
  • android通过代码动态添加和删除控件

    万次阅读 多人点赞 2018-05-13 20:08:50
    1.概述android开发当中有可能会碰到以下这种情况,某个页面,...本文实现了一个动态添加和删除控件的简单例子!先上截图:2.代码实现(1)布局文件activity_main.xml[html] view plain copy&lt;RelativeLayout...

    1.概述

    android开发当中有可能会碰到以下这种情况,某个页面,内容不确定,根据用户需求增加或减少相应控件数。这种情况一般发生在编辑类页面当中,比如你的应用包含用户发帖功能,其内容组织结构和多少是可变的。

    本文实现了一个动态添加和删除控件的简单例子!先上截图:

    截图1






    2.代码实现

    (1)布局文件activity_main.xml

    [html] view plain copy
    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:layout_height="match_parent"  
    5.     android:background="@android:color/darker_gray"  
    6.     tools:context=".MainActivity" >  
    7.   
    8.     <ScrollView  
    9.         android:layout_width="match_parent"  
    10.         android:layout_height="match_parent"  
    11.         android:scrollbars="none" >  
    12.   
    13.         <LinearLayout  
    14.             android:id="@+id/content_view"  
    15.             android:layout_width="match_parent"  
    16.             android:layout_height="wrap_content"  
    17.             android:isScrollContainer="true"  
    18.             android:orientation="vertical"  
    19.             android:padding="10.0dip" >  
    20.   
    21.             <LinearLayout  
    22.                 android:id="@+id/ll_one"  
    23.                 android:layout_width="match_parent"  
    24.                 android:layout_height="wrap_content"  
    25.                 android:layout_marginTop="5dip"  
    26.                 android:background="#FFA2CD5A"  
    27.                 android:orientation="vertical"  
    28.                 android:padding="5dip" >  
    29.   
    30.                 <EditText  
    31.                     android:id="@+id/et_content1"  
    32.                     android:layout_width="match_parent"  
    33.                     android:layout_height="80dip"  
    34.                     android:background="#FFFFFFFF"  
    35.                     android:gravity="left"  
    36.                     android:inputType="textMultiLine"  
    37.                     android:paddingLeft="5dip"  
    38.                     android:textSize="16sp" />  
    39.   
    40.                 <RelativeLayout  
    41.                     android:layout_width="match_parent"  
    42.                     android:layout_height="wrap_content"  
    43.                     android:layout_marginTop="5dip" >  
    44.   
    45.                     <ImageButton  
    46.                         android:id="@+id/ibn_add1"  
    47.                         android:layout_width="wrap_content"  
    48.                         android:layout_height="wrap_content"  
    49.                         android:layout_alignParentRight="true"  
    50.                         android:background="@drawable/ic_add" />  
    51. <!--   
    52.                     <ImageButton  
    53.                         android:id="@+id/ibn_del1"  
    54.                         android:layout_width="wrap_content"  
    55.                         android:layout_height="wrap_content"  
    56.                         android:layout_marginRight="10dip"  
    57.                         android:layout_toLeftOf="@id/ibn_add1"  
    58.                         android:background="@drawable/ic_delete" />  
    59.  -->  
    60.                 </RelativeLayout>  
    61.             </LinearLayout>  
    62.         </LinearLayout>  
    63.     </ScrollView>  
    64.   
    65. </RelativeLayout>  

    简单来讲,一个ScrollView和内嵌的LinearLayout的组合实现了本例。LinearLayout内部控件可增可减,因为其包含在ScrollView里,所以内容超出页面显示范围时可以滚动。
    该布局文件显示效果如上面第一个截图所示,包含一个编辑框(EditText)和“添加”按钮。

    (2)MainActivity文件

    [java] view plain copy
    1. package com.example.androiddynamiclayout;  
    2.   
    3. import java.util.LinkedList;  
    4.   
    5. import android.os.Bundle;  
    6. import android.app.Activity;  
    7. import android.graphics.Color;  
    8. import android.text.InputType;  
    9. import android.view.Gravity;  
    10. import android.view.Menu;  
    11. import android.view.View;  
    12. import android.view.ViewGroup;  
    13. import android.widget.EditText;  
    14. import android.widget.ImageButton;  
    15. import android.widget.LinearLayout;  
    16. import android.widget.RelativeLayout;  
    17.   
    18. public class MainActivity extends Activity {  
    19.   
    20.     // 外围的LinearLayout容器  
    21.     private LinearLayout llContentView;  
    22.       
    23.     private EditText etContent1;  
    24.       
    25.     // “+”按钮控件List  
    26.     private LinkedList<ImageButton> listIBTNAdd;  
    27.     // “+”按钮ID索引  
    28.     private int btnIDIndex = 1000;  
    29.     // “-”按钮控件List  
    30.     private LinkedList<ImageButton> listIBTNDel;  
    31.       
    32.     private int iETContentHeight = 0;   // EditText控件高度  
    33.     private float fDimRatio = 1.0f; // 尺寸比例(实际尺寸/xml文件里尺寸)  
    34.       
    35.     @Override  
    36.     protected void onCreate(Bundle savedInstanceState) {  
    37.         super.onCreate(savedInstanceState);  
    38.         setContentView(R.layout.activity_main);  
    39.           
    40.         initCtrl();  
    41.     }  
    42.       
    43.     /** 
    44.      * 初始化控件 
    45.      */  
    46.     private void initCtrl()  
    47.     {  
    48.         llContentView = (LinearLayout) this.findViewById(R.id.content_view);  
    49.         etContent1 = (EditText) this.findViewById(R.id.et_content1);  
    50.         listIBTNAdd = new LinkedList<ImageButton>();  
    51.         listIBTNDel = new LinkedList<ImageButton>();  
    52.           
    53.         // “+”按钮(第一个)  
    54.         ImageButton ibtnAdd1 = (ImageButton) this.findViewById(R.id.ibn_add1);  
    55.         ibtnAdd1.setOnClickListener(new View.OnClickListener() {  
    56.   
    57.             @Override  
    58.             public void onClick(View v) {  
    59.                 // 获取尺寸变化比例  
    60.                 iETContentHeight = etContent1.getHeight();  
    61.                 fDimRatio = iETContentHeight / 80;  
    62.   
    63.                 addContent(v);  
    64.             }  
    65.         });  
    66.   
    67.         listIBTNAdd.add(ibtnAdd1);  
    68.         listIBTNDel.add(null);  // 第一组隐藏了“-”按钮,所以为null  
    69.     }  
    70.       
    71.     /** 
    72.      * 添加一组新控件 
    73.      * @param v 事件触发控件,其实就是触发添加事件对应的“+”按钮 
    74.      */  
    75.     private void addContent(View v) {  
    76.         if (v == null) {  
    77.             return;  
    78.         }  
    79.           
    80.         // 判断第几个“+”按钮触发了事件  
    81.         int iIndex = -1;  
    82.         for (int i = 0; i < listIBTNAdd.size(); i++) {  
    83.             if (listIBTNAdd.get(i) == v) {  
    84.                 iIndex = i;  
    85.                 break;  
    86.             }  
    87.         }  
    88.           
    89.         if (iIndex >= 0) {  
    90.             // 控件实际添加位置为当前触发位置点下一位  
    91.             iIndex += 1;  
    92.               
    93.             // 开始添加控件  
    94.               
    95.             // 1.创建外围LinearLayout控件  
    96.             LinearLayout layout = new LinearLayout(MainActivity.this);  
    97.             LinearLayout.LayoutParams lLayoutlayoutParams = new LinearLayout.LayoutParams(  
    98.                     ViewGroup.LayoutParams.MATCH_PARENT,  
    99.                     ViewGroup.LayoutParams.WRAP_CONTENT);  
    100.             // 设置margin  
    101.             lLayoutlayoutParams.setMargins(0, (int) (fDimRatio * 5), 00);  
    102.             layout.setLayoutParams(lLayoutlayoutParams);  
    103.             // 设置属性  
    104.             layout.setBackgroundColor(Color.argb(25516220590));   // #FFA2CD5A  
    105.             layout.setPadding((int) (fDimRatio * 5), (int) (fDimRatio * 5),  
    106.                     (int) (fDimRatio * 5), (int) (fDimRatio * 5));  
    107.             layout.setOrientation(LinearLayout.VERTICAL);  
    108.               
    109.             // 2.创建内部EditText控件  
    110.             EditText etContent = new EditText(MainActivity.this);  
    111.             LinearLayout.LayoutParams etParam = new LinearLayout.LayoutParams(  
    112.                     ViewGroup.LayoutParams.MATCH_PARENT, iETContentHeight);  
    113.             etContent.setLayoutParams(etParam);  
    114.             // 设置属性  
    115.             etContent.setBackgroundColor(Color.argb(255255255255));   // #FFFFFFFF  
    116.             etContent.setGravity(Gravity.LEFT);  
    117.             etContent.setInputType(InputType.TYPE_TEXT_FLAG_MULTI_LINE);  
    118.             etContent.setPadding((int) (fDimRatio * 5), 000);  
    119.             etContent.setTextSize(16);  
    120.             // 将EditText放到LinearLayout里  
    121.             layout.addView(etContent);  
    122.               
    123.             // 3.创建“+”和“-”按钮外围控件RelativeLayout  
    124.             RelativeLayout rlBtn = new RelativeLayout(MainActivity.this);  
    125.             RelativeLayout.LayoutParams rlParam = new RelativeLayout.LayoutParams(  
    126.                     ViewGroup.LayoutParams.MATCH_PARENT,  
    127.                     ViewGroup.LayoutParams.WRAP_CONTENT);  
    128. //          rlParam.setMargins(0, (int) (fDimRatio * 5), 0, 0);  
    129.             rlBtn.setPadding(0, (int) (fDimRatio * 5), 00);  
    130.             rlBtn.setLayoutParams(rlParam);  
    131.               
    132.             // 4.创建“+”按钮  
    133.             ImageButton btnAdd = new ImageButton(MainActivity.this);  
    134.             RelativeLayout.LayoutParams btnAddParam = new RelativeLayout.LayoutParams(  
    135.                     ViewGroup.LayoutParams.WRAP_CONTENT,  
    136.                     ViewGroup.LayoutParams.WRAP_CONTENT);  
    137.             // 靠右放置  
    138.             btnAddParam.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);  
    139.             btnAdd.setLayoutParams(btnAddParam);  
    140.             // 设置属性  
    141.             btnAdd.setBackgroundResource(R.drawable.ic_add);  
    142.             btnAdd.setId(btnIDIndex);  
    143.             // 设置点击操作  
    144.             btnAdd.setOnClickListener(new View.OnClickListener() {  
    145.   
    146.                 @Override  
    147.                 public void onClick(View v) {  
    148.                     addContent(v);  
    149.                 }  
    150.             });  
    151.             // 将“+”按钮放到RelativeLayout里  
    152.             rlBtn.addView(btnAdd);  
    153.             listIBTNAdd.add(iIndex, btnAdd);  
    154.               
    155.             // 5.创建“-”按钮  
    156.             ImageButton btnDelete = new ImageButton(MainActivity.this);  
    157.             btnDelete.setBackgroundResource(R.drawable.ic_delete);  
    158.             RelativeLayout.LayoutParams btnDeleteAddParam = new RelativeLayout.LayoutParams(  
    159.                     ViewGroup.LayoutParams.WRAP_CONTENT,  
    160.                     ViewGroup.LayoutParams.WRAP_CONTENT);  
    161.             btnDeleteAddParam.setMargins(00, (int) (fDimRatio * 5), 0);  
    162.             // “-”按钮放在“+”按钮左侧  
    163.             btnDeleteAddParam.addRule(RelativeLayout.LEFT_OF, btnIDIndex);  
    164.             btnDelete.setOnClickListener(new View.OnClickListener() {  
    165.   
    166.                 @Override  
    167.                 public void onClick(View v) {  
    168.                     deleteContent(v);  
    169.                 }  
    170.             });  
    171.             // 将“-”按钮放到RelativeLayout里  
    172.             rlBtn.addView(btnDelete, btnDeleteAddParam);  
    173.             listIBTNDel.add(iIndex, btnDelete);  
    174.               
    175.             // 6.将RelativeLayout放到LinearLayout里  
    176.             layout.addView(rlBtn);  
    177.               
    178.             // 7.将layout同它内部的所有控件加到最外围的llContentView容器里  
    179.             llContentView.addView(layout, iIndex);  
    180.               
    181.             btnIDIndex++;  
    182.         }  
    183.     }  
    184.       
    185.     /** 
    186.      * 删除一组控件 
    187.      * @param v 事件触发控件,其实就是触发删除事件对应的“-”按钮 
    188.      */  
    189.     private void deleteContent(View v) {  
    190.         if (v == null) {  
    191.             return;  
    192.         }  
    193.   
    194.         // 判断第几个“-”按钮触发了事件  
    195.         int iIndex = -1;  
    196.         for (int i = 0; i < listIBTNDel.size(); i++) {  
    197.             if (listIBTNDel.get(i) == v) {  
    198.                 iIndex = i;  
    199.                 break;  
    200.             }  
    201.         }  
    202.         if (iIndex >= 0) {  
    203.             listIBTNAdd.remove(iIndex);  
    204.             listIBTNDel.remove(iIndex);  
    205.               
    206.             // 从外围llContentView容器里删除第iIndex控件  
    207.             llContentView.removeViewAt(iIndex);  
    208.         }  
    209.     }  
    210.   
    211.     /*@Override  
    212.     public boolean onCreateOptionsMenu(Menu menu) {  
    213.         // Inflate the menu; this adds items to the action bar if it is present.  
    214.         getMenuInflater().inflate(R.menu.activity_main, menu);  
    215.         return true;  
    216.     }  */
    217.   
    218. }  

    浏览这段代码需要注意以下几两点:
    1.llContentView:这个变量对应的是上面布局文件提到的那个LinearLayout,通过llContentView.addView(layout, iIndex)往某一位置添加子控件,通过llContentView.removeViewAt(iIndex)删除某一位置上的子控件。
    2.List对象listIBTNAdd和listIBTNDel:存储了当前所包含的所有“添加”和“删除”按钮对象,在发生添加或删除事件时,用于定位触发事件位
    置。

    原文地址:https://blog.csdn.net/chadeltu/article/details/42390047

    展开全文
  • Android 代码动态改变View的属性

    万次阅读 2016-04-14 13:18:25
    设置Android View的长宽和位置我们平时都会在Layout的XML中定义,那么什么时候需要动态在代码中设置View的属性呢?先看下面这个UI设计 在这个UI设计中,上面的ImageView被设计成是长宽是16:9的比例,因为手机屏幕...

    原创文章,转载请注明 http://blog.csdn.net/leejizhou/article/details/51150116 李济洲的博客

    设置Android View的长宽和位置我们平时都会在Layout的XML中定义,那么什么时候需要动态在代码中设置View的属性呢?先看下面这个UI设计

    这里写图片描述

    在这个UI设计中,上面的ImageView被设计成是长宽是16:9的比例,因为手机屏幕的区别,图片的宽度是无法确定的,所以在XML中是无法设置16:9比例的ImageView,因此想要实现这个UI效果就需要在运行时获得手机屏幕宽度然后按照16:9的比例设置ImageView的高度。

    先看下动态改变View的Demo演示

    • ImageView素材来自于 Facebook team dribbble

    这里写图片描述

    主要的实现方式是通过View.getLayoutParams()获取LayoutParams对象,然后通过LayoutParams对象设置View的宽高和边距等等,然后View重新setLayoutParams。

    下面看一下具体的实现步骤

    Layout 一个ImageView 下面4个Button用来动态控制图片

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.leejz.viewchangedemo.MainActivity">
    
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@mipmap/pic"
            android:id="@+id/image" />
    
        <Button
            android:layout_marginTop="12dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="4:3"
            android:id="@+id/btn_43"
            />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="16:9"
            android:id="@+id/btn_169"
            />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Margin Left+"
            android:id="@+id/btn_marginleft"
            />
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Margin Right+"
            android:id="@+id/btn_marginright"
            />
    
    </LinearLayout>

    然后是MainActivity,运行的时候动态获取屏幕宽度,然后去设置ImageView的高度,具体参考代码注释

    /**
     * Blog:www.lijizhou.com
     */
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
        private ImageView image;
        private Button btn_43,btn_169;
        private Button btn_marginleft,btn_marginright;
    
        //为了更改imageview,获取LayoutParmas对象
        // ImageView父Group是Linearlayout所以这里使用LinearLayout.LayoutParams
        // 你也可以使用通用的ViewGroup.LayoutParams 不过支持的属性较少
        LinearLayout.LayoutParams params;
    
        //ImageView距左边距
        private int left;
        //ImageView距右边距
        private int right;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
    
    
        }
    
        public void initView(){
            image=(ImageView)findViewById(R.id.image);
            params=(LinearLayout.LayoutParams)image.getLayoutParams();
            btn_43=(Button)findViewById(R.id.btn_43);
            btn_169=(Button)findViewById(R.id.btn_169);
            btn_marginleft=(Button)findViewById(R.id.btn_marginleft);
            btn_marginright=(Button)findViewById(R.id.btn_marginright);
            btn_43.setOnClickListener(this);
            btn_169.setOnClickListener(this);
            btn_marginleft.setOnClickListener(this);
            btn_marginright.setOnClickListener(this);
        }
    
    
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_43:
    
    
                    params.height=getScreenWidth()*3/4;
                    image.setLayoutParams(params);
                    break;
                case R.id.btn_169:
    
                    params.height=getScreenWidth()*9/16;
                    image.setLayoutParams(params);
                    break;
    
                case R.id.btn_marginleft:
                    //左边距增加 可以直接使用PX 或者 转换使用DP单位
                    params.leftMargin=dp2px(this,left+=8);
                    image.setLayoutParams(params);
                    break;
    
                case R.id.btn_marginright:
                    params.rightMargin=dp2px(this,right+=8);
                    image.setLayoutParams(params);
                    break;
            }
        }
    
    
        //获取运行屏幕宽度
        public int getScreenWidth(){
            DisplayMetrics dm = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(dm);
            //宽度 dm.widthPixels
            //高度 dm.heightPixels
            return  dm.widthPixels ;
        }
    
        //DP转PX
        public static int dp2px(Context context, float dpValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (dpValue * scale + 0.5f);
        }
        //PX转DP
        public static int px2dp(Context context, float pxValue) {
            final float scale = context.getResources().getDisplayMetrics().density;
            return (int) (pxValue / scale + 0.5f);
        }
    }
    

    Ok,一个动态改变View的小示例就实现了,代码非常简单,LayoutParams对象不仅可以支持更改宽高边距还支持动态设置weight等等一系列操作,需要你自己去探索实现:)

    本篇源代码下载地址 http://download.csdn.net/detail/leejizhou/9490898

    展开全文
  • 动态创建对象,并给对象属性赋值

    千次阅读 2018-07-24 10:04:28
    在开发过程中经常会遇到java对象属性特征不确定的情况,比如属性的名称,属性的类型,属性的取值等不确定的情况,如何在java运行时获取这些信息?动态的设置java对象属性值?借助java反射机制以及javassist能够...
  • 在手机上去实现一些动画效果算是件比较炫酷的事情,因此Android系统在一开始的时候就给我们提供了两种实现动画效果的方式,逐帧动画(frame-by-frame animation)和补间动画(tweened animation)。逐帧动画的工作原理很...
  • 使用Java代码可以动态添加 并设置所有组件属性。(需要LayoutParams.addRule方法来设置属性,然后调用View.setLayoutParams方法更新View) 示例:(动态添加Button) //装载布局文件,需要动态添加一个Button ...
  • Android 动态添加布局(layout)和控件(Widget)

    万次阅读 多人点赞 2016-08-10 15:22:54
    众所周知写Android程序的页面布局是通过activity绑定xml文件中事先定义好的文件来实现的,这种实现方式叫做静态布局。但有时无法在程序运行前就决定好页面的布局,或者是控件的属性和数量本身要求不固定的,这种时候...
  • 1、定义一个RelativeLayout对象 private RelativeLayout rlActivityMain; 2、定义一个EditText对象并将其初始化 private EditText etIntroductImage; etIntroductImage=new EditText(MainActivity.this);...
  • Android--动态添加控件

    千次阅读 2013-02-17 02:09:18
    package com.mrzhu.edittest; import android.app.Activity; import android.os.Bundle; import android.view.ViewGroup; import android.widget.RelativeLayout; public class EditTestActivity extends Activity
  • 在activity中或fragment中动态添加布局 效果 项目结构 核心代码: MainActivity public class MainActivity extends Activity implements OnClickListener { private Button btn_jiazaibuju;//加载按钮 ...
  • Android 属性动画(Property Animation) 完全解析 (上)

    万次阅读 多人点赞 2016-08-10 19:33:48
    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/380674751、概述Android提供了几种动画类型:View Animation 、Drawable Animation 、Property Animation 。View Animation相当简单,不过只能...
  • 在写自定控件时,填充自定义控件的属性有两种,一种是直接在布局文件里面添加 xmlns:app="http://schemas.android.com/apk/res-auto" 然后以app:-- 开头的形式直接填充属性,然而这是一种比较呆板的填充方式,我们...
  • Android 开发教程】添加Category

    万次阅读 2014-08-31 20:40:36
    通过使用Intent-Filter中的元素,我们...假设已经在AndroidManifest.xml中添加了元素:[java] view plaincopy"1.0" encoding="utf-8"?> "http://schemas.android.com/apk/res/android" package="com.manoel.Intents"
  • 本文将详细介绍 Android 动画中 属性动画的原理 & 使用 相关文章阅读: 1. Android 动画系列 Android 动画:手把手教你使用 补间动画 Android 动画:你真的会使用插值器与估值器吗?(含详细实例教学) 2. ...
  • [Android] 通过GridView仿微信动态添加本地图片

    万次阅读 热门讨论 2020-06-28 23:15:47
    此篇文章主要讲述通过GridView控件实现添加本地图片并显示.主要是关于GridView控件的基本操作,通过调用SimpleAdapter适配器实现实现加载图片,在gridView1.setOnItemClickListener()点击函数中响应不同操作.当点击...
  • Android 动态解析网络布局

    千次阅读 2018-06-24 19:57:25
    Android 动态解析生成布局文件的意思是:通过服务器给你发送一段Json 文件,然后根据其中的自己定义的属性,解析成原生的Android 的布局文件,并添加到 View 上作为展示。 该用途是可以实时在线更新多种不同的布局...
  • XML对开发者来说十分的...笔者认为,新手索要掌握的java动态设置布局主要有两点,一方面是对布局的属性进行修改,另一方面是增添和删除控件。 首先说一下动态设置布局在项目中的应用,拿高德地图举个例子,如下图:
  • Android OpenGL添加纹理

    千次阅读 2016-08-10 10:27:43
    上一篇文章【Android OpenGL添加光照和材料属性 】我们已经学了如何为3D模型添加光照和材料属性,使得模型看起来更有立体感。今天我们学习如何为3D模型贴上纹理,使得模型看起来更真实!目前我在网上没有找到带有...
1 2 3 4 5 ... 20
收藏数 108,611
精华内容 43,444
关键字:

动态添加对象属性android