给定代码创建一个布局,其中线性布局显示所有文件夹。它显示水平视图中的所有文件夹。我想将其转换为网格布局,以便我可以在一个屏幕中容纳许多文件夹。
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)
}
答案 0 :(得分:2)
使用网格布局创建另一个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并添加此
测试我的手机&它工作