RelativeLayout.LayoutParams学习与运用

RelativeLayout.LayoutParams学习与运用1、了解LayoutParams其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。LinearLayout对应LinearLayout.LayoutParams,RelativeLayout对应RelativeLayout.LayoutParams。我们在XML中写的大多数属性,在代码中通过LayoutParams同样可以操作界面布局。下面以

大家好,又见面了,我是你们的朋友全栈君。

1、了解LayoutParams

其实LayoutParams就是代表一个布局属性,每一个ViewGroup对应一种LayoutParams。LinearLayout对应LinearLayout.LayoutParams,RelativeLayout对应RelativeLayout.LayoutParams。我们在XML中写的大多数属性,在代码中通过LayoutParams同样可以操作界面布局。下面以RelativeLayout.LayoutParams为例:
(1)RelativeLayout.LayoutParams.setMargins(left, top, right, bottom) 通过此方法可以动态设置margin值;
(2)addRule(int verb) 该方法表示所设置节点的属性不能与其他兄弟节点相关或者属性值为布尔值。 比如 addRule(RelativeLayout.CENTER_VERTICAL)就表示在RelativeLayout中的相应节点是垂直居中的。
(3)addRule(int verb,int anchor)该方法表示所设置节点的属性必须关联其他兄弟节点或者属性值为布尔值。 比如addRule(RelativeLayout.ALIGN_LEFT,R.id.date)就表示RelativeLayout中的相应节点放置在一个id值为date的兄弟节点的左边。

2、实例代码

android.widget.RelativeLayout.LayoutParams param_setting = 
                    new android.widget.RelativeLayout.LayoutParams
                    (android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, height_setting);
            param_setting.addRule(RelativeLayout.BELOW, R.id.actionbar_layout);
            setting_layout.setLayoutParams(param_setting);

3、我们在实现功能的时候,通常需要在onreate()的时候根据具体的数据去初始化控件的状态。比如一个自定义的开关控件,我们在创建它的时候,它初始化应该是开的状态还是关的状态,这个需要我们获取到具体数据后再去调整它的状态,在调整它的状态的时候,我们有可能就会使用到LayoutParams来调整位置。如下方法是在自定义控件内部提供的方法,供Activity中调用来调整自己的开关位置:

public void initChecked(boolean ischecked){

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) checkThumb.getLayoutParams();

        if(ischecked){
        }else{
            params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
            params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
            int checkThumb_length = checkThumb.getWidth();
            int track_length = view.getWidth();
            params.setMargins(0, 0, 0,0);
        }
        checkThumb.setLayoutParams(params);
        checkThumb.invalidate();
        this.ischecked = ischecked;

    }

自定义开关的样式如下:
这里写图片描述
我们在Activity初始化的时候,去调整开关状态:

    lane_keeping = (HorizontalSwitch)v.findViewById(R.id.lane_k_switch);
        lane_keeping.initChecked(false);//关闭开关

注意:在oncreate()的时候,去操作控件的LayoutParams,不能用new的形式去创建一个LayoutParams,即不能用这种方法:
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(checkThumb.getWidth(), checkThumb.getHeight());
而是需要从原有的控件中获取到LayoutParams,然后在此基础上去修改,才有效果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/160820.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java生成MD5的两种方式

    Java生成MD5的两种方式1原生的packagecom.pibigstar.common.utils;importjava.security.MessageDigest;/***MD5加密工具类*@authorpibigstar**/publicclassMyMD5Util{//盐,用于混交md5privatestaticfinalStringsl…

    2022年7月8日
  • Spring Boot MyBatis注解:@MapperScan和@Mapper

    Spring Boot MyBatis注解:@MapperScan和@Mapper需求缘起:在之前的文章中,我们定义DemoMapper类,但是并没有在该类上定义类似@Service或者@Controller之类的注解,那么为什么可以被Spring管理呢?(1)方式一:使用@Mapper注解为了让DemoMapper能够让别的类进行引用,我们可以在DemMapper类上添加@Mapper注解:Java代码@Mapper…

    2022年6月12日
  • Java多态性:Java什么是多态?

    Java多态性:Java什么是多态?多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通…

    2022年7月8日
  • 书单(含资源链接,快撸!)

    书单(含资源链接,快撸!)撸资源python开发笨办法”学Python(第3版)Python.编写高质量Python代码的59个有效方法提取码:3vk4编写高质量代码改善python程序的91个建议利用Pytho

    2022年8月4日
  • win7 计算机定时关机脚本,定时关机命令,教您怎么使用命令行定时关机「建议收藏」

    win7 计算机定时关机脚本,定时关机命令,教您怎么使用命令行定时关机「建议收藏」在设置定时关机前,我们有必要了解一下定时关机是怎么实现的,定时关机功能由文件夹中的Shutdown.exe程序来控制的,然后我们给他加入一系列命令就可以实现定时关机了。下面,小编给大家讲解使用命令行定时关机的技巧。有时候,下载一个东西,但是又要关闭电脑睡觉了,但是又想等东东下载好了,才去睡觉,想想如果能定时关机就好了。作为程序员的我,有时候就是作践自己啊,那怎么使用命令行定时关机?下面,小编给大家…

    2022年5月14日
  • 浅析日本队崛起原因_createNewFile

    浅析日本队崛起原因_createNewFile2019独角兽企业重金招聘Python工程师标准>>>…

    2022年10月28日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号