### XML设置Shape、Selector > 在xml布局中设置样式我使用Databinding进行关联设置,现在MVVM架构的已经很流行,Databinding作为Android端MVVM架构的主力军,如果你还不了解,就有点落后。[Databinding了解一下?](https://blog.csdn.net/u013005791/article/details/78905401#studio_support) > > xml设置样式示例代码,使用套路基本差不多,这里我只展示一部分示例,具体示例可查看[xml布局文件](https://github.com/LiangLuDev/DevShapeUtils/blob/master/app/src/main/res/layout/activity_binding.xml) #### 启用Databinding 在项目`build.gradle`文件中添加 ``` android{ ... dataBinding { enabled = true } } ``` #### 关联布局设置 > 因为我们利用Databinding设置布局,所以在关联布局的时候会有一些不(sao)一(cao)样(zuo),当然慌不要慌,只是多加一行代码的事情。 - `Activity` 关联布局示例代码 ``` public class BindingActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ViewDataBinding viewDataBinding = DataBindingUtil.setContentView(this, R.layout.activity_binding); setContentView(viewDataBinding.getRoot()); } } ``` - `Fragment` 关联布局示例代码 ``` public class BindingFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { ViewDataBinding dataBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_binding, container, false); return dataBinding.getRoot(); } } ``` - `RecyclerView.Adapter` 关联布局示例代码 ``` public class BindingAdapter extends RecyclerView.Adapter{ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ ViewDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.adapter_binding, parent, false); return new ViewHolder(binding.getRoot()); } } ``` 有的朋友很着急,说我用的是[`BaseRecyclerViewAdapterHelper`](https://github.com/CymChad/BaseRecyclerViewAdapterHelpe)怎么办?慌不要慌,官方提供了关于`Databinding`关联布局的代码,[查看代码](https://github.com/CymChad/BaseRecyclerViewAdapterHelper/blob/master/app/src/main/java/com/chad/baserecyclerviewadapterhelper/adapter/DataBindingUseAdapter.java) #### 布局文件设置 在我们正常使用的xml布局文件最外层添加一层`layout`就完成了所有工作,可以看示例。 ``` ``` #### 布局使用示例代码 > 设置完上面的操作,就可以开始美美的写样式了。 设置`shape`部分属性 ``` ``` 设置`selector`部分属性(预览) ![DevShapeUtils-Selector](./DevShapeUtils-Selector.gif) ```