将线性转换为网格布局

时间:2017-07-10 12:40:18

标签: android android-layout kotlin

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

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

1 个答案:

答案 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并添加此

测试我的手机&它工作