如何将linearLayout转换为GridView / GridLayout

时间:2016-06-18 02:49:50

标签: android gridview android-linearlayout android-gridlayout

如何将如下所示的线性布局转换为网格视图?所以基本上我需要它是3列和2行(横向)。也没有国界。

示例项目已上传 here

enter image description here

<script>
var removeId = null;
$(document).ready(function(){
    $(".btn-remove").click(function(){
        removeId = $(this).attr("data-id");
    });
    $("#yes_delete").click(function(){
        $.ajax({
            url: "edit_audits.php",
            type: "POST",
            data: "action=delete&auditID="+removeId,
            success: function(){
                $('#question_alert').modal('hide');
                window.location.reload();
            }
        });
    }
});

UPDATE:这是我的onCreate()方法和类中的初始化:

   <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <SurfaceView
            android:id="@+id/video_1_surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_2_surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_3_surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_4_surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_5_surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_6_surfaceview"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

    </LinearLayout>

6 个答案:

答案 0 :(得分:5)

对我来说最简单的方法是使用嵌套的linearLayout,如下所示(2x2)。我现在唯一的问题是我不知道如何设置水平布局的高度恰好是屏幕高度的一半!

有人有任何想法吗?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearlayout_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <SurfaceView
            android:id="@+id/video_1_surfaceview"
            android:layout_width="wrap_content"
            android:layout_height="150dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_2_surfaceview"
            android:layout_width="wrap_content"
            android:layout_height="150dp"
            android:layout_weight="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <SurfaceView
            android:id="@+id/video_3_surfaceview"
            android:layout_width="wrap_content"
            android:layout_height="150dp"
            android:layout_weight="1" />

        <SurfaceView
            android:id="@+id/video_4_surfaceview"
            android:layout_width="wrap_content"
            android:layout_height="150dp"
            android:layout_weight="1" />
    </LinearLayout>

</LinearLayout>

答案 1 :(得分:1)

试试这个例子,看看它是如何运作的。

<GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/grid_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnCount="3"
    android:rowCount="2"
    android:orientation="horizontal">

     <SurfaceView
        android:id="@+id/video_1_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <SurfaceView
        android:id="@+id/video_2_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <SurfaceView
        android:id="@+id/video_3_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <SurfaceView
        android:id="@+id/video_4_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <SurfaceView
        android:id="@+id/video_5_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <SurfaceView
        android:id="@+id/video_6_surfaceview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</GridLayout>

答案 2 :(得分:1)

该概念是为行创建linearLayout并为列创建另一个linearLayout以添加它。在onCreate方法

中添加此代码
    int column = 3;
    int row = 4;
    RelativeLayout relativeLayout = (RelativeLayout) findViewById(Your  RelativeLayout_in_main_activity_id);
    LinearLayout rowLayout = new LinearLayout(this);
    rowLayout.setOrientation(LinearLayout.VERTICAL);
    relativeLayout.addView(rowLayout);
    for (int i = 0; i<row;i++) {
        LinearLayout columnLayout = new LinearLayout(this);
        columnLayout.setOrientation(LinearLayout.HORIZONTAL);
        for (int j = 0; j<column;j++) {
            TextView textView = new TextView(this);
            columnLayout.addView(textView ); 
        }
        rowLayout.addView(columnLayout);
    }

希望这个答案是你想要的。

答案 3 :(得分:1)

<GridLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/grid_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3"
android:rowCount="2">

 <SurfaceView
    android:id="@+id/video_1_surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_column="0"
    android:layout_row="0" />

<SurfaceView
    android:id="@+id/video_2_surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_column="1"
    android:layout_row="0" />

<SurfaceView
    android:id="@+id/video_3_surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_column="2"
    android:layout_row="0" />

<SurfaceView
    android:id="@+id/video_4_surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_column="0"
    android:layout_row="1" />

<SurfaceView
    android:id="@+id/video_5_surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_column="1"
    android:layout_row="1" />

<SurfaceView
    android:id="@+id/video_6_surfaceview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_column="2"
    android:layout_row="1" />

答案 4 :(得分:0)

由于内部实现(a set of infinitely thin lines that separate the viewing area into cells),GridLayout可能无法正常工作。尝试使用旨在高效显示视图的容器,例如RecyclerView或其新表兄,例如HorizontalGridViewVerticalGridView,您可以为后者找到一组有用的示例{ {3}}

答案 5 :(得分:0)

请检查一下。首先在 MainActivity 中或您想要的任何位置定义网格视图。然后制作 custom_layout

活动类

中的

GridView

 <GridView
            android:id="@+id/gridView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:clickable="true"
            android:columnWidth="170dp"
            android:drawSelectorOnTop="true"
            android:focusable="true"
            android:gravity="center"
            android:horizontalSpacing="5dp"
            android:numColumns="auto_fit"
            android:stretchMode="columnWidth"
            android:verticalSpacing="5dp" />

立即创建布局。 在该布局中,您可以放置​​图像视图或表面视图,无论您想要什么

  <SurfaceView
    android:id="@+id/video_1_surfaceview"
    android:layout_width="170dp"
    android:layout_height="130dp"
    />

只有一个 就够了

现在创建 AdapterClass 并为您的自定义布局充气。那是 如果您还有任何问题,请告诉我。