Android中代码动态修改控件属性_apk控件修改_小Tian◕的博客-程序员宅基地

技术标签: Android  

目录

修改字体的粗细

设置字体的颜色

设置显示隐藏

设置LayoutParams(设置间距和宽度)

设置控件的背景

imageView的颜色变化


 


修改字体的粗细

tipTextView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗
      
tipTextView.setTypeface(Typeface.defaultFromStyle(Typeface.NORMAL));//常规

设置字体的颜色

leftTextView.setTextColor(context.getResources().getColor(R.color.black_191919));

设置显示隐藏

rightView.setVisibility(View.VISIBLE);

设置LayoutParams(设置间距和宽度)

(以下写法leftMargin必须在ConstraintLayout中,如果在其他布局中不能这么写)

DpAndPx是一个dp和px转换的工具类,网上有很多

kotlin写法:

 button.setOnClickListener {
            val layoutParams = it.layoutParams as ConstraintLayout.LayoutParams
            layoutParams.width = DpAndPx.Dp2Px(188f)
            layoutParams.leftMargin  = DpAndPx.Dp2Px(100f)
            it.layoutParams = layoutParams
        }

java写法:

 ConstraintLayout.LayoutParams layoutParams = (ConstraintLayout.LayoutParams) button.getLayoutParams();
        layoutParams.width = DpAndPx.Dp2Px(188f);
        layoutParams.leftMargin = DpAndPx.Dp2Px(100f);
        button.setLayoutParams(layoutParams);

 原先是

 

运行后

设置控件的背景

1.第一种是背景已经写好的

button.setBackgroundResource(R.mipmap.header);
 button.setBackgroundResource(R.drawable.back_point_blue);

 

2.第二种是背景没有写好,但是有好几个控件背景类型都一样,只是颜色不同而已(右下角的图片是一个单独的控件,不是背景),

如下图:

这时候如果写6个背景就有点浪费,就可以在代码中自己造背景

下面是一个例子

要想设置背景,首先必须要有一个原先存在的背景,也就是background必须有,这样才能获取到

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.Test2Activity">

    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:background="@drawable/back_point_blue"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

原来是这样的 

动态设置

public class Test2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test2);
        Button button = findViewById(R.id.button4);
        GradientDrawable background = (GradientDrawable) button.getBackground();//先获取原先背景
        background.setColor(Color.parseColor("#5ac3be"));//设置背景颜色,设置颜色的第一种方式
        background.setStroke(10,getResources().getColor(R.color.colorBlue));//设置外部边框,设置颜色的第二种方式
        background.setCornerRadius(10);//设置圆角
        background.setAlpha(80);//设置透明度
        background.setShape(GradientDrawable.RECTANGLE);//设置形状,当前为矩形,也可以设置为OVAL椭圆形
    }
}

运行结果 

imageView的颜色变化

1.在xml中改变 使用tint

 <ImageView
        android:id="@+id/imageView"
        android:layout_width="@dimen/dp_55"
        android:layout_height="@dimen/dp_55"
        android:src="@drawable/back_black_icon"
        android:tint="@color/colorPrimary"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/button4" />

 2.在代码中修改颜色

ImageView imageView = findViewById(R.id.imageView);
        Drawable drawable = ContextCompat.getDrawable(this, R.drawable.back_black_icon);
        if (drawable != null) {
            DrawableCompat.setTint(drawable,ContextCompat.getColor(this,R.color.colorBlue));
            imageView.setImageDrawable(drawable);
        }
        imageView.setOnClickListener((view)->{
            DrawableCompat.setTint(drawable,ContextCompat.getColor(this,R.color.colorCyan));
            imageView.setImageDrawable(drawable);
        });

 点击之后

 

 

 

 

 

 

 

 

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

智能推荐

Ali云 ECS 主机搭建 Discuz_X3.4_服务器架discuz x3.4 ip_上帝遗弃的幻影的博客-程序员宅基地

阿里云建站Discuz_X3.4 这里当然可以选宝塔系统或者专门的Discuz3.2系统,截至笔者写这篇文章看到的最新系统。我其实主要想学习下怎么搭建环境,按照官网的步骤来,所以单独选了ubuntu 14.04 32的操作系统。教程主要参考: Discuz官网搭建教程 首先我们需要先弄明白我们需要什么软件,分别是做什么用的1、Apache 版本是httpd-2.2.34.tar 下载地址为 http://_服务器架discuz x3.4 ip

信号&系统 | 信号的概念与常用信号_新代系统信号定义图_PurePlay的博客-程序员宅基地

信号的本质是函数,因此信号处理方法具有普适性,应用领域非常广泛。本篇介绍信号的基本概念以及一些典型的信号,主要参考奥本海姆的经典教材《信号与系统》,微信搜索公众号PurePlay,后台回复Oppenheim即可获取中文PDF。目录1. 信号的定义2. 能量和功率3. 信号的基本变换4. 信号的性质  4.1 周期性  4.2 奇偶性5. 复指数信号及其周期性  5.1 连续时..._新代系统信号定义图

OpenCV人脸识别:没有face.hpp文件和namespace cv 没有成员 face_namespace cv 没有成员face_Hik。的博客-程序员宅基地

在上一章讲到了OpenCV的安装问题:仅仅安装了OpenCV想学习人脸识别的时候就会出现些错误,在这里简单介绍一下:使用最新版的OpenCV进行人脸识别会发现没有face.hpp这个文件,而有一些网上的讲解视频当使用==#include<opencv2/face.hpp>==时,我们却没有,因为最近实现人脸识别,由于采用的是opencv3,而opencv3的人脸识别库等contrib模块已经不再内置了。这也正是人脸识别等contrib模块没有放到主仓库的原因:不稳定,仍在开发中。快速解_namespace cv 没有成员face

Python:使用threading模块实现多线程编程七[使用Condition实现复杂同步]_zhou191954的博客-程序员宅基地

目前我们已经会使用Lock去对公共资源进行互斥访问了,也探讨了同一线程可以使用RLock去重入锁,但是尽管如此我们只不过才处理了一些程序中简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题。所以我们得学会使用更深层的解决同步问题。 Python提供的Condition对象提供了对复杂线程同步问题的支持。Condition被称为条件变量,除了提供与Lock

html table tb左对齐,标签之美五——网页表格的设计_孤注一智的博客-程序员宅基地

标签之美——网页表格的使用通过表格,可以使网页排版更加清晰,形式更加简洁漂亮。一、表格布局中三个重要的标签1、:表格的开始和结束标签,行列的布局都在标签内。2、行标签的开始和结束3、列标签的开始和结束行标签在列标签的外层,不能单独使用,其中必须至少有一列。示例如下:表格的内容效果如下: 二、单元格设置的相关标签1、单元格表头这个标签用来设置表格的表头,作用和列标签相似,只是字体是加黑的。12 2、..._html表格左对齐

valign="middle"与align="center"的区别_valign=middle_费劲_奋进的博客-程序员宅基地

在标签中valign="middle"与align="center"不相同。valign 调格子中内容的垂向(上下)位置,valign=“top“上面, valign=“middle“中间,或 valign=“bottom 下面。align 调格子中内容的(左右)横向位置,align="LEFT“ 左边对齐, align="CENTER“中间 或 align="RIGHT“右_valign=middle

随便推点

那年,我们一起演的年会节目_weixin_34248849的博客-程序员宅基地

那年,我们一起演的年会节目 一年又要结束了,如果没有世界末日的话,依旧是要照常度过的…… 周三,该我分享了,准备些什么呢?突然想起来今年的年会已经确定了日期,组委会已经给全员发了通知邮件,说不好那一天就又突然通知“开始筹备”了。干脆我来个动员性质的话题吧,顺便把去年的年会节目放一下,这样不就一举多得了? 下面是ppt中的截图。 记得..._年会技术部人员排练节目

牛客KY11——二叉树的构建和遍历_牛客 数组构造二叉树_我还是学习吧的博客-程序员宅基地

题目描述及遍历二叉树的构建和遍历题解本题是IO型OJ题,需要自己设计函数。从需求上看,要构建二叉树,所以要先写二叉树结构定义;构建二叉树的功能可以写成一个函数;中序遍历再写成一个函数;在main函数接收数据。思路:输入字符串的顺序是前序遍历的结果,那么构建二叉树的过程就是二叉树前序遍历的逆过程。把题目给的例子写成二叉树就是如下形式二叉树结构struct TreeNode{ struct TreeNode* left; struct TreeNode* right_牛客 数组构造二叉树

利用FSL进行核磁数据处理(使用GUI/代码)_fsl中设计矩阵中的行数与输入数据中的 "时间点 "数不匹配_psybrain的博客-程序员宅基地

关注“心仪脑”查看更多脑科学知识的分享。关键词:文献综述、科普散文相信很多朋友在初学使用fsl进行sMRI/fMRI数据分析的时候都有一些不熟悉,这里我整理了一些使用fsl进行数据处理的经验,本篇是有关使用fsl中的feat工具进行fMRI数据预处理的部分,后续文章还会继续跟进一级,二级分析与静息态功能性连接以及与PET结合的多种高级数据处理技巧等。工具介绍:FEAT工具多用于对task/res-fMRI数据进行预处理和统计分析(1st、2st),基于实验设计的复杂性与否可以自行选择自己_fsl中设计矩阵中的行数与输入数据中的 "时间点 "数不匹配

数据挖掘-模型评估_数据挖掘模型监控指标在前端的名字_淮南草的博客-程序员宅基地

分类评估: 混淆矩阵、ROC、AUC、提升图和KS图回归评估:非监督模型评估:关联评估:_数据挖掘模型监控指标在前端的名字

路由器重温——CE1/PRI接口配置管理-程序员宅基地

E1系统和T1系统都是WAN专线的一种接入线路标准,都属于PDH(Plesiochronous Digital Hierarchy,准同步数字体系)体系。T1支持1.544Mbit/s专线电话数据传输,由24条独立通道组成;E1支持2.048Mbit/s速率,由30路数据信道和两个信令控制信道组成,共32路。CE1/PRI(Channelized E1/Primary Rate Interface,通道化E1/基群速率接口)是E1系统的一种物理接口。CE1/PRI接口可以工作在E1方式(非通道化方式)和_pri接口

关于JenkinsThere were errors checking the update sites: FileNotFoundException的解决办法,亲测_m0_46135341的博客-程序员宅基地

可以直接在我下面给的链接下载插件(下载到桌面就行)然后在jenkins中点击插件管理–》点击Advenced–》点击Upload Plugin–》选择你下载好的插件,完全可以解决你FileNotFoundException的办法下载插件链接:http://updates.jenkins-ci.org/download/plugins/...

推荐文章

热门文章

相关标签