热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androidxml一次添加多个item元素标签,通过标签直接生成shape,无需再写shape.xmlBackgroundLibrary...

BackgroudLibraryAframeworkfordirectlygeneratingshapethroughTags,noneedtowriteshape.xmlagai

BackgroudLibrary

A framework for directly generating shape through Tags, no need to write shape.xml again(通过标签直接生成shape,无需再写shape.xml)

9aaaf4cb-5a0e-4df1-a2e9-ed712cdf76ec

依赖方式:

implementation "com.android.support:appcompat-v7:$supportVersion"

implementation 'com.noober.background:core:1.2.2'

版本更新:

1.0.5 解决android 8以下Fragment中view显示问题,解决水波纹不能与press事件共存问题,优化水波纹显示

1.2.0 增加对selector的支持

1.2.2 修复部分属性不生效的bug

示例效果

14dfa4f9-b861-4523-a5e0-4067330c79b7

使用方法

1、在BaseActivity中的super.onCreate之前调用。

BackgroundLibrary.inject(context);

2、在layout中直接添加属性即可。

支持的自定义属性

下面是所有的自定义属性,使用方法和shape、selector完全一样

shape类

支持shape的所有属性,命名规则就是标签名_标签属性名:

名称类型

shaperectangle、oval、line、ring(暂时不支持)

solid_colorcolor

corners_radiusdimension

corners_bottomLeftRadiusdimension

corners_bottomRightRadiusdimension

corners_topLeftRadiusdimension

corners_topRightRadiusdimension

gradient_angleinteger

gradient_centerXfloat

gradient_centerYfloat

gradient_centerColorcolor

gradient_endColorcolor

gradient_startColorcolor

gradient_gradientRadiusdimension

gradient_typelinear、radial、sweep

gradient_useLevelboolean

size_widthdimension

size_heightdimension

stroke_widthdimension

stroke_colorcolor

stroke_dashWidthdimension

stroke_dashGapdimension

selector类

支持selector的所有属性:

名称类型

checkable_drawablecolor、reference

checked_drawablecolor、reference

enabled_drawablecolor、reference

selected_drawablecolor、reference

pressed_drawablecolor、reference

focused_drawablecolor、reference

focused_hoveredcolor、reference

focused_activatedcolor、reference

unCheckable_drawablecolor、reference

unChecked_drawablecolor、reference

unEnabled_drawablecolor、reference

unSelected_drawablecolor、reference

unPressed_drawablecolor、reference

unFocused_drawablecolor、reference

unFocused_hoveredcolor、reference

unFocused_activatedcolor、reference

其他属性

名称类型备注

ripple_enableboolean是否开启点击的水波纹效果

ripple_colorcolor水波纹颜色(如果开启,一定要有这个属性能生效)

unpressed_colorcolor没有press的时候的颜色(早版本的属性,可以被pressed_drawable替换)

pressed_colorcolorpress时候的颜色(早版本的属性,可以被unPressed_drawable替换)

使用例子

1.边框+背景+圆角

android:layout_width="130dp"

android:layout_height="36dp"

android:gravity="center"

android:text="TextView"

android:textColor="#8c6822"

android:textSize="20sp"

app:corners_radius="4dp"

app:solid_color="#E3B666"

app:stroke_color="#8c6822"

app:stroke_width="2dp" />

等同于

2、渐变

android:startColor="#63B8FF"

android:endColor="#4F94CD"/>

等同于

android:id="@+id/btn"

android:layout_width="130dp"

android:layout_height="36dp"

android:layout_marginTop="5dp"

android:gravity="center"

android:padding="0dp"

android:text="跳转到列表"

android:textColor="#4F94CD"

android:textSize="20sp"

app:corners_radius="2dp"

app:gradient_angle="0"

app:gradient_endColor="#4F94CD"

app:gradient_startColor="#63B8FF" />

点击效果

7218a260-380b-4b86-b332-e9e8b4b3cb3a

第一个点赞效果:

android:layout_width="20dp"

android:layout_height="20dp"

android:layout_marginTop="5dp"

app:pressed_drawable="@drawable/circle_like_pressed"

app:unPressed_drawable="@drawable/circle_like_normal" />

就等同于:

android:drawable="@drawable/circle_like_pressed" />

android:drawable="@drawable/circle_like_normal" />

第二个按钮效果:

android:layout_width="300dp"

android:layout_height="50dp"

android:layout_marginTop="5dp"

android:gravity="center"

android:padding="0dp"

android:text="有波纹触摸反馈的按钮"

android:textColor="@android:color/white"

android:textSize="20sp"

app:corners_radius="20dp"

app:pressed_drawable="#71C671"

app:ripple_color="#71C671"

app:ripple_enable="true"

app:stroke_color="#8c6822"

app:stroke_width="2dp"

app:unPressed_drawable="#7CFC00" />

使用其实基本和selector shape一样。

简单的性能测试

我用原生的方法写了例子里面的shape和selector,做了一个比较简单的测试:

下面两幅图,是没有background时打开MainActivity界面的启动时间和打开ListActivity的启动时间

33b22905-72ce-49e1-933c-bd09667fbe5a

a246c425-3c92-46f8-a78e-998cc2239cac

下面两幅图,是使用原生drawable.xml去设置background时打开MainActivity界面的启动时间和打开ListActivity的启动时间

ea2c8976-df6f-448e-9e19-180bd9240912

fba51cd7-b3cb-41ee-86e8-d6effb3e0029

最后这两幅图,是使用自定义标签去设置background时打开MainActivity界面的启动时间和打开ListActivity的启动时间

a23234ad-bd92-4e4f-bae0-b81f9a575987

0586e077-e891-4b38-ad03-a00a1f9f7af8

可以看得出来,其实通过自定义标签去创建drawable并没有真的很损耗性能,其实与本身的drawable.xml差不多,但是在list中,如果没有使用viewholer,会比较消耗性能,如果使用的话,应该差不多。

不过这个分析比较简单,只能看个大概,给担心性能的同学心里可以有个底。

使用注意

1、selector的相关属性,如果传入的drawable不是颜色的资源,会覆盖掉shape设置的属性

2、在根布局添加

tools:ignore="MissingPrefix"

可以防止报红

3、因为layoutInflater限制了只能有一个factory,如果有其他库已经使用了setFactory方法,比如换肤的库,只需要在其他库调用layoutInflater.setFactory之后调用

BackgroundLibrary.inject2(context);

这样其他的库与本库同样可以生效。

4、selector一个item表示多个属性,暂时无法实现,如下:

android:drawable="@drawable/button_pressed" />

因为无法用一个属性去表示两种状态,有思路的同学可以告诉我

5、fragment使用无需任何处理,其Activity调用inject即可

6、listView,recyclerView使用也无需任何处理。

如果不生效,只需要

//在调用inflate只需调用一次context,保证adapter创建View时传入的是同一个context即可

BackgroundLibrary.inject(context);

View item = LayoutInflater.from(context).inflate(xxx)

7、自定义View中调用了inflate,同listView一样处理即可



推荐阅读
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • FeatureRequestIsyourfeaturerequestrelatedtoaproblem?Please ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
author-avatar
连向明
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有