2014-02-08 2 views
0

Android 앱이 커짐에 따라 증가/감소 테이블이 포함 된 동적 특성을 포함시켜야합니다.
따라서 XML로 정의 된 프로그래밍 방식으로 전환했습니다. 다음과 같이레이아웃을 프로그래밍 방식으로 작동시키는 방법

내 주요 XML은 기본 테이블 레이아웃을 포함하는 것은 :

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:gravity="center" 
android:orientation="vertical" > 

    <TableLayout 
     android:id="@+id/table_layout_abonos" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     android:gravity="top" > 

    </TableLayout> 
</LinearLayout> 

을 그리고 나는 방법으로 각 테이블 행에 대한 제목의 세트를 포함하는 TableRow를 사용하여 테이블의 헤더를 정의하려고 다른 TextView의.
다음과 같이 난이 구현 : 그럼에도 불구하고

public void añadeCabeceraTablaAbonos() { 

    TableLayout layoutTablaAbonados = (TableLayout) findViewById(R.id.table_layout_abonos); 

    int rowHeight = getStandardPixels(40); 

    TableRowTitulos cabeceraTablaAbonados = new TableRowTitulos(this); 

    cabeceraTablaAbonados.setId(100); 

    /* 
    * android:id="@+id/cultivo_auxiliares" android:layout_width="400dp" 
    * android:layout_height="40dp" android:layout_marginLeft="40dp" 
    * android:gravity="center" 
    * android:text="@string/cultivo_parcela_auxiliar" 
    * android:textAppearance="?android:attr/textAppearanceMedium" 
    * 
    * <TableRow android:layout_marginBottom="10dp" 
    * android:background="@color/rojo_dupont" > 
    */ 

    TableLayout.LayoutParams tableRowParams = new TableLayout.LayoutParams(
      TableLayout.LayoutParams.MATCH_PARENT, 
      TableLayout.LayoutParams.WRAP_CONTENT); 

    tableRowParams.setMargins(0, 0, 0, getStandardPixels(10)); 

    cabeceraTablaAbonados.setLayoutParams(tableRowParams); 

    header_abonado_cultivo = new TextView(this); 
    header_abonado_abono = new TextView(this); 
    header_abonado_fecha = new TextView(this); 
    header_abonado_dosis = new TextView(this); 
    header_abonado_dosificacion = new TextView(this); 
    header_abonado_metodo = new TextView(this); 
    header_abonado_deposito_A = new TextView(this); 
    header_abonado_deposito_B = new TextView(this); 
    header_abonado_deposito_C = new TextView(this); 
    header_abonado_deposito_D = new TextView(this); 
    header_botonera = new TextView(this); 

    header_abonado_cultivo.setId(101); 
    header_abonado_cultivo.setText("CULTIVO"); 
    header_abonado_cultivo.setGravity(Gravity.CENTER); 
    header_abonado_cultivo 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_CULTIVO_ABONO)); 
    //header_abonado_cultivo.setHeight(rowHeight); 
    header_abonado_cultivo.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_abono.setId(102); 
    header_abonado_abono.setText("ABONO"); 
    header_abonado_abono.setGravity(Gravity.CENTER); 
    header_abonado_abono 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_ABONO_ABONO)); 
    //header_abonado_abono.setHeight(rowHeight); 
    header_abonado_abono.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_fecha.setId(103); 
    header_abonado_fecha.setText("FECHA"); 
    header_abonado_fecha.setGravity(Gravity.CENTER); 
    header_abonado_fecha 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_FECHA_ABONO)); 
    //header_abonado_fecha.setHeight(rowHeight); 
    header_abonado_fecha.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_metodo.setId(104); 
    header_abonado_metodo.setText("MÉTODO"); 
    header_abonado_metodo.setGravity(Gravity.CENTER); 
    header_abonado_metodo 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_METODO_ABONO)); 
    //header_abonado_metodo.setHeight(rowHeight); 
    header_abonado_metodo.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_dosis.setId(105); 
    header_abonado_dosis.setText("DÓSIS"); 
    header_abonado_dosis.setGravity(Gravity.CENTER); 
    header_abonado_dosis 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_DOSIS_ABONO)); 
    //header_abonado_dosis.setHeight(rowHeight); 
    header_abonado_dosis.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_dosificacion.setId(106); 
    header_abonado_dosificacion.setText("DOSIFICACIÓN"); 
    header_abonado_dosificacion.setGravity(Gravity.CENTER); 
    header_abonado_dosificacion 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_DOSIFICACION_ABONO)); 
    //header_abonado_dosificacion.setHeight(rowHeight); 
    header_abonado_dosificacion.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_deposito_A.setId(107); 
    header_abonado_deposito_A.setText("DEP. A"); 
    header_abonado_deposito_A.setGravity(Gravity.CENTER); 
    header_abonado_deposito_A 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_DEPOSITO_ABONO)); 
    //header_abonado_deposito_A.setHeight(rowHeight); 
    header_abonado_deposito_A.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_deposito_B.setId(108); 
    header_abonado_deposito_B.setText("DEP. B"); 
    header_abonado_deposito_B.setGravity(Gravity.CENTER); 
    header_abonado_deposito_B 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_DEPOSITO_ABONO)); 
    //header_abonado_deposito_B.setHeight(rowHeight); 
    header_abonado_deposito_B.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_deposito_C.setId(109); 
    header_abonado_deposito_C.setText("DEP. C"); 
    header_abonado_deposito_C.setGravity(Gravity.CENTER); 
    header_abonado_deposito_C 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_DEPOSITO_ABONO)); 
    //header_abonado_deposito_C.setHeight(rowHeight); 
    header_abonado_deposito_C.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_abonado_deposito_D.setId(110); 
    header_abonado_deposito_D.setText("DEP. D"); 
    header_abonado_deposito_D.setGravity(Gravity.CENTER); 
    header_abonado_deposito_D 
      .setWidth(getStandardPixels(ANCHO_COLUMNA_DEPOSITO_ABONO)); 
    //header_abonado_deposito_D.setHeight(rowHeight); 
    header_abonado_deposito_D.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    header_botonera.setId(111); 
    header_botonera.setText(""); 
    header_botonera.setGravity(Gravity.CENTER); 
    //header_botonera 
    //  .setWidth(getStandardPixels(ANCHO_COLUMNA_BOTONERA_ABONO)); 
    //header_botonera.setHeight(rowHeight); 
    header_botonera.setTextAppearance(this, 
      android.R.style.TextAppearance_Medium); 

    cabeceraTablaAbonados.addView(header_abonado_cultivo); 
    cabeceraTablaAbonados.addView(header_abonado_abono); 
    cabeceraTablaAbonados.addView(header_abonado_fecha); 
    cabeceraTablaAbonados.addView(header_abonado_metodo); 
    cabeceraTablaAbonados.addView(header_abonado_dosis); 
    cabeceraTablaAbonados.addView(header_abonado_dosificacion); 
    cabeceraTablaAbonados.addView(header_abonado_deposito_A); 
    cabeceraTablaAbonados.addView(header_abonado_deposito_B); 
    cabeceraTablaAbonados.addView(header_abonado_deposito_C); 
    cabeceraTablaAbonados.addView(header_abonado_deposito_D); 
    cabeceraTablaAbonados.addView(header_botonera); 

    //abonadoLayout 

    layoutTablaAbonados.addView(cabeceraTablaAbonados); 

// TableRow.LayoutParams buttonParams = (TableRow.LayoutParams)header_abonado_cultivo.getLayoutParams(); 
// buttonParams.setMargins(15, 10, 10, 10); 
} 

, 내가 만들 수 없습니다 오전 :

가) 특정 높이를 갖는 헤더.

TableLayout.LayoutParams tableRowParams = new TableLayout.LayoutParams(
     TableLayout.LayoutParams.MATCH_PARENT, 
     TableLayout.LayoutParams.WRAP_CONTENT); 

TableLayout.LayoutParams tableRowParams = new TableLayout.LayoutParams(
     TableLayout.LayoutParams.MATCH_PARENT, 
     100); // For 100 pixels height 

으로하지만 행은 내용을 래핑 "표준"높이 남아 : 나는 대체 노력했다.

또한 일련의 단추로 구성된 데이터 행 (비 머리글)과 비슷한 문제가 있습니다.
이 버튼 텍스트는 동적으로 변경되며 이러한 문자열에 맞게 세로로 늘어납니다.
그럼에도 불구하고 이웃 버튼은 그에 따라 늘어나지 않을 것이므로 일부 버튼이 다른 버튼보다 높으면 외관이 매우 못 생깁니다 (다른 문제와 매우 흡사하므로 더 많은 코드를 붙여 넣지는 않습니다).
여기 이 제대로 수행 상응하는 XML이 (행의 키 하나에 따라 모든 버튼을 성장)입니다 :

...

(FIRST TABLE ROW IS HEADER AND NEXT ARE DATA) 

      <ScrollView 
       android:id="@+id/tab6" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:fillViewport="true" > 

       <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:gravity="center" 
        android:orientation="vertical" > 

        <TableLayout 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:layout_marginTop="20dp" 
         android:gravity="top" > 

         <TableRow 
          android:layout_marginBottom="10dp" 
          android:background="@color/rojo_dupont" > 

          <TextView 
           android:id="@+id/cultivo_auxiliares" 
           android:layout_width="400dp" 
           android:layout_height="40dp" 
           android:layout_marginLeft="40dp" 
           android:gravity="center" 
           android:text="@string/cultivo_parcela_auxiliar" 
           android:textAppearance="?android:attr/textAppearanceMedium" /> 

          <TextView 
           android:id="@+id/nombre_plaga_label" 
           android:layout_width="120dp" 
           android:layout_height="wrap_content" 
           android:layout_marginLeft="40dp" 
           android:gravity="center" 
           android:text="@string/nombre_plaga_label" 
           android:textAppearance="?android:attr/textAppearanceMedium" /> 

          <TextView 
           android:id="@+id/nombre_insecto_label" 
           android:layout_width="120dp" 
           android:layout_height="wrap_content" 
           android:layout_marginLeft="40dp" 
           android:gravity="center" 
           android:text="@string/nombre_insecto_label" 
           android:textAppearance="?android:attr/textAppearanceMedium" /> 

          <TextView 
           android:id="@+id/fecha_suelta_label" 
           android:layout_width="120dp" 
           android:layout_height="40dp" 
           android:layout_marginLeft="40dp" 
           android:gravity="center" 
           android:text="@string/fecha_suelta_label" 
           android:textAppearance="?android:attr/textAppearanceMedium" /> 

          <TextView 
           android:id="@+id/cantidad_insecto_label" 
           android:layout_width="120dp" 
           android:layout_height="wrap_content" 
           android:layout_marginLeft="40dp" 
           android:gravity="center" 
           android:text="@string/cantidad_insecto_label" 
           android:textAppearance="?android:attr/textAppearanceMedium" /> 
         </TableRow> 

         <TableRow 
          android:layout_height="wrap_content" 
          android:layout_marginBottom="5dp" > 

          <Button 
           android:id="@+id/cultivo_parcela_0" 
           android:layout_width="150dp" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="5dp" 
           android:gravity="center" 
           android:textAppearance="?android:attr/textAppearanceMedium" 
           android:textColor="#8ad5f0" /> 

          <Button 
           android:id="@+id/nombre_plaga_0" 
           android:layout_width="150dp" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="5dp" 
           android:gravity="center" 
           android:textAppearance="?android:attr/textAppearanceMedium" 
           android:textColor="#8ad5f0" /> 

          <Button 
           android:id="@+id/nombre_insecto_0" 
           android:layout_width="180dp" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="20dp" 
           android:focusableInTouchMode="false" 
           android:gravity="center" 
           android:hint="" /> 

          <Button 
           android:id="@+id/fecha_suelta_0" 
           android:layout_width="150dp" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="5dp" 
           android:gravity="center" 
           android:textAppearance="?android:attr/textAppearanceMedium" 
           android:textColor="#8ad5f0" /> 

          <EditText 
           android:id="@+id/cantidad_insecto_0" 
           android:layout_width="120dp" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="40dp" 
           android:focusableInTouchMode="false" 
           android:gravity="center" 
           android:hint="" 
           android:inputType="number" /> 

          <ImageButton 
           android:id="@+id/insecto_0_delete" 
           android:layout_width="wrap_content" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="15dp" 
           android:contentDescription="@string/delete_content_description" 
           android:src="@drawable/discard_dark" /> 

          <ImageButton 
           android:id="@+id/insecto_0_comentario" 
           android:layout_width="wrap_content" 
           android:layout_height="match_parent" 
           android:layout_marginLeft="15dp" 
           android:contentDescription="@string/delete_content_description" 
           android:src="@drawable/ic_dialog_alert_holo_dark" /> 
         </TableRow> 

이상의 행이 동일한 스키마 함께 따르지 난을 가정 레이아웃에 문제가있는 것 같지만 그것에 대해 많이 읽은 후에도 알아낼 수 없습니다.
누군가 나를 안내하거나 작동 코드를 제공 할 수 있습니까?

미리 감사드립니다.

호세.

답변

1

글쎄, 내가 해결책을 찾은 것 같아 !!. 주요 문제는 행 내부의 뷰에 잘못된 레이아웃을 선택한다는 것이 었습니다.

개념적으로 행의 높이는 WRAP_CONTENT 여야하므로 포함하는 가장 높은 뷰에서 동적으로 커집니다. 또한 행의 각 뷰는 높이가 MATCH_PARENT에 있어야하므로 행이 커질수록 커집니다. 이것은 나를 위해 매우 직관적이지는 않지만 그것입니다. 그래서 여기

이 도울 수있는 희망, 나를 위해 문제를 해결 코드의 일부 사람 :

TableRowAbonados nuevaFila = new TableRowAbonados(this); 

    TableLayout.LayoutParams tableRowParams = new TableLayout.LayoutParams(
      TableLayout.LayoutParams.MATCH_PARENT, 
      TableLayout.LayoutParams.WRAP_CONTENT); 

    int leftMargin = 0; 
    int topMargin = 0; 
    int rightMargin = 0; 
    int bottomMargin = getStandardPixels(5); 

    tableRowParams.setMargins(leftMargin, topMargin, rightMargin, 
      bottomMargin); 

    nuevaFila.setLayoutParams(tableRowParams); 

    Button botonAbono = new Button(this); 
    Button botonFecha = new Button(this); 
    Button botonMetodo = new Button(this); 
    EditText celdaDosis = new EditText(this); 

    celdaDosis.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL); 

    nuevaFila.addView(botonAbono); 
    nuevaFila.addView(botonFecha); 
    nuevaFila.addView(botonMetodo); 
    nuevaFila.addView(celdaDosis); 

    botonAbono.getLayoutParams().height=TableRow.LayoutParams.MATCH_PARENT; 
    botonFecha.getLayoutParams().height=TableRow.LayoutParams.MATCH_PARENT; 
    botonMetodo.getLayoutParams().height=TableRow.LayoutParams.MATCH_PARENT; 
    celdaDosis.getLayoutParams().height=TableRow.LayoutParams.MATCH_PARENT; 

    layoutTablaAbonados.addView(nuevaFila); 
관련 문제