1

私は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); 
} 
+0

'ConstraintLayout'の以前のリリースでは、' ConstraintSet'処理のために左/右を守らなかった。 [このバグレポート](https://issuetracker.google.com/issues/62154545)を参照してください。最新バージョンの 'ConstraintLayout'を使うか、left/rightの代わりにstart/endを使います。これはあなたの問題かもしれません。 – Cheticamp

+0

また、 'friendsConstraintLayout'が作成されましたか?それはあなたが探しているXMLの一部ですか、それともコードで作成していますか? – Cheticamp

+0

@Cheticampそれはすでに定義されているxmlの一部です。最初は子供がいないので、プログラムでコードに追加します。あなたが今言ったことをテストします! –

答えて

1

あなたはビューを追加するたびのparamsレイアウトの新しいセットを作成する必要があります。各追加されたビューは、以前に追加されたビューのレイアウトパラメータを壊しています。次のようなものを実行します。

//Setting layout params 
circleImageViewLayoutParams = new ConstraintLayout.LayoutParams(220, 220); 
friendPic.setLayoutParams(circleImageViewLayoutParams); 
textViewLayoutParams = new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT); 
friendName.setLayoutParams(textViewLayoutParams); 

これは今あなたに問題を引き起こしていないかもしれないが、それは将来的に可能性があります。私はIDとしてゼロを使用して避けるだろう。

+0

ありがとう! –

関連する問題