Android ------ BackgroundLibrary库实现基本样式结构

Posted 切切歆语

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android ------ BackgroundLibrary库实现基本样式结构相关的知识,希望对你有一定的参考价值。

作为一个android程序员,对于shape、selector这两个标签一定不陌生。每当UI设计师给我们设计出一个个button背景的时候,我们就需要去drawable文件夹下去新建一个bg_xxx.xml,然后很多时候区别仅仅是一个边框的颜色或者填充的颜色。这就导致了很多非常相似的.xml文件产生。 网上之前也有了一种通过自定义View,在xml中通过设置属性达到shape效果的控件。但是这种自定义的控件不太灵活,归根到底是一个自定义的button,如果我想改造项目的话就得去替换原有的button或者textView。接下来就给大家提供一种更加简单的方式:
无需自定义View,直接添加属性便可以实现shape、selector效果

为了解决在项目中大量的样式文件,例如shpre,selector等文件,引入BackgroundLibrary库。下面介绍一下BackgroundLibrary的使用。

优点:减少了大量xml文件的创建
缺点:不可以预览,需要写很多app属性(app的属性值可以根据蓝湖的UI上的代码来代入),不过写多了应该就熟悉了,哈哈。
性能:暂时没有发现,库的原理只是把原本该交给系统从xml解析属性创建Drawable的功能,换成自己实现而已。

先来看看效果图:

 

依赖:直接在布局中使用就能实现效果不要写xml布局了

implementation 'com.github.JavaNoober.BackgroundLibrary:libraryx:1.7.3'

举例:边框+背景+圆角

<TextView
    android:layout_width="130dp"
    android:layout_width="130dp"
    android:layout_height="36dp"
    android:gravity="center"
    android:text="TextView"
    android:textColor="#8c6822"
    android:textSize="20sp"
    app:bl_corners_radius="4dp"
    app:bl_solid_color="#E3B666"
    app:bl_stroke_color="#8c6822"
    app:bl_stroke_width="2dp" />

原来xml的写法

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="2dp"/>
    <solid android:color="#E3B666"/>
    <stroke android:color="#E3B666" android:width="2dp"/>
</shape>

我的案例代码:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingStart="5dp">

    <com.noober.background.view.BLTextView
        android:id="@+id/btnSubmit"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_margin="8dp"
        android:clickable="true"
        android:gravity="center"
        android:text="确定"
        android:textColor="@color/white"
        app:bl_corners_radius="4dp"
        app:bl_solid_color="#eaae32" />

    <com.noober.background.view.BLTextView
        android:id="@+id/ttt"
        android:layout_width="match_parent"
        android:layout_height="36dp"
        android:layout_margin="8dp"
        android:gravity="center"
        android:text="TextView"
        android:textColor="#8c6822"
        android:textSize="20sp"
        app:bl_corners_radius="4dp"
        app:bl_solid_color="#E3B666"
        app:bl_stroke_color="#8c6822"
        app:bl_stroke_dashGap="5dp"
        app:bl_stroke_dashWidth="10dp"
        app:bl_stroke_width="2dp" />


    <TextView
        android:id="@+id/tvCopy"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:layout_margin="8dp"
        android:gravity="center"
        android:text="复制"
        android:textColor="#ff666666"
        android:textSize="12dp"
        app:bl_corners_radius="2dp"
        app:bl_solid_color="@color/white"
        app:bl_stroke_color="#666666"
        app:bl_stroke_width="1dp" />

    <com.noober.background.view.BLButton
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="36dp"
        android:layout_margin="8dp"
        android:gravity="center"
        android:padding="0dp"
        android:text="渐变按钮"
        android:textColor="#4F94CD"
        android:textSize="20sp"
        app:bl_corners_radius="2dp"
        app:bl_gradient_angle="0"
        app:bl_gradient_endColor="#4F94CD"
        app:bl_gradient_startColor="#63B8FF" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btnOpen"
        android:layout_width="match_parent"
        android:layout_height="41dp"
        android:layout_marginStart="30dp"
        android:layout_marginTop="15dp"
        android:layout_marginEnd="30dp"
        android:gravity="center"
        android:text="系统按钮(渐变)"
        android:textColor="#ffffffff"
        android:textSize="16dp"
        app:bl_corners_radius="5dp"
        app:bl_gradient_angle="0"
        app:bl_gradient_endColor="#269BFF"
        app:bl_gradient_startColor="#1F8FFF" />

    <!--第一个点赞效果:-->

    <com.noober.background.view.BLImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_margin="8dp"
        app:bl_pressed_drawable="@mipmap/ic_message_info_checked"
        app:bl_unPressed_drawable="@mipmap/ic_message_info_normal" />



    <!--第一个点赞效果:-->

    <TextView
        android:id="@+id/tvD"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_margin="8dp"
        app:bl_pressed_drawable="@mipmap/ic_message_info_checked"
        app:bl_unPressed_drawable="@mipmap/ic_message_info_normal" />


    <Button
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_margin="8dp"
        app:bl_pressed_drawable="@mipmap/ic_message_info_checked"
        app:bl_unPressed_drawable="@mipmap/ic_message_info_normal" />

</androidx.appcompat.widget.LinearLayoutCompat>

我用的是他提供的控件,这个不一定非要用他的,你可以按照原来的控件布局,也是可以直接使用它的属性的。

官方源码地址:

https://github.com/JavaNoober/BackgroundLibrary


 

以上是关于Android ------ BackgroundLibrary库实现基本样式结构的主要内容,如果未能解决你的问题,请参考以下文章

android:background="@drawable/home_tab_bg"

android中src和background的区别

解决android:background背景图片被拉伸问题

如何使用 devicepolicymanager 为我的设备所有者应用程序在 android 10 中获取 android.permission.ACCESS_BACKGROUND_LOCATION?

在同一个按钮上使用 android:background@drawable 和 stateListAnimator 会导致问题

Android background tint颜色渲染