将线性转换为网格布局

给定的代码创建一个线性布局显示所有文件夹的布局。 它显示水平视图中的所有文件夹。 我想将其转换为网格布局,以便我可以在一个屏幕中容纳多个文件夹。

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) } 

用网格布局创建另一个xml文件。

每当用户点击GridLayout或当你想改变它,只需加载新的XML,将子视图添加到GridLayout XML。

这是你想要的吗?

编辑:实际代码已添加(在简单的Java)

Kotlin和Java可以一起使用。 如果出现问题,只需更改变量语句,for循环,请尝试捕获异常和方法调用,如Kotlin +您的其他实现 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(); } } } } 

剩余:将网格布局添加到滚动布局。 如果您在两者之间切换,只需从滚动布局中移除LinearLayout并添加它

测试了我的手机和IT作品