如何在 android 中为主 ConstraintView 设置边距?
How to set margin to main ConstraintView in android?
我想以编程方式为我的主布局设置边距。我将布局参数用作以下代码。
val parMain = mainLayout?.layoutParams as ConstraintLayout.LayoutParams
但是我有一些错误,比如
android.view.ViewGroup$LayoutParams cannot be cast to androidx.constraintlayout.widget.ConstraintLayout$LayoutParams
如果我将代码更改为 Android 想要这样:
val parMain = mainLayout?.layoutParams as ViewGroup.LayoutParams
我的布局参数中没有设置边距函数。
那是我的 xml 代码。
<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/detail_feed_scrool_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
tools:context=".DetailActivity">
<View
android:id="@+id/shadow_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:background="#99000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/detail_feed_view_pager_activity"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.viewpager.widget.ViewPager>
<FrameLayout
android:id="@+id/detail_fragment_frame_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/white"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
我如何设置保证金?
A Layout/View 的 LayoutParams
取决于它的父布局
例如:-
如果您尝试从具有 ID android:id="@+id/shadow_view"
的 <View>
获取布局参数,那么 layoutParams
将是 ConstraintLayout.LayoutParams
类型。
为什么?因为 ConstraintLayout
是 <View>
的父布局。现在 <ViewPager>
也是如此,它的直接父级也是 ConstraintLayout
,所以相同 ConstraintLayout.LayoutParams
并且当您想在任何 View/Layout 上设置 layoutParams
时,始终寻找直接父布局并设置为与该父布局类型相同 layoutParams
现在回答你的问题
在您的情况下,您没有任何父布局,这就是您获得 ViewGroup.LayoutParams
.
的原因
ViewGroup
是布局的父级 class,更像是一个通用的 class 而这个 class 没有边距。
对您来说最简单的解决方案就是将整个布局包裹在您想要的另一个布局中,这样您的 ConstraintLayout
就会有一个父级,而您的 LayoutParams
将是那种布局类型你曾经包装
类似这样
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/detail_feed_scrool_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
<View
android:id="@+id/shadow_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:background="#99000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/detail_feed_view_pager_activity"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.viewpager.widget.ViewPager>
<FrameLayout
android:id="@+id/detail_fragment_frame_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/white"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
现在,当您尝试获取 LayoutParams
时,您将获取它们作为 LinearLayout 类型
我想以编程方式为我的主布局设置边距。我将布局参数用作以下代码。
val parMain = mainLayout?.layoutParams as ConstraintLayout.LayoutParams
但是我有一些错误,比如
android.view.ViewGroup$LayoutParams cannot be cast to androidx.constraintlayout.widget.ConstraintLayout$LayoutParams
如果我将代码更改为 Android 想要这样:
val parMain = mainLayout?.layoutParams as ViewGroup.LayoutParams
我的布局参数中没有设置边距函数。
那是我的 xml 代码。
<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/detail_feed_scrool_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
tools:context=".DetailActivity">
<View
android:id="@+id/shadow_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:background="#99000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/detail_feed_view_pager_activity"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.viewpager.widget.ViewPager>
<FrameLayout
android:id="@+id/detail_fragment_frame_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/white"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
我如何设置保证金?
A Layout/View 的 LayoutParams
取决于它的父布局
例如:-
如果您尝试从具有 ID android:id="@+id/shadow_view"
的 <View>
获取布局参数,那么 layoutParams
将是 ConstraintLayout.LayoutParams
类型。
为什么?因为 ConstraintLayout
是 <View>
的父布局。现在 <ViewPager>
也是如此,它的直接父级也是 ConstraintLayout
,所以相同 ConstraintLayout.LayoutParams
并且当您想在任何 View/Layout 上设置 layoutParams
时,始终寻找直接父布局并设置为与该父布局类型相同 layoutParams
现在回答你的问题
在您的情况下,您没有任何父布局,这就是您获得 ViewGroup.LayoutParams
.
ViewGroup
是布局的父级 class,更像是一个通用的 class 而这个 class 没有边距。
对您来说最简单的解决方案就是将整个布局包裹在您想要的另一个布局中,这样您的 ConstraintLayout
就会有一个父级,而您的 LayoutParams
将是那种布局类型你曾经包装
类似这样
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/detail_feed_scrool_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary">
<View
android:id="@+id/shadow_view"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:background="#99000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/detail_feed_view_pager_activity"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</androidx.viewpager.widget.ViewPager>
<FrameLayout
android:id="@+id/detail_fragment_frame_layout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/white"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
现在,当您尝试获取 LayoutParams
时,您将获取它们作为 LinearLayout 类型