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

  • Error: no se puede cambiar el título de SupportActionBar
  • Cómo corregir recrear mediante progtwigción Layout
  • No se puede "findViewById" en Kotlin. Obteniendo el error "Falló la inferencia de tipo"
  • Problema de context al usar Anko DSL dentro del adaptador personalizado para ListView
  • Diseño inflado por progtwigción con las extensiones de Kotlin para Android
  • ¿Es posible reutilizar un layout en Kotlin Anko?
  • ¿Cómo puedo configurar FlexBox.alignItems para flex_end programáticamente?
  • Inflar el file xml binary de exception en Windows
  • 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