Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Adición de un TableLayout dinámico con bordes en una aplicación para Android

Estoy creando una aplicación de Android. Esta aplicación de Android tendrá objetos dinámicos. Estos objetos son Lugares con una dirección o Lat / Long, y la distancia desde la ubicación actual, y un ETA. Lo que me gustaría hacer es agregar con objetos en un TableLayout con bordes, pero tengo que ser capaz de añadir dinámicamente filas a medida que aumenta el número de lugares.

Entiendo un poco cómo hacer esto para un número fijo de hardcoded de elementos en el xml, pero ¿cuál sería la mejor manera cuando el número de objetos viene del archivo Activity.java?

  • Impedir que ImageView empuje las vistas fuera de la pantalla
  • Configuración del título y del subtítulo de la barra de acción
  • ¿Por qué se envuelve el contenido en la línea múltiple TextView fill parent?
  • Android TextView con varias líneas
  • R no se puede resolver - Android, sin importar android.R; declaración
  • Diferencia entre foo.setVisibility (View.GONE) y parent.removeView (foo)
  • A continuación se muestra una captura de pantalla de TableLayout me gustaría:

    Diseño de la tabla

    Así que el objeto sería un lugar con una dirección, distancia y dirección.

  • ¿Cómo puedo saber si existen extras de Intent en Android?
  • Error getGoogleAppId con estado: 10 KitKat para Android: GCM y Google Drive
  • Android- Thread.join () hace que la aplicación se bloquee
  • Error System.loadLibrary ()
  • Representación inconsistente de SVG entre escritorio y móvil - ¿es Arial una fuente segura en SVG?
  • ¿Cómo puedo crear un cajón deslizante con elementos de menú?
  • 2 Solutions collect form web for “Adición de un TableLayout dinámico con bordes en una aplicación para Android”

    Pero tengo que ser capaz de añadir dinámicamente filas a medida que aumenta el número de lugares.

    Esto no es difícil, cuando tiene un objeto nuevo anexar un TableRow con los datos a la TableLayout .

    Entiendo un poco cómo hacer esto para un número fijo de hardcoded de elementos en el xml, pero ¿cuál sería la mejor manera cuando el número de objetos viene del archivo Activity.java?

    No creo que haya una mejor manera (o lo que usted considera la mejor manera). Usted:

    • Inserte vistas falsas para actuar como divisores. Esto sería más fácil de implementar visualmente pero también aumentará el consumo de memoria de su aplicación, con malas consecuencias si el número de filas es grande. (1)
    • O utilice dibujos para los fondos para simular los bordes (como imágenes de nueve parches). Esto sería más simple, entonces la inserción de vistas adicionales, pero necesita un poco más de talento para que se vea bien. (2)

    Algunos ejemplos para su imagen:

    (1)

     private static final int DIVIDER_SIZE = 2; // rowsCount the number of rows to add to the TableLayout private void buildOldSchool(TableLayout table, int rowsCount) { View divider; for (int i = 0; i < rowsCount; i++) { TableRow row = new TableRow(this); for (int j = 0; j < 7; j++) { if (j % 2 == 0) { divider = new View(this); divider.setLayoutParams(new TableLayout.LayoutParams( DIVIDER_SIZE, TableLayout.LayoutParams.MATCH_PARENT)); divider.setBackgroundColor(Color.GREEN); row.addView(divider, new TableRow.LayoutParams( DIVIDER_SIZE, TableRow.LayoutParams.MATCH_PARENT)); continue; } TextView tv = new TextView(this); tv.setText("DX"); // dummy data row.addView(tv, new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); } divider = new View(this); divider.setLayoutParams(new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, DIVIDER_SIZE)); divider.setBackgroundColor(Color.GREEN); if (i == 0) { table.addView(divider); divider = new View(this); divider.setLayoutParams(new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, DIVIDER_SIZE)); divider.setBackgroundColor(Color.GREEN); } table.addView(row); table.addView(divider); } } 

    (2) o con imágenes:

     private void buildWithDrawables(TableLayout table, int rowsCount) { for (int i = 0; i < rowsCount; i++) { TableRow row = new TableRow(this); row.setBackgroundResource(i == 0 ? R.drawable.firstrow : R.drawable.normalrow); for (int j = 0; j < 3; j++) { TextView tv = new TextView(this); tv.setBackgroundResource(j == 2 ? R.drawable.extra : R.drawable.cell); tv.setText("DX"); row.addView(tv, new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT)); } table.addView(row); } } 

    Donde están las imágenes:

    • R.drawable.cell :

    • R.drawable.extra (un R.drawable.extra visualmente transparente que reproduce el parche de nueve):

    • R.drawable.normalrow :

    • R.drawable.firstrow :

    Ignorar mis habilidades de diseño.

    Si su previsión de un gran número de filas que le aconsejo que utilice un ListView , que podría muy fácil hacer que se vea como una tabla con bordes.

    No pude averiguar la línea vertical, pero algo sobre lo que puede basarse

     @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ScrollView sv = new ScrollView(this); TableLayout ll=new TableLayout(this); HorizontalScrollView hsv = new HorizontalScrollView(this); for(int i=1;i<5;i++) { TableRow tbrow=new TableRow(this); for(int j=1;j<=3;j++) { TextView tv1=new TextView(this); tv1.setText("Element :"+ i + "" + j); tbrow.addView(tv1); } ll.addView(tbrow); View v = new View(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 5); v.setLayoutParams(params); v.setBackgroundColor(getResources().getColor(android.R.color.white)); ll.addView(v); } hsv.addView(ll); sv.addView(hsv); setContentView(sv); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.