Jetpack_0

作者: 老北瓜 | 来源:发表于2020-03-11 17:30 被阅读0次

优点:
加速开发,
消除样板代码,管理负责的任务 ,生命周期等,
高质量强大的应用。

新建NavigationActivity 查看BottomNavigationView 原理,页面搭建使用的是BottomNavigationView +fragment ,
fragment 中一个重要属性 defaultNavHost="true" 会判断回退栈中是否还有Fragment , true 会拦截返回键,否则会执行onBackPress();
fragment切换使用到了navigation 页面路由结构,资源文件中navigation文件夹,xml文件。
还可以在design中编辑xml文件, Arguments(创建当前Fragment需要传递的参数) Actions(跳转到写一个Fragment ,可以添加一些进出场动画)
DeepLinks(通过隐式意图跳转到相关页面)

DataBinding:
使用 DataBinding,在Model的build.gradle 的android { } 节点下添加
dataBinding{
enabled = true
}

编写布局文件 xml , 在根节点下 Alt +Enter 可直接生成 databing 格式的文件
变成 layout布局会自动生成一个名称对应的DataBinding对象。

<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="feedTitle"
            type="java.lang.String" />

        <import type="android.text.TextUtils" />
        <import type="android.view.View" />
    </data>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:maxLines="3"
        android:paddingLeft="@dimen/common_padding_left"
        android:paddingRight="@dimen/common_padding_right"
        android:text="@{feedTitle}"
        android:textColor="@color/color_2f2"
        android:textSize="@dimen/sp_16"
        android:visibility="@{TextUtils.isEmpty(feedTitle)?View.GONE:View.VISIBLE}"/>
</layout>

<data> 节点中 <variable> 中是自定义的属性和对应的 数据类
<import> 是引入会被使用的到的类
数据绑定方式:
text = "@{feedTitle}" // 或者 text = "@{author.name}"
图片的绑定方式不太一样

/**
*   dataBinding 图片绑定
*/
public class PPImageView extends AppCompatImageView {
  public PPImageView(Context context) {
      super(context);
  }

  public PPImageView(Context context, AttributeSet attrs) {
      super(context, attrs);
  }

  public PPImageView(Context context, AttributeSet attrs, int defStyleAttr) {
      super(context, attrs, defStyleAttr);
  }


  /**
   * dataBinding 提供用于绑定图片的注解
   * value 对应一个数组,自定义属性
   * requireAll = true ,表示 所有的属性都被调用才会绑定,  = false   只要有一个属性就可以绑定数据
   *
   * @param view
   * @param url
   * @param isCircle
   */
  @BindingAdapter(value = {"img_url", "isCircle"}, requireAll = false)
  public void setImageUrl(ImageView view, String url, boolean isCircle) {
      RequestBuilder<Drawable> builder = Glide.with(view).load(url);

     // 是否圆形
      if (isCircle) {
          builder.transform(new CircleCrop());
      }
      // 防止 原始图片过大造成资源浪费 ;
      ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
      if (layoutParams != null && layoutParams.width > 0 && layoutParams.height > 0) {
          builder.override(layoutParams.width, layoutParams.height);
      }
      builder.into(view);
  }
}

在xml中引用

<com.bg.adopt.widgets.PPImageView
            android:id="@+id/mAvatarIv"
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:img_url="@{author.avatar}"
            app:isCircle="@{true}" />

如果在布局文件中想预览 一个 TextView , 可以添加 tools:text = "这里是预览", 不会运用到运行之后的效果。

dataBinding绑定数据不是立即执行的,都会延迟一帧,在绑定数据时有个屏幕刷新的工具类,会在下一帧执行,所以如果有的组件宽高不确定,需要运行时动态计算,推荐使用原生数据绑定方式。

相关文章

  • Jetpack_0

    优点:加速开发,消除样板代码,管理负责的任务 ,生命周期等,高质量强大的应用。 新建NavigationActiv...

网友评论

      本文标题:Jetpack_0

      本文链接:https://www.haomeiwen.com/subject/bwytchtx.html