首页 > 其他分享 >Android自定义View使用系统自有属性

Android自定义View使用系统自有属性

时间:2023-11-12 15:55:36浏览次数:39  
标签:attr 自定义 maxLines Android View 属性

原文链接: Android自定义View使用系统自有属性 - Stars-One的杂货小窝

本篇默认各位有自定义View的相关知识,本篇只作为一个小知识点补充

有这样一种情况,比如说我们的一个自定义View中有个maxLines的属性,但是我们会注意到这个maxLines其实Android里面已经存在了(如TextView中),我们能否直接去复用此属性呢?

实现的效果实际就是把代码里我们之前的属性引用写的app:maxLInes改为了android:maxLines

答案是可以的,那么应该如何操作呢?,如下代码

class FlowLayout : ViewGroup {


    constructor(context: Context, attr: AttributeSet) : super(context, attr) {
        //注意这里这里的obtainStyledAttributes的第二个参数,数一个int数组(需要有个属性数值,且数组长度为1)
        //如果要想使用多个,就像下面那样再写一次
        context.obtainStyledAttributes(attr, intArrayOf(android.R.attr.maxLines)).apply {
            //取值类型得看对应属性定义的类型
            val maxLine = getInt(0, Int.MAX_VALUE)
            Log.d("starsone", "maxLine: $maxLine ")
            recycle()
        }

        context.obtainStyledAttributes(attr, intArrayOf(android.R.attr.maxRows)).apply {
            //这里
            val maxRow = getInt(0, Int.MAX_VALUE)
            Log.d("starsone", "maxRow: $maxRow ")
            recycle()
        }
    }

之后在xml中使用 (这里注意是android前缀而不是app前缀):

<com.example.myapplication.view.FlowLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/flowlayout"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
+    android:maxLines="10"
+    android:maxRows="11"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".FlowLayoutTestActivity">
    
/>

PS: 不过这个方法有个缺陷,就是在xml中写的时候不会有对应属性的代码提示...

参考

标签:attr,自定义,maxLines,Android,View,属性
From: https://www.cnblogs.com/stars-one/p/17827290.html

相关文章

  • SharePoint 页面中插入自定义代码
    我们都知道SharePoint是对页面进行编辑的。对于一些有编程基础的人来说,可能需要对页面中插入代码,这样才能更好的对页面进行配置。但是在新版本的SharePointmodern页面来说,虽然我们可以插入Embed组件。但是Embed组件中是不允许提供Script和Html脚本的。只能插入iFrame......
  • SharePoint 页面中插入自定义代码
    我们都知道SharePoint是对页面进行编辑的。对于一些有编程基础的人来说,可能需要对页面中插入代码,这样才能更好的对页面进行配置。但是在新版本的SharePointmodern页面来说,虽然我们可以插入Embed组件。但是Embed组件中是不允许提供Script和Html脚本的。只能插入iF......
  • vue自定义指令
    app.vue<template><divclass=""><!--自定义指令全局<inputv-focustype="text"name=""id=""><br>自定义指令局部<inputv-focus2type="text"name=""id="&......
  • Vue自定义指令
    自定义指令根据自定义的指令,可以封装一些dom操作,扩展额外的功能全局注册-语法全局注册是在min.js文件中去定义的Vue.directive('指令名',{//inserted:钩子是一个自定义指令的生命周期钩子函数之一。它会在被绑定的元素插入到父节点时调用。"inserted"(el){......
  • Android:在按钮(Button)或图像按钮(ImageButton)上合并文本和图片。
    内容来自DOChttps://q.houxu6.top/?s=Android:在按钮(Button)或图像按钮(ImageButton)上合并文本和图片。我正在尝试在按钮背景上添加一张图片,并根据运行时发生的情况动态地添加一些文本到图片上方。如果使用ImageButton,我甚至无法添加文本。如果使用Button,我可以添加文本,但只......
  • android Handler应用
    android在运行时改变ui需要在ui线程中修改才行,不然就会报错或者无法启动应用。我们怎么可以做事不管呢?既然不能在ui线程外的地方运行修改ui的代码,我们可以用Handler解决这个问题,而Handler消息机制用于同进程的线程间通信,通过发送Message我们可以有效的避开报错。那怎么写Handl......
  • android ProgressBar样式
    **实现进度条由浅黄(#ffff33)到深黄色(#ff6600)的渐变样式。****与进度条自动从0加载到99,进度条每次加1**-`android:max`:进度条的最大值。-`android:progressDrawable`:设置轨道对应的`Drawable`对象。-style="@android:style/Widget.ProgressBar.Horizontal"设置**水平进度条*......
  • android 页面切换
    案例演示:首先有MainActivity与LoginActivity两个ActivityMainActivity.javapublicclassMainActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setConte......
  • 编译原理 | Concepts & Review
    怎么感觉像是在学算法(本文主要从词法分析,语法分析,语义分析三个章节总结.1词法分析首先,应该知道编译器的流程是词法分析->语法分析->语义分析->中间代码生成->代码优化->目标代码生成.旁边还有一个符号表.词法分析分解源程序,输出单词序列(关键字,标......
  • Android程序员自救进阶指南
    前言今天摸鱼的时候看到有人36岁在深圳开起了出租车的新闻,而且对方毕业于华南师范大学,曾在大厂当过主管,因为疫情而毕业,至今2年都没能回到主业,因为上有父母,下有孩子,需要养家糊口,不愿跑美团,认为没面子,所以开起了出租车。这话不得不再次刷新了我的三观,原来开出租车还能瞧不起跑外卖的......