私はcircleimageviewsとテキストビューをプログラムで追加する制約レイアウトビューを持っていますが、そのときUIは全く影響を受けません。誰かが私にその問題を手伝ってもらえると感謝しています。Android - 新たに追加された画像ビューとテキストビューに制約を設定する
すべての画像ビューとテキストビューをレイアウトに追加した後、必要な制約を設定する別の関数を呼び出します。
私のUIのデザインに関しては、イメージビューを3列からなるテーブルとして表示し、実行時に行を決定する必要があります。必要に応じて、それらを互いの隣に配置して配置します制約セットを使用します。そして、各画像ビュー上のテキストビュー
内部の名前はここに私のコードですされています
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'を使うか、left/rightの代わりにstart/endを使います。これはあなたの問題かもしれません。 – Cheticamp
また、 'friendsConstraintLayout'が作成されましたか?それはあなたが探しているXMLの一部ですか、それともコードで作成していますか? – Cheticamp
@Cheticampそれはすでに定義されているxmlの一部です。最初は子供がいないので、プログラムでコードに追加します。あなたが今言ったことをテストします! –