Android:以线性布局或相对布局等方式自然包装内容

Android:以线性布局或相对布局等方式自然包装内容,android,android-layout,android-linearlayout,android-relativelayout,Android,Android Layout,Android Linearlayout,Android Relativelayout,Android中是否有一个布局可以自然地包装内容 很明显,我可以尝试通过编程来测量空间大小,但我宁愿尽量避免这样做 这是一个简单的图表。在我的代码中,所有ImageView的固定宽度都是48dp。显然,我不知道会有多少列,否则我会使用表视图或其他东西,所以我正在寻找一种一旦显示在屏幕上就可以自然换行的东西 高密度筛 | | | | ImageView1 | ImageView2 | | | | |

Android中是否有一个布局可以自然地包装内容

很明显,我可以尝试通过编程来测量空间大小,但我宁愿尽量避免这样做

这是一个简单的图表。在我的代码中,所有ImageView的固定宽度都是48dp。显然,我不知道会有多少列,否则我会使用表视图或其他东西,所以我正在寻找一种一旦显示在屏幕上就可以自然换行的东西

高密度筛

|            |            |
| ImageView1 | ImageView2 |
|            |            |
|            |          
| ImageView1 | 
|            |
--------------
| ImageView2 |  
|            |
|            |           
中密度筛

|            |            |
| ImageView1 | ImageView2 |
|            |            |
|            |          
| ImageView1 | 
|            |
--------------
| ImageView2 |  
|            |
|            |           

这是可以做到的。您可以使用
GridLayout
并在不同的设备密度上为此指定不同的列计数,方法是:

GridLayout mGridLayout = (GridLayout) findViewById(R.id.myGridLayoutId);

// Do some check of device density and based on result do

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
....
if(mDensity == metrics.DENSITY_MEDIUM){
    mGridlayout.setColumnCount(1);
}else if(mDensity == metrics.DENSITY_HIGH){

   mGridlayout.setColumnCount(2);
}
等等


但是Android中没有什么比FlowLayout更好的了,它可以在JavaSwing中使用,我认为Android中没有类似的东西。然而,罗曼·盖伊(Romain Guy)在一次演示中做了一次这样的布局,使用了您描述的技术,效果很好。你可以在谷歌上搜索这段视频,给它一个机会,似乎很有希望