データベースなしでConstraintLayoutにビューを動的に追加できるアプリケーションを作成しようとしています。 LayoutParamsを配置して、サイズをラップしてどこに行くかを確認します。私はすでにビューを追加することができますが、なぜ彼らは画面の左側に移動し続けているのかわかりませんし、各ビューごとに異なるLayoutParamsを使用してもサイズは同じです。また、マージンもうまくいかないようです。以下は私のコードです:ConstraintSet.RIGHTが機能しない
ConstraintSet set = new ConstraintSet();
ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(8, 8, 8, 0);
ConstraintLayout.LayoutParams lpWrap = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
int fieldCount = sharedPref.getInt(fieldCountTag, 0);
fieldCount++;
editor = sharedPref.edit();
editor.putInt(fieldCountTag, fieldCount);
editor.commit();
EditText txt = new EditText(ctx);
txt.setHint("IP:Port "+fieldCount);
txt.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
txt.setId(fieldCount);
txt.setLayoutParams(lp);
Button btn = new Button(ctx);
btn.setText("Use "+fieldCount);
btn.setId(fieldCount);
btn.setLayoutParams(lpWrap);
mainLyt.addView(txt);
mainLyt.addView(btn);
set.clone(mainLyt);
set.connect(btn.getId(), ConstraintSet.RIGHT, mainLyt.getId(), ConstraintSet.RIGHT, 8);
set.connect(btn.getId(), ConstraintSet.TOP, txt.getId(), ConstraintSet.TOP, 0);
set.connect(txt.getId(), ConstraintSet.LEFT, mainLyt.getId(), ConstraintSet.LEFT, 8);
set.connect(txt.getId(), ConstraintSet.TOP, txt3.getId(), ConstraintSet.BOTTOM, 8);
set.connect(txt.getId(), ConstraintSet.RIGHT, btn.getId(), ConstraintSet.LEFT, 8);
set.applyTo(mainLyt);
UPDATE:
何イム単に側でのEditTextとボタン側を追加して
UPDATEをやろうとしている。 私の現在のコード:
ConstraintSet set = new ConstraintSet();
ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(8, 8, 8, 0);
ConstraintLayout.LayoutParams lpWrap = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
int fieldCount = sharedPref.getInt(fieldCountTag, initFieldCount);
int topViewId = 0;
for(int x = 3; x < fieldCount; x++){
if(txtId != 0){
prevTxtId = txtId;
}
txtId = View.generateViewId();
btnId = View.generateViewId();
int id = x;
id++;
EditText txt = new EditText(ctx);
txt.setHint("IP:Port "+id);
txt.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
txt.setId(txtId);
txt.setLayoutParams(lp);
Button btn = new Button(ctx);
btn.setText("Use "+id);
btn.setId(btnId);
btn.setLayoutParams(lpWrap);
mainLyt.addView(txt);
mainLyt.addView(btn);
set.clone(mainLyt);
if(x == 3){
Log.d(TAG, "txt3Id: "+txt3.getId());
topViewId = txt3.getId();
}else{
topViewId = prevTxtId;
}
set.connect(btnId, ConstraintSet.END, mainLyt.getId(), ConstraintSet.END, 0);
set.connect(btnId, ConstraintSet.TOP, txtId, ConstraintSet.TOP, 0);
set.connect(txtId, ConstraintSet.START, mainLyt.getId(), ConstraintSet.START, 0);
set.connect(txtId, ConstraintSet.TOP, topViewId, ConstraintSet.BOTTOM, 0);
set.connect(txtId, ConstraintSet.END, btnId, ConstraintSet.START, 0);
set.applyTo(mainLyt);
}
を
更新日: マイロード方法:
ConstraintSet set = new ConstraintSet();
ConstraintLayout.LayoutParams lp = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.MATCH_PARENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(8, 8, 8, 0);
ConstraintLayout.LayoutParams lpWrap = new ConstraintLayout.LayoutParams(
ConstraintLayout.LayoutParams.WRAP_CONTENT, ConstraintLayout.LayoutParams.WRAP_CONTENT);
int fieldCount = sharedPref.getInt(fieldCountTag, initFieldCount);
int topViewId = 0;
Log.d(TAG, "fieldCount: "+fieldCount);
Log.d(TAG, "------");
for(int x = 3; x < fieldCount; x++){
if(txtId != 0){
prevTxtId = txtId;
}
txtId = View.generateViewId();
btnId = View.generateViewId();
int id = x;
id++;
EditText txt = new EditText(ctx);
txt.setHint("IP:Port "+id);
txt.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
txt.setId(txtId);
txt.setLayoutParams(lp);
Button btn = new Button(ctx);
btn.setText("Use "+id);
btn.setId(btnId);
btn.setLayoutParams(lpWrap);
mainLyt.addView(txt);
mainLyt.addView(btn);
set.clone(mainLyt);
if(x == 3){
Log.d(TAG, "txt3Id: "+txt3.getId());
topViewId = txt3.getId();
}else{
topViewId = prevTxtId;
}
Log.d(TAG, "txtId: "+txtId+" connect to topView: "+topViewId+" end"+" btnId: "+btnId);
set.connect(btnId, ConstraintSet.END, mainLyt.getId(), ConstraintSet.END, 0);
set.connect(btnId, ConstraintSet.TOP, txtId, ConstraintSet.TOP, 0);
set.connect(txtId, ConstraintSet.START, mainLyt.getId(), ConstraintSet.START, 0);
set.connect(txtId, ConstraintSet.TOP, topViewId, ConstraintSet.BOTTOM, 0);
set.connect(txtId, ConstraintSet.END, btnId, ConstraintSet.START, 0);
prevTxtId = txtId;
set.applyTo(mainLyt);
}
UPDATE:
私はお互いに接続するには、XML内の3のEditTextを使用してみました、それがうまく働きました。ロジックは私のロードメソッドでも同じですが、これはまだ動作しません。ビューは一番上に行く。ログには、正しいことが必要な
txtId: 1 connect to topView: 2131558527 end btnId: 2 fieldCount: 4
txtId: 3 connect to topView: 1 end btnId: 4 fieldCount: 5
が表示されます。
UPDATE:あなたは別のIDまたはcontraintsが動作しません持っている必要があります
<?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:id="@+id/mainLyt"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="app.com.simplewebview.MainActivity">
<EditText
android:id="@+id/txt1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:hint="IP:Port 1"
android:inputType="textUri"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/btn1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_marginTop="0dp"
android:text="Use 1"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/txt1" />
<EditText
android:id="@+id/txt2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:hint="IP:Port 2"
android:inputType="textUri"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/btn2"
app:layout_constraintTop_toBottomOf="@+id/txt1" />
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_marginTop="0dp"
android:text="Use 2"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/txt2" />
<EditText
android:id="@+id/txt3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="8dp"
android:ems="10"
android:hint="IP:Port 3"
android:inputType="textUri"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/btn3"
app:layout_constraintTop_toBottomOf="@+id/txt2" />
<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
android:layout_marginTop="0dp"
android:text="Use 3"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="@+id/txt3" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginRight="8dp"
android:clickable="true"
app:fabSize="mini"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:srcCompat="@mipmap/ic_launcher" />
</android.support.constraint.ConstraintLayout>
[この問題](https://stackoverflow.com/a/44200949/6287910)に掲載されている可能性があります。 – Cheticamp
だから、そのバグを意味する –
バグですが、私はあなたのコードをもう一度見ましたが、それはあなたの直ぐの問題ではないと思います。あなたがやろうとしていることのイメージを投稿するか、それを詳細に記述します。あなたの制約が正しく設定されているようには見えません。 – Cheticamp