【发布时间】:2021-11-22 01:13:41
【问题描述】:
所以我一直在尝试以编程方式设置约束布局。 原来的版面设计是这个
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.3">
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.48"
app:cardCornerRadius="20dp"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card1_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/up_arrow">
<TextView
android:id="@+id/card1_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyName"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card1_point"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyPoint"
android:textColor="@color/black"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/card1_company"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card1_des"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="SOME COMPANY DESCRIPTION"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.48"
app:cardCornerRadius="20dp"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card2_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/up_arrow">
<TextView
android:id="@+id/card2_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyName"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card2_point"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyPoint"
android:textColor="@color/black"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/card2_company"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card2_des"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="SOME COMPANY DESCRIPTION"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.01"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.3">
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.48"
app:cardCornerRadius="20dp"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card3_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/down_arrow">
<TextView
android:id="@+id/card3_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyName"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card3_point"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyPoint"
android:textColor="@color/black"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/card3_company"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card3_des"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="SOME COMPANY DESCRIPTION"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.48"
app:cardCornerRadius="20dp"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card4_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/down_arrow">
<TextView
android:id="@+id/card4_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyName"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card4_point"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyPoint"
android:textColor="@color/black"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/card4_company"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card4_des"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="SOME COMPANY DESCRIPTION"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.01"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.3">
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.48"
app:cardCornerRadius="20dp"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card5_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/up_arrow">
<TextView
android:id="@+id/card5_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyName"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card5_point"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyPoint"
android:textColor="@color/black"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/card5_company"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card5_des"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="SOME COMPANY DESCRIPTION"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.48"
app:cardCornerRadius="20dp"
app:cardElevation="10dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/card6_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/down_arrow">
<TextView
android:id="@+id/card6_company"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyName"
android:textColor="@color/black"
android:textSize="20sp"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card6_point"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="CompanyPoint"
android:textColor="@color/black"
app:layout_constraintHeight_default="percent"
app:layout_constraintHeight_percent="0.1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/card6_company"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
<TextView
android:id="@+id/card6_des"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="10dp"
android:text="SOME COMPANY DESCRIPTION"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHeight_default="wrap"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.5" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
因此,根据公司点,设置布局。如果积分为负数,则将公司名称和积分文本设置在父项的末尾,将描述设置为开始,如图所示,如果积分为正数,则反之。
但是当我以编程方式设置它时,对于一些进行更改的布局,文本设置得很奇怪,例如查看以编程方式设置的下一张图片
如果布局发生变化,那么某些文本的位置会更靠近中心 例如,请注意第二张图片、垂直第二布局和第三布局中的标识差异。 第三个布局不必更改,因此其位置与未以编程方式设置的第一张图片相同。然而,第二个布局是确定的,因为它是通过编程更改的
以编程方式设置布局的代码
if(arrayList.get(0).getPoints() < 0){
constraintLayout1.setBackgroundResource(R.drawable.down_arrow);
company1Name.setGravity(Gravity.END);
company1point.setGravity(Gravity.END);
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) company1Name.getLayoutParams();
params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID;
params = (ConstraintLayout.LayoutParams) company1point.getLayoutParams();
params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID;
params = (ConstraintLayout.LayoutParams) company1desc.getLayoutParams();
params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID;
}else{
constraintLayout1.setBackgroundResource(R.drawable.up_arrow);
company1desc.setGravity(Gravity.END);
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) company1Name.getLayoutParams();
params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID;
params = (ConstraintLayout.LayoutParams) company1point.getLayoutParams();
params.startToStart = ConstraintLayout.LayoutParams.PARENT_ID;
params = (ConstraintLayout.LayoutParams) company1desc.getLayoutParams();
params.endToEnd = ConstraintLayout.LayoutParams.PARENT_ID;
}
如何解决这个问题?
【问题讨论】:
-
看起来像是重力问题。尝试调用 company1Name.setGravity(Gravity.START); company1point.setGravity(Gravity.START);在其他部分。
-
我什至尝试在上面的代码中改变重力,即使它显示出奇怪的布局。
-
您只是将其更改为 END。您是否尝试在 else 部分中将其设置为 START?
-
所以检查第一个布局,它有负点,所以必须在最后设置 textviews。但即使在最后它被识别为远离父级的末尾,请检查第一张图片和第二张图片中负面布局的差异
-
你应该使用
constraintSet来设置约束
标签: android android-layout android-constraintlayout android-layoutparams