2017-09-16 10 views
0

データベースなしで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> 
+0

[この問題](https://stackoverflow.com/a/44200949/6287910)に掲載されている可能性があります。 – Cheticamp

+0

だから、そのバグを意味する –

+0

バグですが、私はあなたのコードをもう一度見ましたが、それはあなたの直ぐの問題ではないと思います。あなたがやろうとしていることのイメージを投稿するか、それを詳細に記述します。あなたの制約が正しく設定されているようには見えません。 – Cheticamp

答えて

0

txtbtnそれを試してみたい場合は

ここでは私のxmlです。 minSdkVersionが17以上の場合は、View.generateViewId()を使用してください。あなたが何をするにしても、あなたの意見には異なるIDが必要です。

設定したIDが異なることを確認したら、制約をチェックアウトします。これらはOKですが、txt3に垂直方向の制約があるまで、コンテナの垂直方向の拘束がどのようなものかはっきりしていません。まだ問題がある場合は、左/右の代わりに開始/終了を試してください。

これ以外にもいくつかの問題が発生する可能性がありますが、これらの変更を行うと、問題の一部が消えてしまうはずです。

+0

という更新プログラムを追加しました。今私は、アプリケーションを開いた後に追加されたビューを作成するためのメソッドを作成しました。私の現在のコードがうまくいくと思いますか?私は再びそれを作成するためのループを作成しました。私の更新を見てください –

+0

@RickyManalo何が起こるか見るためには、それを実行するだけです。 – Cheticamp

+0

フィールドがすでに5になっている場合は、先頭に移動します。それらを追加すると、前のものの下に移動します。私はロードメソッドを投稿します –

関連する問題