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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决Error response from daemon: oci runtime error: container_linux.go:247: starting container process「建议收藏」

    解决Error response from daemon: oci runtime error: container_linux.go:247: starting container process「建议收藏」我是在guigu上学习的springboot的视频,有一些很难受的问题,这个问题已经让我难受一天多了,后来终于在一片文章中解决了,给大家分享一下:docker启动容器报错:Errorresponsefromdaemon:ociruntimeerror:container_linux.go:247:startingcontainerprocesscaused”write………

    2022年7月14日
    39
  • java 直播技术_视频直播的技术原理和实现思路方案整理

    java 直播技术_视频直播的技术原理和实现思路方案整理直播模型及其实现一个通用的直播模型一般包括三个模块:主播方、服务器端和播放端。首先是主播方,它是产生视频流的源头,由一系列流程组成:第一,通过一定的设备来采集数据;第二,将采集的这些视频进行一系列的处理,比如水印、美颜和特效滤镜等处理;第三,将处理后的结果视频编码压缩成可观看可传输的视频流;第四,分发推流,即将压缩后的视频流通过网络通道传输出去。其次是播放端,播放端功能有两个层面,第一个层面是关键…

    2022年7月24日
    12
  • flash视频器播放器代码

    flash视频器播放器代码flash视频器播放器代码代码整理:

    2022年7月3日
    21
  • NLP系列笔记:通俗理解LDA主题模型

    NLP系列笔记:通俗理解LDA主题模型0前言    印象中,最开始听说“LDA”这个名词,是缘于rickjin在2013年3月写的一个LDA科普系列,叫LDA数学八卦,我当时一直想看来着,记得还打印过一次,但不知是因为这篇文档的前序铺垫太长(现在才意识到这些“铺垫”都是深刻理解LDA的基础,但如果没有人帮助初学者提纲挈领、把握主次、理清思路,则很容易陷入LDA的细枝末节之中),还是因为其中的数学推导细节太多,导致一直没有完整看完…

    2022年8月11日
    5
  • springboot注解大全注解(spring两个方法都注解事务)

    关系型数据库多用到事务,在传统项目中使用xml配置,配置虽然也还好,但是看着很不美观,在使用SpringBoot框架,就简单的多了,以实战为准,直接上代码@Transactionalspring事务注解1.简单开启事务管理@EnableTransactionManagement//启注解事务管理,等同于xml配置方式的<tx:annotation-driven/>2.事务注解详解默认遇到

    2022年4月13日
    51
  • c++和java哪个好学_C/C++,JAVA学习哪个更容易就业?

    c++和java哪个好学_C/C++,JAVA学习哪个更容易就业?C、C++和Java语言都是目前在IT行业内有广泛使用的编程语言,其中C的应用场景主要集中在嵌入式开发、操作系统开发等领域,C++主要的应用领域集中在多媒体和容器开发领域,而Java的应用场景更多一些,包括Web开发、移动互联开发、大数据开发等。从市场需求量来看,目前Java程序员的市场需求量更大一些。C语言可以说是编程语言界的常青树,虽然已经被使用多年,但是目前依然具有旺盛的生命力,尤其在一些…

    2022年7月7日
    32

发表回复

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

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