Android 代码中创建view,以及代码中更改view的布局属性_android代码中new view-程序员宅基地

技术标签: Java  代码  修改布局属性  创建View  Android  

我来通过实例介绍下如何代码中创建view,以及代码中更改view的布局属性。

首先代码中创建一个view:

第一步,new一个view出来

第二步,new一个布局属性出来

第三步,将布局属性绑定到view上

第四步,把view添加到已有的布局中

 

代码中更改view的布局属性:

第一步:获取要更改的view的布局属性

第二步:修改view的布局属性

 

接下来我举一个例子:一开始有一个相对布局,相对布局下有一个按钮。点击按钮就会创建一个TextView,新建的TextView处于按钮下方,并设置点击事件,点击TextView后,按钮与TextView位置反转。

具体看如下代码:


<RelativeLayout
    android:id="@+id/RL"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <Button
        android:id="@+id/button"
        android:layout_width="403dp"
        android:layout_height="wrap_content"
        android:text="我是按钮"
        android:layout_gravity="center_horizontal" />
</RelativeLayout>

java代码:

public class MainActivity extends Activity {
    Button b;
    RelativeLayout RL;
    TextView tv;
    int id=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        b = findViewById(R.id.button);
        RL = findViewById(R.id.RL);

        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                tv = new TextView(MainActivity.this);//new一个TextView
                final RelativeLayout.LayoutParams layoutParams =  new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
                        RelativeLayout.LayoutParams.WRAP_CONTENT);//new一个Relativelayout,宽度填充屏幕,高度适配内容
                layoutParams.addRule(RelativeLayout.BELOW,R.id.button);//设置布局属性为在按钮的下方
                layoutParams.topMargin = 10;//设置布局属性:view的上边的外部留出10px的距离。(注意这里不是dp)
                tv.setLayoutParams(layoutParams);//将设置好的布局属性添加到新建的TextView中
                RL.addView(tv);
                tv.setBackgroundColor(Color.RED);//设置纯红色背景
                tv.setText("我是新建的TextView");
                id++;
                tv.setId(id);//设置view的id,使用这个方法设置的id不能与现存的所有的view的id重合,且也不能设置为0,这里设置以从1开始累加的方法设置id虽然不出错,但会有重合的风险,具体解决方案请看这篇帖子:https://blog.csdn.net/s13383754499/article/details/81383466
                //点击新建的TextView,按钮将会与TextView位置反转
                tv.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        layoutParams.removeRule(RelativeLayout.BELOW);//移除TextView处于button下方的属性
                        RelativeLayout.LayoutParams b_layoutparams = (RelativeLayout.LayoutParams) b.getLayoutParams();//获取按钮的布局属性
                        b_layoutparams.addRule(RelativeLayout.BELOW,tv.getId());//设置按钮处于TextView的下方
                        b.setLayoutParams(b_layoutparams);//将布局属性重新赋予给button,实际上这行代码也可不打,因为前面定义b_layoutparams时已经b_layoutparams和b绑定在一起了
                    }
                });
            }
        });

    }

}

实现效果:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/isenjouy/article/details/103414720

智能推荐

【2024】MathorCupA 题| 移动通信网络中 PCI 规划问题(思路、代码持续更新......)-程序员宅基地

文章浏览阅读685次,点赞5次,收藏6次。物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI 模3干扰等现象。PCI 规划对于减少物理层的小区间互相干(ICI),增加物理下行控制信道(PDCCH)的吞吐量有着重要的作用,尤其是对于基站小区覆盖边缘的用户和发生信号切换的用户,能有效地降低信号干扰,提升用户的体验。

STM32CubeMX ULN2003步进电机驱动_stm32 步进电机-程序员宅基地

文章浏览阅读690次,点赞10次,收藏16次。根据数据表,当28BYJ-48电机在全步模式下运行时,每步对应于11.25°的旋转。这意味着每转有32步 (360°/11.25° = 32)。链接: https://pan.baidu.com/s/1iucYeZGygwHi3DYeds4gqA?电机转一圈有360°,那么转一圈的脉冲数 = 360 / 5.625 * 64 = 4096 个脉冲。28BYJ-48是一款5线单极步进电机,运行电压为5V。如上图所示,步距角=5.625°/64。一、28BYJ-48 步进电机。二、CubeMX配置。_stm32 步进电机

论文阅读 Vision Transformer - VIT_vision transformer论文-程序员宅基地

文章浏览阅读712次,点赞8次,收藏9次。通过将图像切成patch线形层编码成token特征编码的方法,用transformer的encoder来做图像分类multihead和我原有的理解偏差修正。我以为的是QKV会有N块相同的copy(),每一份去做后续的linear等操作。代码里是直接用linear将QKV分为一整个大块,用permute/rearrange的操作切成了N块,f(Q,K)之后再恢复成一整个大块,很强。_vision transformer论文

es安装后的配置_es安装完-程序员宅基地

文章浏览阅读180次。今天在安装好了es,启动和配置花了点时间,这里记录一下。配置elasticsearch.yml,参数大致如下:属性说明cluster.name集群名称,默认elasticsearchnode.name节点名称node.attr.rack节点服务器所在的机架信息path.data索引数据存储路径path.log日志存储路径bootstr..._es安装完

php程序控制打印机自动打印_php实现打印机打印-程序员宅基地

文章浏览阅读1.2k次。【代码】php程序控制打印机自动打印。_php实现打印机打印

[论文速度] 超分系列:基于频率分离的图像超分辨率算法 两篇 ICCVW 2019 和 CVPRW 2020_frequency separation for real-world super-resoluti-程序员宅基地

文章浏览阅读2.9k次。Frequency Separation for Real-World Super-Resolution[PAPER]_frequency separation for real-world super-resolution

随便推点

论文参考文献的引用规则-程序员宅基地

文章浏览阅读927次,点赞19次,收藏24次。在科技论文中,凡是引用前人(包括作者自己过去)已发表的文献中的观点、数据和材料等,都要对它们在文中出现的地方予以标明,并在文末(致谢段之后)列出参考文献表。这项工作叫作参考文献著录。科学研究具有继承性,需要研究者充分了解前人的工作,吸收前人的研究精华,开拓创新。因此,撰写科技论文不可避免地要引用、参考别人的文献。论文列参考文献,一是交代作者的研究背景,反映出真实的科学依据,介绍他人的研究成果,又便于感兴趣的读者查阅,进行深入研究。

idea开发android studio插件,打印日志_idea 导出安卓日志-程序员宅基地

文章浏览阅读2.4k次。插件项目中需要打印的地方全部使用idea的logger类import com.intellij.openapi.diagnostic.Logger;/** * @Author: XIELINHUA * @Date: 2019/7/23 12:28 */public class ApkTools extends DumbAwareAction { private static..._idea 导出安卓日志

深入理解python的迭代器,生成器,可迭代对象区别-程序员宅基地

文章浏览阅读280次。要先搞清楚这三者区别首先需要给文章点个赞。呸呸呸,说错了,需要先弄明白什么是迭代,先补充一下迭代的概念在进入正题的讲解。迭代:像list,tuple,dict这样的数据类型,我们通过for...in...语法从中依次拿到数据进行使用,这样的遍历过程,就叫做迭代正文开始1,可迭代对象简单来说,某个对象内部具有__iter__方法,那么它就是可迭代对象(Iterable)。全剧终!事情..._请说一下迭代器,可迭代对象,生成器的定义,区别,优缺点。

2021年关于Delphi/Object Pascal编程语言的现状和历史-程序员宅基地

文章浏览阅读8.3k次,点赞4次,收藏8次。关于Delphi/Object PascalDelphi是一种基于 Object Pascal 的编程语言,用于桌面、移动、Web 和控制台软件开发。在 1995 年首次亮相之前的最初开发过程中,Delphi 是一种尚未命名的产品的代号。function DigitSum(AValue: Int64): Integer;begin if AValue mod 10 = AValue then Result := AValue else Result := (AVa.._delphi/object pascal

el-upload 上传文件,去掉默认动画效果。_去除el-upload上传动画-程序员宅基地

文章浏览阅读3.7k次,点赞5次,收藏5次。el-upload 上传文件,去掉默认动画效果。_去除el-upload上传动画

CentOS7离线安装Mysql_centos离线安装mysql5.7-程序员宅基地

文章浏览阅读776次。CenOS7 离线安装Mysql5.7 (rpm)_centos离线安装mysql5.7

推荐文章

热门文章

相关标签