circleimageviews 및 텍스트 뷰를 프로그래밍 방식으로 추가하는 제약 레이아웃보기가 있습니다. 그러나 그렇게하면 UI가 전혀 영향을받지 않으며 실수를 찾을 수 없습니다. 누군가가 그 문제를 도와 주면 감사하겠습니다.안드로이드 - 새로 추가 된 imageviews 및 textviews에 제약 조건 설정
필자는 필자가 필요로하는 제약 조건을 설정하는 또 다른 함수를 호출 한 후 모든 이미지 뷰와 텍스트 뷰를 레이아웃에 추가하는 함수를 사용합니다.
UI 디자인에 관해서는 이미지 뷰를 3 개의 열로 구성된 테이블로 표시하고 런타임 중에 행을 결정하고 싶습니다. 필요할 때마다 서로 옆에 배치하여 이미지를 표시합니다. 제약 조건 세트 사용 그리고 각 이미지보기 위의 텍스트보기
내 이름은 여기에 내 코드입니다 : 당신은 당신이보기를 추가 할 때마다 PARAMS 레이아웃의 새로운 세트를 만들 필요가
private void initializeFriendsInImageViews(){
friendsImageViews=new ArrayList<ImageView>();
friendNamesTextViews=new ArrayList<TextView>();
//Initializing Layout params
ConstraintLayout.LayoutParams textViewLayoutParams = new ConstraintLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ConstraintLayout.LayoutParams circleImageViewLayoutParams = new ConstraintLayout.LayoutParams(220, 220);
//Declaring both views
CircleImageView friendPic;
TextView friendName;
for(int i=0; i<countFriends; i++) {
//Initializing both views
friendPic = new CircleImageView(getActivity());
friendName = new TextView(getActivity());
//Setting IDs
friendPic.setId(i);
friendName.setId(countFriends+i);
//Setting layout params
friendPic.setLayoutParams(circleImageViewLayoutParams);
friendName.setLayoutParams(textViewLayoutParams);
//Setting border
friendPic.setBorderColor(ContextCompat.getColor(getActivity(), R.color.border_grey));
friendPic.setBorderWidth(8);
//Load friend picture into imageview
Picasso.with(getActivity()).load(Uri.parse(friendsPicURLs.get(i))).transform(new CircleTransform()).into(friendPic);
//Load friend name into text view
friendName.setText(friendNames.get(i));
//add image view to list of image views
friendsImageViews.add(friendPic);
//add text view to list of text views
friendNamesTextViews.add(friendName);
//Add image view to my layout
friendsConstraintLayout.addView(friendPic);
//Add text view to my layout
friendsConstraintLayout.addView(friendName);
}
addConstraints();
}
private void addConstraints(){
//Initializing constraint set
ConstraintSet constraintSet = new ConstraintSet();
constraintSet.clone(friendsConstraintLayout);
for (int i=0;i<countFriends;i++){
//positioning a new row of friends (circle image views)
if (i==0){
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.LEFT,friendsConstraintLayout.getId(),ConstraintSet.LEFT,15);
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.TOP,friendsConstraintLayout.getId(),ConstraintSet.TOP,15);
}
else if ((i+1)<=3){
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.LEFT,friendsImageViews.get(i-1).getId(),ConstraintSet.RIGHT);
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.TOP,friendsImageViews.get(i-1).getId(),ConstraintSet.TOP);
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.BOTTOM,friendsImageViews.get(i-1).getId(),ConstraintSet.BOTTOM);
}
else if ((i+1)>3){
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.LEFT,friendsImageViews.get(i-3).getId(),ConstraintSet.LEFT);
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.RIGHT,friendsImageViews.get(i-3).getId(),ConstraintSet.RIGHT);
constraintSet.connect(friendsImageViews.get(i).getId(),ConstraintSet.TOP,friendsImageViews.get(i-3).getId(),ConstraintSet.BOTTOM);
}
//positioning friend names
constraintSet.connect(friendNamesTextViews.get(i).getId(),ConstraintSet.LEFT,friendsImageViews.get(i).getId(),ConstraintSet.LEFT);
constraintSet.connect(friendNamesTextViews.get(i).getId(),ConstraintSet.RIGHT,friendsImageViews.get(i).getId(),ConstraintSet.RIGHT);
constraintSet.connect(friendNamesTextViews.get(i).getId(),ConstraintSet.BOTTOM,friendsImageViews.get(i).getId(),ConstraintSet.TOP);
}
//Apply Constraints
constraintSet.applyTo(friendsConstraintLayout);
}
'ConstraintLayout'의 이전 버전에서는'ConstraintSet' 처리를 위해 왼쪽/오른쪽을 사용하지 않았습니다. [이 버그 신고] (https://issuetracker.google.com/issues/62154545)를 참조하십시오. 최신 버전의 ConstraintLayout을 사용하거나 왼쪽/오른쪽 대신 시작/끝을 사용하십시오. 이것은 귀하의 문제 일 수 있습니다. – Cheticamp
또한'friendsConstraintLayout'이 생성 되었습니까? 찾고있는 XML의 일부입니까, 아니면 코드로 작성하고 있습니까? – Cheticamp
@Cheticamp 그것은 이미 정의 된 xml의 일부입니다. 처음에는 자식이 없으며 프로그래밍 방식으로 코드에 추가합니다. 지금 말한 것을 테스트 할 것입니다! –