使用LayoutParams来动态修改组件的相对属性

来源:互联网 发布:javascript template 编辑:程序博客网 时间:2024/05/22 02:51

自从Android问世以来,一直很多人问如何使用Java代码来完成布局文件中的工作,也就是如何用Java代码设置组件的属性。这个问题对于其他的编程语言(如C#、C++、Pascal)可能并不复杂,组件类中都提供了相应的设置属性的方法,但遗憾的是Android SDK中的组件类只提供了很少的设置属性的方法,大多数的属性并没有直接对应的获得和设置属性值的方法。

事实上,使用Java代码可以设置所有的组件属性,所有这一切只需要一个LayoutParams对象。

使用LayoutParams.addRule方法可以设置组件中的所有属性值。最后再调用View.setLayoutParams方法用刚才创建的LayoutParams对象更新View中的相应属性值。

下面是一个例子的源代码:

import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.ViewGroup;import android.widget.Button;import android.widget.RelativeLayout;public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.dymamic_setting_demo);        setButton();    }    public void setButton(){        //装载要动态修改的按钮        Button button=(Button)findViewById(R.id.example_button2);        //创建一个LayoutParams对象        RelativeLayout.LayoutParams layoutParams =                new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);        //设置android:layout_centerInParent属性,后面不跟其他参数默认True        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);        //利用LayoutParams对象更新Button按钮中相应属性值        button.setLayoutParams(layoutParams);        button.setText("修改后的按钮");    }}

其对应的XML布局文件dymamic_setting_demo.xml代码如下

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="match_parent"    android:layout_height="match_parent">    <Button        android:id="@+id/example_button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="参照按钮"/>    <Button        android:id="@+id/example_button2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="ddd "/></RelativeLayout>

本来按照布局文件的属性设置,2个按钮应该是重合的,并且button2 的文本为DDD,在运行后,实际的界面经过Java代码中的动态修改后,按钮2被居中,并且文本被修改了,如下:
这里写图片描述

这是一个最简单的DEMO ,应该也不需要上传源码了,在这个原理上可以衍生出很多在一些应用中能够常常见到的功能,例如微信在收到语音后就需要动态的更进一个按钮以便用户点击等等。

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信视频横屏怎么办 房子里潮气太重怎么办 淘宝不小心注销了怎么办 淘宝号不小心注销了怎么办 xp网络驱动没了怎么办 淘宝卖家客服态度差怎么办 怀孕吃辣椒喉咙好痛怎么办 淘宝店铺建议不要提交认证怎么办 淘宝买东西商家不退款怎么办 淘宝买东西商家不发货怎么办 在微信上买东西被骗了怎么办 新浪微博自动关注人怎么办 搜淘宝找不到关键词和店铺怎么办 小超市开在一起竞争太大怎么办 淘宝店铺被投诉盗图怎么办 充电宝ic坏了怎么办 淘宝店宝贝权重下降怎么办 淘宝卖家评分低怎么办 淘宝买东西客服不理人怎么办 支付宝本次交易嫌疑违规怎么办 支付宝一年的交易总额怎么办 交易关闭钱扣了怎么办 交易猫账号绑定支付宝打不开怎么办 拼多多涉假处罚怎么办 淘宝店铺重复铺货扣6分怎么办 帆布鞋子买大了怎么办 开淘宝店没销量怎么办 开淘宝店没有销量怎么办 淘宝买东西支付密码错了怎么办 淘宝登入密码忘记了怎么办 逛街时手机没电了怎么办 逛街手机没有电了怎么办 卖家拒收退回来怎么办 群英会奖池钱不够买超了怎么办 三星s8卡顿严重怎么办 三星s8变卡了怎么办 新开店铺没有人怎么办 电视显示没有usb设备怎么办 华为平板电脑触摸屏没反应怎么办 平板电脑液晶显示屏坏了怎么办 6p的home键失灵怎么办