contentView(layoutInflater.inflate(R.layout.item,null)) 全屏问题
GravesMrma opened this issue · 13 comments
为什么contentView放View对象 就直接变成了全屏
放resourcesId 就不会全屏
AnyLayer
.dialog(this)
.contentView(R.layout.layout_land) 非全屏
AnyLayer
.dialog(this)
.contentView(mView) 全屏
你贴下布局文件和转view的代码
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivImage"
android:layout_width="match_parent"
android:layout_height="200dp"
android:background="#ff8020"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center"
android:padding="20dp"
android:text="文字"
app:layout_constraintTop_toBottomOf="@id/ivImage" />
</androidx.constraintlayout.widget.ConstraintLayout>
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
tvText1.setOnClickListener {
var view = layoutInflater.inflate(R.layout.item_dialog, null)
AnyLayer
.dialog(this)
.contentView(view)
.gravity(Gravity.BOTTOM)
.backgroundColorInt(ContextCompat.getColor(this, R.color.clarity_30))
.cancelableOnTouchOutside(true)
.outsideInterceptTouchEvent(true)
.show()
}
}
}
你时说高度全屏了吗?这两种方式引入contentView的区别就是会不会带有跟布局指定的layout_开头的属性,当跟布局没有layoutParams时会指定宽高为wrap_content,具体效果和根布局的测量方式有关系,你得看下ConstraintLayout 的onMearure方法,或者换一个根布局。
我今天看了一下DialogLayer里面的代码 我改了一点代码 解决了这个问题 在DialogLayer的474行
不知道会不会引起别的问题 希望你看一下
protected void initContent() {
getViewHolder().getContent().setClickable(true);
ViewGroup.LayoutParams layoutParams = getViewHolder().getContent().getLayoutParams();
FrameLayout.LayoutParams contentParams;
if (layoutParams == null) {
contentParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
} else if (layoutParams instanceof FrameLayout.LayoutParams) {
// contentParams = (FrameLayout.LayoutParams) layoutParams; 注释这行代码 改为下面这行代码 可以暂时解决全屏高度问题
contentParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
} else {
contentParams = new FrameLayout.LayoutParams(layoutParams.width, layoutParams.height);
}
if (getConfig().mGravity != -1) {
contentParams.gravity = getConfig().mGravity;
}
getViewHolder().getContent().setLayoutParams(contentParams);
if (getConfig().mAsStatusBarViewId > 0) {
View statusBar = getViewHolder().getContent().findViewById(getConfig().mAsStatusBarViewId);
if (statusBar != null) {
ViewGroup.LayoutParams params = statusBar.getLayoutParams();
params.height = Utils.getStatusBarHeight(getActivity());
statusBar.setLayoutParams(params);
statusBar.setVisibility(View.VISIBLE);
}
}
}
我应该定位到问题了,不是这个原因,明天发版本修复。
最新版已发
@goweii AnyLayer.popup(menuView)
.align(PopupLayer.Align.Direction.VERTICAL, PopupLayer.Align.Horizontal.CENTER, PopupLayer.Align.Vertical.BELOW, true)
.outsideInterceptTouchEvent(false)
.backgroundDimDefault()
.outsideTouchedToDismiss(false)
.contentView(FilterMenuView(this@EducationCategoryActivity))
.contentAnimator(object : Layer.AnimatorCreator {
override fun createInAnimator(content: View): Animator? {
return AnimatorHelper.createTopInAnim(content)
}
override fun createOutAnimator(content: View): Animator? {
return AnimatorHelper.createTopOutAnim(content)
}
})
出现了同样的问题 .contentView() 这个方法里面如果传View 会导致高宽失效 如果传R.layout.item 则是正常的
@goweii AnyLayer.popup(menuView)
.align(PopupLayer.Align.Direction.VERTICAL, PopupLayer.Align.Horizontal.CENTER, PopupLayer.Align.Vertical.BELOW, true)
.outsideInterceptTouchEvent(false)
.backgroundDimDefault()
.outsideTouchedToDismiss(false)
.contentView(FilterMenuView(this@EducationCategoryActivity))
.contentAnimator(object : Layer.AnimatorCreator {
override fun createInAnimator(content: View): Animator? {
return AnimatorHelper.createTopInAnim(content)
}
override fun createOutAnimator(content: View): Animator? {
return AnimatorHelper.createTopOutAnim(content)
}
})
出现了同样的问题 .contentView() 这个方法里面如果传View 会导致高宽失效 如果传R.layout.item 则是正常的
你在哪个版本出现的?升级最新的试下。
我用的是 4.0.0-beta1
我用老版本的 倒没问题 就是升级之后才出现的这个问题
好的,你可以先用正式版,beta版不稳定,抽空修复。
正式版和beta版 有些区别 我目前还是用的bate版 有问题再说吧
谢谢你贡献出这么优秀的一个框架
我用的是 4.0.0-beta1
我用老版本的 倒没问题 就是升级之后才出现的这个问题
我刚试了下,在4.0.0-beta1没有复现这个问题,你具体是怎么出现的,可以贴下代码吗?