Folivora,在layout中直接创建drawable

栏目: IOS · Android · 发布时间: 6年前

内容简介:对于android开发者来说,在layout文件中引用drawable来设置Folivora(树懒), 形状略似猴,动作迟缓,常用爪倒挂在树枝上数小时不移动,故称之为树懒。

Folivora,在layout中直接创建drawable

对于android开发者来说,在layout文件中引用drawable来设置 View 的背景或者 ImageViewsrc 是很常见的事情,需要我们在drawable文件夹下写好xml文件就可以应用了,但是有许多drawable文件可能只被使用了一次,也有可能我们只是为了实现一个简单的圆角背景的功能。越来越多的drawable文件导致开发和维护成本的增加(还有强迫症),有没有什么方法可以直接在layout文件中去创建drawable呢,Folivora为你提供了这样的功能。

Folivora(树懒), 形状略似猴,动作迟缓,常用爪倒挂在树枝上数小时不移动,故称之为树懒。

Folivora能做什么

Folivora可以为你的View设置一个背景或者ImageView的src,当前支持的drawable类型有

  • shape (GradientDrawable)
  • selector (StateListDrawable)
  • ripple (RippleDrawable)
  • layerlist (LayerListDrawable)
  • levellist (LevelListDrawable)
  • inset (InsetDrawable)
  • clip (ClipDrawable)
  • scale (ScaleDrawable)
  • animation (AnimationDrawable)

Folivora,在layout中直接创建drawable

使用方法

只需要在layout.xml中加入自定义的属性, 告诉Folivora如何创建drawable就可以了

我们来试着创建一个简单的圆角效果:

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="20dp"
  android:text="shape1"
  app:drawableType="shape"
  app:shapeSolidColor="@android:color/holo_blue_light"
  app:shapeSolidCorner="5dp"/>
复制代码

效果是这样的

Folivora,在layout中直接创建drawable

下面我们来创建一个只有正常状态和按下状态的selector:

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="20dp"
  android:text="selector"
  app:drawableType="selector"
  app:selectorStateNormal="@android:color/holo_blue_light"
  app:selectorStatePressed="@android:color/holo_blue_dark"/>
复制代码

显示的效果是这样的

Folivora,在layout中直接创建drawable

这样的点击效果太单调了,我们来尝试一下ripple涟漪效果:

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:padding="20dp"
  android:text="ripple"
  app:drawableType="ripple"
  app:rippleColor="@android:color/white"
  app:rippleContent="@color/colorAccent"/>
复制代码

Folivora,在layout中直接创建drawable

使用ripple的确是酷炫多了,但是ripple效果是5.0之后引入的,那5.0之前的设备怎么办呢,Folivora为你提供了 RippleFallback 接口,用来创建一个替换 RippleDrawableDrawable 实例.

Folivora.setRippleFallback(new RippleFallback()){
  @Override
  public Drawable onFallback(ColorStateList ripple, Drawable content, Drawable mask, Context ctx){
    StateListDrawable sld = new StateListDrawable();
    sld.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(ripple.getDefaultColor()));
    sld.addState(new int[0], content);
    return sld;
  }
}

复制代码

更多可用的drawable类型和相应属性可以点 这里 查看

  • 注入Folivora :

我们在layout文件中设置了这些属性之后,运行app是没有任何效果的,View并不认识这些自定义的属性,但是Folivora知道,所以想让我们设置的属性生效,我们需要在context中启用Folivora,可以使用下面两种方法:

public class MainActivity extends AppCompatActivity {
  @Override
  protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(Folivora.wrap(newBase));
  }
}
复制代码

或者

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Folivra.installViewFactory(this);
    setContentView(R.layout.your_layout_xml_name);
  }
}

复制代码

Gradle依赖

dependencies {
    implementation 'cn.cricin:folivora:0.0.2'
  }
复制代码

支持工具

在Android Studio中提供了实时预览编辑layout文件,但是IDE不识别自定义的属性,预览窗口渲染不出自定义的View背景,也无法使用属性提示

为了解决这个问题,Folivora提供了支持工具,按下面的方式使用:

  1. 下载jar包点击下载。
  2. 拷贝下载的文件到Android Studio安装目录下的plugins/android/lib/下
  3. 重启IDE,如果你的项目依赖中有Folivora,打开layout文件即可实时预览

注: 支持 工具 依赖 java 的classloader加载类的顺序(替换LayoutLibraryLoader和AndroidDomExtender),所以下载的jar包请不要重命名,直接拷贝即可

预览效果

Folivora,在layout中直接创建drawable


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ajax Design Patterns

Ajax Design Patterns

Michael Mahemoff / O'Reilly Media / 2006-06-29 / USD 44.99

Ajax, or Asynchronous JavaScript and XML, exploded onto the scene in the spring of 2005 and remains the hottest story among web developers. With its rich combination of technologies, Ajax provides a s......一起来看看 《Ajax Design Patterns》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具