Closed pichsy closed 1 year ago
这么写布局 宽度和高度就不对,所见不一定为所得,特别是用约束布局时ConstraintLayout
class IdiomsHeroPopup(var context: Context, var message: String?) : BasePopupWindow(context) {
private var binding: PopupIdiomsHeroBinding =
PopupIdiomsHeroBinding.inflate(LayoutInflater.from(context))
init {
contentView = binding.root
}
我知道原因了,你没兼容 setContentView(view)只兼容了 setContentView(resId)
所以我的viewbinding不能直接用
要这么写:
private lateinit var binding: PopupIdiomsTipsBinding
init {
setContentView(R.layout.popup_idioms_tips)
}
override fun onViewCreated(contentView: View) {
binding = PopupIdiomsTipsBinding.bind(contentView)
作者大大, 啥时候兼容一下
这么写就完美了,符合开发习惯
private var binding: PopupIdiomsHeroBinding =
PopupIdiomsHeroBinding.inflate(LayoutInflater.from(context))
init {
contentView = binding.root
}
view是无法兼容的,因为view要么是new要么是inflate,在这之后我就没机会读取xml中的配置了。 之所以能兼容id是因为在inflate的时候我创建了一个临时的framelayout,借此读取xml中的设置(即layoutparam)
事实上对于viewbinding等依赖注入库我也提供了文档指引: https://www.yuque.com/razerdp/basepopup/iopg16
@NonNull public ConstraintLayout getRoot() { return this.rootView; }
@NonNull
public static PopupIdiomsTipsBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, (ViewGroup)null, false);
}
---->>这里可能有突破口,用这个方法创建,可以传入一个parent, 封装封装,是否能达到想要的?
@NonNull
public static PopupIdiomsTipsBinding inflate(@NonNull LayoutInflater inflater, @Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(layout.popup_idioms_tips, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
xml的属性是inflate方法里赋予的,后期再addview是无效的= = 如果有别的方法读取到xml属性就好了,这个问题到目前为止我还没找到方法。。。
暂时无解~如果有方法读取init后的view对应xml中的gravity,欢迎在这里留下idea~
上代码