我的res / layout文件夹中有3个布局文件:
activity_main.xml
section_1.xml
section_2.xml
section_1.xml和section_2.xml都包含一个ConstraintLayout,其中包含几个ImageView。
但是,在section_2.xml中,所有ImageView都有固定的x / y约束, 而在section_1.xml中,所有ImageView都具有ConstraintHorizontal_bias属性和ConstraintVertical_bias。
我想将所有视图从一个布局(section_1 / section_2)复制到我的主布局(activity_main)。
将视图从section_2复制到activity_main很好...所有嵌套的ImageView都以正确的位置显示在屏幕上, 但是将数据从section_1复制到activity_main不能正常工作。 确实显示了视图,但它们都移到了屏幕的左上方。
此外,在记录所有视图的位置时,x和y值在section_1中均为0(而在section_2中,它们显示正确的值)。
所以我的问题是:
如何将具有水平/垂直偏置的(图像)视图成功复制到另一个布局中?
我尝试复制具有固定x / y约束的View,效果很好。
我还查看了View的方法,以查看是否可能存在诸如“ getVerticalBias()”或“ getHorizontalBias()”之类的方法,但没有成功。
以下是与我的问题有关的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
loadSections();
}
private void loadSections(){
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
Log.w("SIZE", "x: " + size.x + ", y: " + size.y );
ViewGroup main = findViewById(R.id.main_constraint_layout);
LayoutInflater inflater = LayoutInflater.from(this);
ViewGroup viewGroup = (ViewGroup) inflater.inflate(R.layout.section_1, null);
viewGroup.measure(size.x, size.y);
main.addView(viewGroup);
viewGroup.post( () -> {
Log.w("VIEWGROUP SIZE", viewGroup.getWidth() + ", " + viewGroup.getHeight());
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View view = viewGroup.getChildAt(i);
Log.w("CHILD LOCATION", "x: " + toDp(view.getX()) + ", y: " + toDp(view.getY()) );
}
});
}
private float toDp(float px){
float density = getResources().getDisplayMetrics().density;
return px / density;
}
}
这是section_1.xml的内容:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="match_parent">
<ImageView
android:id="@+id/rock3"
android:layout_width="30dp"
android:layout_height="30dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.75"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.75"
app:srcCompat="@drawable/rock_pile" />
<ImageView
android:id="@+id/rock4"
android:layout_width="30dp"
android:layout_height="30dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1"
app:srcCompat="@drawable/rock_pile" />
</android.support.constraint.ConstraintLayout>
这是section_2.xml的内容:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/diamond_1"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginStart="16dp"
android:layout_marginTop="32dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/diamond" />
<ImageView
android:id="@+id/diamond_3"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_marginStart="476dp"
android:layout_marginTop="32dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/diamond" />
</android.support.constraint.ConstraintLayout>
任何帮助表示赞赏。