首页 > 解决方案 > Android:允许用户自定义 UI

问题描述

我希望用户能够自定义应用程序的 UI,例如允许用户将个人资料图片的形状配置为圆形或正方形。实现这一目标的最佳方法是什么?

标签: androidkotlin

解决方案


经过一个多星期的坚持尝试,我想出了一个优雅的解决方案:

在 XML 中,我使用了数据绑定:

<data>
        <variable
            name="shape"
            type="chat.rocket.android.helper.Constants"/>
</data>
...
<com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/image_avatar"
            android:layout_width="40dp"
            android:layout_height="40dp"
            app:roundedCornerRadius='@{shape.AVATAR_SHAPE_CIRCLE ? @dimen/circle_avatar_corner_radius : @dimen/square_avatar_corner_radius}' />

由于roundedCornerRadius没有对应的 setRoundedCornerRadiusIn BindingAdapters.kt

@BindingAdapter("roundedCornerRadius")
fun setRoundedCornerRadius(view: SimpleDraweeView, height: Float) {
    val roundingParams = RoundingParams.fromCornersRadius(height)
    view.hierarchy.roundingParams = roundingParams
} 

Constants.kt文件具有可以配置为更改形状的常量:

object Constants {
    ...
    const val AVATAR_SHAPE_CIRCLE = true
}

RecyclerViewAdapter,

...
val layoutInflater = LayoutInflater.from(parent.context)
val binding: ViewDataBinding = DataBindingUtil.inflate(layoutInflater, R.layout.item_contact, parent, false)
ContactViewHolder(binding.root)
...

这是我能想到的最好的解决方案。如果有一种方法可以根据shape.AVATAR_SHAPE_CIRCLE. 例如。

if(shape.AVATAR_SHAPE_CIRCLE)
    apply these attr
else
    apply these attr

欢迎提出建议!


推荐阅读