2016-10-14 5 views
1

android.support.v7.widget.GridLayoutに2つの列があります。私はグリッドにフィールドを追加したいが、これに対して属性を指定する方法はわからない。GridLayoutのネストされた要素の重みと幅を指定する方法

私のレイアウト

<LinearLayout 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:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:padding="10dp" 
    tools:context="com.mappolygon.PolygonDialogFragment"> 

    <android.support.v7.widget.GridLayout 
     android:id="@+id/grid" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="10dp" 
     app:columnCount="2"> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_lat1" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_lat1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/latitude_1" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_long1" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_long1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/longitude_1" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_lat2" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 

       android:id="@+id/et_lat2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/latitude_2" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_long2" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_long2" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/longitude_2" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_lat3" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_lat3" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/latitude_3" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_long3" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_long3" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/longitude_3" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_lat4" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_lat4" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/latitude_4" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 

     <android.support.design.widget.TextInputLayout 
      android:id="@+id/layout_long4" 
      android:layout_width="0dp" 
      app:layout_columnWeight="1"> 

      <EditText 
       android:id="@+id/et_long4" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:hint="@string/longitude_4" 
       android:inputType="numberDecimal|numberSigned" /> 
     </android.support.design.widget.TextInputLayout> 
    </android.support.v7.widget.GridLayout> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab_add_coordinates" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:src="@drawable/ic_add" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/btn_build_polygon" 
      style="@style/Base.Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="bottom" 
      android:text="@string/build_polygon" /> 

     <Button 
      android:id="@+id/btn_cancel" 
      style="@style/Base.Widget.AppCompat.Button.Colored" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/cancel" /> 
    </LinearLayout> 
</LinearLayout> 

@Bind({R.id.et_lat1, R.id.et_long1, R.id.et_lat2, R.id.et_long2, R.id.et_lat3, R.id.et_long3, R.id.et_lat4, R.id.et_long4}) 
    List<EditText> coordinatesList; 
    @Bind({R.id.layout_lat1, R.id.layout_long1, R.id.layout_lat2, R.id.layout_long2, R.id.layout_lat3, R.id.layout_long3, R.id.layout_lat4, R.id.layout_long4}) 
    List<TextInputLayout> inputLayoutList; 
    @Bind(R.id.grid) 
    GridLayout gridLayout; 
**...** 

    @OnClick(R.id.fab_add_coordinates) 
    void addFields(){ 
     TextInputLayout inputLayoutLat = new TextInputLayout(getActivity()); 
     TextInputLayout inputLayoutLng = new TextInputLayout(getActivity()); 
     EditText editTextLat = new EditText(getActivity()); 
     EditText editTextLng = new EditText(getActivity()); 

     inputLayoutLat.addView(editTextLat); 
     inputLayoutLng.addView(editTextLng); 

     coordinatesList.add(editTextLat); 
     coordinatesList.add(editTextLng); 
     inputLayoutList.add(inputLayoutLat); 
     inputLayoutList.add(inputLayoutLng); 

     gridLayout.addView(inputLayoutLat); 
     gridLayout.addView(inputLayoutLng); 
    } 

だから、どのようにこの場合の重量と幅を設定する(私はButterknifeを使用しています)の取り扱い私のボタン?

+0

GridLayoutManagerでRecyclerViewを使用する... GridViewは、これ以上推奨される方法ではありません。 – shivamDev

+0

元々は重量がサポートされていたとは思わない – jak10h

+0

@shivamDevシンプルなフォームのオーバーヘッドになると思いました。そして、あなたはGridLayoutが非難されているリンクを共有できますか? –

答えて

0

GridLayoutは、特定のビューを複数の行/列にまたがるようにする場合に、グリッドにビューを配置する場合に特に適しています。通常、これらの場合、特定のビューが必要な行/列がわかります。

レイアウトをもっと見ると、緯度/経度の値が編集されていることがわかります。私は、ユーザーが任意の数の座標ペアを入力できるようにプログラムで行を追加したいと思っています。

この場合、あなたのビューにListViewを使用し、新しい座標ペアが必要になるたびにリストに新しいアイテムを追加することをお勧めします。あなたのリストアイテムビューは、単純な水平LinearLayoutである可能性があります。次に、任意の行を持ちながらビューの幅を重み付けする目標を達成できます。


はい、あなたはGridLayoutLayoutParamsを使用してコード内の列重みを設定することができます。

 int row = ...; 
    int col = ...; 
    float rowWeight = ...; 
    float colWeight = ...; 
    GridLayout.Spec rowSpec = GridLayout.spec(row, rowWeight); 
    GridLayout.Spec colSpec = GridLayout.spec(col, colWeight); 
    GridLayout.LayoutParams params = new GridLayout.LayoutParams(rowSpec, colSpec); 
    params.width = ...; 
    params.height = LayoutParams.WRAP_CONTENT; 
    inputLayoutLat.setLayoutParams(params); 

前述のように、これはAPI 21以降のみです。

+0

で設定する必要があります。答えをいただきありがとうございます。しかし、手動の行と列のチェックなしで行を追加する方法はありますか? –

+0

最新の回答をご覧ください。 –

関連する問題