Android使用LinearLayout设计,如何工作?

时间:2018-08-07 09:10:54

标签: android android-layout android-linearlayout

我在一个简单的页面上使用Android LinearLayout,其中我从一个AXML文件中为纵向和横向模式添加了1个ImageView和1个GridView。

我希望在横向模式下所有项目都排成一行,而在纵向模式下,gridvew将减少到第二行。

我该如何解决。

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">  
  <ImageView
           android:id="@+id/imageView2"
           android:layout_width="300dp"
           android:layout_height="100dp"           
           android:src="@drawable/TESTIMAGEGOF"
           android:layout_marginBottom="1dp" />
    <GridView
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:columnWidth="75dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="2dp"
        android:horizontalSpacing="2dp"
        android:stretchMode="spacingWidthUniform"
        android:id="@+id/gridView1" />

</LinearLayout>

3 个答案:

答案 0 :(得分:0)

您必须在 res 文件夹中创建 2 文件夹,其名称为: layout layout-land 并在这2个文件夹中创建同名的 xml 文件,对于布局,请使用以下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">  
  <ImageView
           android:id="@+id/imageView2"
           android:layout_width="300dp"
           android:layout_height="100dp"           
           android:src="@drawable/TESTIMAGEGOF"
           android:layout_marginBottom="1dp" />
    <GridView
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:columnWidth="75dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="2dp"
        android:horizontalSpacing="2dp"
        android:stretchMode="spacingWidthUniform"
        android:id="@+id/gridView1" />

</LinearLayout>

并在布局-土地文件夹文件中,使用以下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">  
  <ImageView
           android:id="@+id/imageView2"
           android:layout_width="100dp"
           android:layout_height="100dp"           
           android:src="@drawable/TESTIMAGEGOF"
           android:layout_marginBottom="1dp" />
    <GridView
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:layout_weight="1"
        android:columnWidth="75dp"
        android:numColumns="auto_fit"
        android:verticalSpacing="2dp"
        android:horizontalSpacing="2dp"
        android:stretchMode="spacingWidthUniform"
        android:id="@+id/gridView1" />

</LinearLayout>

答案 1 :(得分:0)

要在一种布局中进行设置,必须使用Java代码解决此问题,您应该执行2步:

1-您必须使用Java检查设备的方向:

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){

}

2-在LinearLayout中设置方向,请尝试以下代码:

LinearLayout layout = /* ... */;
layout.setOrientation(LinearLayout.VERTICAL);

您可以使用此技术。

答案 2 :(得分:0)

哦...你在xamarin工作。

在xamarin中检查方向是否垂直:

private double width = 0;
private double height = 0;

protected override void OnSizeAllocated(double width, double height)
{
    base.OnSizeAllocated(width, height); //must be called
    if (this.width != width || this.height != height)
    {
        this.width = width;
        this.height = height;

        if(width > height){
            //device is landscape
        }
    }
}

并在LinearLayout中使用设置方向:

LinearLayout LLMain = new LinearLayout(this);
LLMain.Orientation = Orientation.Horizontal;