Conversión de layout lineal a cuadrícula

El código dado crea un layout con un layout lineal que muestra todas las carpetas. Muestra todas las carpetas en la vista horizontal. Quiero convertirlo en Grid Layout, para que pueda acomodar muchas carpetas en una pantalla.

val root = LinearLayout(this) val file = File("/sdcard/MedProRecordings/").absoluteFile if (file.isDirectory == false) { Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show() } val files = file.listFiles() var i = 1 for (f in files!!) { if (f.isDirectory) { if(f.list().isNotEmpty()){ try { val layout = LinearLayout(this) layout.id = i val btnGreen = ImageButton(this) btnGreen.setImageResource(R.drawable.play) btnGreen.setBackgroundColor(Color.TRANSPARENT) layout.addView(btnGreen) root.addView(layout) btnGreen.setOnClickListener { intent = Intent(this, Play::class.java) intent.putExtra("file",f).toString() startActivity(intent) } } catch (e: Exception) {} } } } val layout = LinearLayout(this) val scroll = HorizontalScrollView(this) scroll.addView(root) layout.addView(scroll) setContentView(layout) } 

Cree otro file xml con el layout de la cuadrícula.

Siempre que el usuario click GridLayout o cuando desee cambiarlo, simplemente cargue el nuevo xml y agregue las vistas secundarias al GridLayout xml.

¿Es esto lo que querías?

EDITAR: CÓDIGO REAL AÑADIDO (En Java simple)

Kotlin y Java se pueden usar juntos. Si hay un problema, simplemente cambie la statement de variable, para el bucle, intente capturar exception y método llamando como en Kotlin + Su otra implementación para button.onClick

  GridLayout gridLayout = new GridLayout(this); gridLayout.setOrientation(GridLayout.HORIZONTAL); gridLayout.setColumnCount(4); File file = new File("/sdcard/MedProRecordings/").getAbsoluteFile(); if (file.isDirectory() == false) { Toast.makeText(this, "ERROR", Toast.LENGTH_SHORT).show(); } File[] files = file.listFiles(); int i = 1; for (File f: files) { if (f.isDirectory()) { if(f.list().length > 0 ){ try { /*val layout = LinearLayout(this) layout.id = i*/ ImageButton btnGreen = new ImageButton(this); btnGreen.setImageResource(R.mipmap.ic_launcher); btnGreen.setBackgroundColor(Color.TRANSPARENT); Log.d("GRID LAYOUT TRY", f.getName()); gridLayout.addView(btnGreen); /*root.addView(layout)*/ btnGreen.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Intent intent = Intent(this, Play::class.java) //intent.putExtra("file",f).toString() //startActivity(intent) Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_SHORT).show(); } }); /*; { intent = Intent(this, Play::class.java) intent.putExtra("file",f).toString() startActivity(intent) }*/ } catch (Exception e) { e.printStackTrace(); } } } } 

Restante: agregue el layout de cuadrícula al layout de desplazamiento. En caso de que esté cambiando entre ambos, simplemente elimine LinearLayout del layout de desplazamiento y agregue este

PROBADO EN MI TELÉFONO Y FUNCIONA

  • cómo hacer clic en el enlace de URL en TextView en Android sin usar java
  • Cómo corregir recrear mediante progtwigción Layout
  • Cómo cambiar el ancho de un elemento secundario FlexBox después de agregarlo a FlexBox
  • Diferencia entre protegido y sin
  • Error: no se puede cambiar el título de SupportActionBar
  • Obtener el porcentaje de orientación en píxeles mediante progtwigción
  • Restricción del layout de la falla intermitente del layout
  • Cómo establecer el ancho del borde FloatingActionButton con Anko
  • Crear paginador de visualización mediante progtwigción en la barra de tabs, pero el contenido de paginador de vista se desplaza por las tabs