制約に従わない実行時生成UIで問題が発生します。 Android用のその他の回答とドキュメントにつきましては、ConstraintSet
とその他の方法を試しました。LinearLayout内でConstraintLayoutの実行時制約を適用する
ConstraintLayout
私は、アプリケーションの機能に不可欠な部分を持つカスタムクラスを拡張しています。私はこれらのオブジェクトを作成し、LinearLayout
にそれらを追加するWebサーバーからデータを取得します。 LinearLayout
、ConstraintLayout
、およびTextView
はすべて適切なサイズを示します。しかし、TextView
はお互いに重なり合い、どんな制約にも従わない。
レイアウトエディタで手動でやりたいことのコピーを作成しても問題ありません。
私の現在の設定(this
がConstraintLayoutを拡張し、text_name
とtext_points
がTextView
秒です):
this.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
this.addView(text_name);
this.addView(text_points);
ConstraintSet constraints = new ConstraintSet();
constraints.clone(this);
constraints.constrainHeight(text_points.getId(), WRAP_CONTENT);
constraints.constrainWidth(text_points.getId(), WRAP_CONTENT);
constraints.constrainHeight(text_name.getId(), WRAP_CONTENT);
constraints.constrainWidth(text_name.getId(), WRAP_CONTENT);
constraints.connect(text_name.getId(), LEFT, getId(), LEFT);
constraints.connect(text_points.getId(), RIGHT, getId(), RIGHT);
constraints.applyTo(this);
constrainWidth
とconstrainHeight
作品。私がそれらを取り除くか値を変更するとき、それは効果があります。しかし、connect
ビジネスのいずれも、何もしません。 TextView
はテキストのサイズが適切ですが、制約に従わない場合があります。私は.connect
の仕事をするいくつかの行がありませんか?
明確にする:私はScrollView
- >LinearLayout
- >ConstraintLayout
- >TextView
です。エディタで作成すると、制約がうまく機能します。実行時にConstraintSet
を使用してConstraintLayout
のインスタンス化で作成された場合、接続された制約は効果を持ちませんが、他のプロパティは行いません。
EDIT:ただ確認するため、ここでは、行の#の出力は、のLinearLayout(LOCS)へのLinearLayout(LDIM)の大きさ、ConstraintLayout(LOCDIM)の大きさ、およびサイズを追加していますTextViews(TVDIM、TV2DIM):
09-03 14:19:18.664 D/LOCS: 2
09-03 14:19:18.665 D/LDIM: 1080 w
09-03 14:19:18.665 D/LDIM: 58 h
09-03 14:19:18.665 D/LOCDIM: 1080 w
09-03 14:19:18.666 D/LOCDIM: 29 h
09-03 14:19:18.667 D/TVDIM: 165 w
09-03 14:19:18.667 D/TVDIM: 29 h
09-03 14:19:18.668 D/TV2DIM: 29 w
09-03 14:19:18.668 D/TV2DIM: 29 h
これには運がありません。それは最初のレンダリングの後に行わなければならない可能性がありますか? –
私が想定したこれらのメソッドは、onCreateアクティビティメソッドまたはonCreateView Fragmentメソッドで使用されていました。私はビューの一部としてそれを試したことはありません。あなたのレイアウトを投稿すると、私は追加情報を提供することができるかもしれません。私は、あなたが試みている方法がもっと複雑だと思います。 – Juan
私は、デバイスの現在の場所を指定して、Webサーバーからデータをストリーミングしています。データを確実に動的にロードすることは以前から行われています!レイアウトは 'ScrollView' - >' LinearLayout' - > 'ConstraintLayout' - >' TextView'のようになります。 ConstraintLayoutとTextViewsは、データがロードされると作成されます。データを渡すためにカスタムコンストラクタのConstraintLayoutを拡張しました。上記のスニペットは、拡張クラスのコンストラクタからのものです。 –