android gridlayout用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android gridlayout用法相关的知识,希望对你有一定的参考价值。

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
提示这个错误?
View requires API level 14 (current min is 8): <GridLayout>

android4.0以上版本出现的GridLayout布局解决了以上问题。GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。而GridLayout使用的其实是跟LinearLayout类似的API,只不过是修改了一下相关的标签而已,所以对于开发者来说,掌握GridLayout还是很容易的事情。GridLayout的布局策略简单分为以下三个部分:
首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,但是通过指定android:columnCount设置列数的属性后,控件会自动换行进行排列。另一方面,对于GridLayout布局中的子控件,默认按照wrap_content的方式设置其显示,这只需要在GridLayout布局中显式声明即可。

其次,若要指定某控件显示在固定的行或列,只需设置该子控件的android:layout_row和android:layout_column属性即可,但是需要注意:android:layout_row=”0”表示从第一行开始,android:layout_column=”0”表示从第一列开始,这与编程语言中一维数组的赋值情况类似。

最后,如果需要设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。
参考技术A GridLayout 所以最后我决定只是改为使用相对位置版面配置/线性布局建设。(使用RelativeLayout 作为根 view ,防止不必使用嵌套的重量)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:background="@color/default_bg_color">
<LinearLayout android:id="@+id/banner"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_below="@id/banner"
>

<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />

<RelativeLayout android:id="@+id/previewPane"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"/>
</LinearLayout>
</RelativeLayout>
参考技术B 将主配置文件的min写成14

使 ImageViews 适合 Android GridLayout

【中文标题】使 ImageViews 适合 Android GridLayout【英文标题】:Fit ImageViews into Android GridLayout 【发布时间】:2021-10-12 13:26:50 【问题描述】:

我需要将 4 张图片放入 GridLayout。如果我硬编码定义它们的尺寸。

例如

android:layout_
android:layout_

它工作正常。 但我的问题是,是否可以在不定义尺寸的情况下做到这一点? 同时我已经尝试过:

<GridLayout
    android:layout_
    android:layout_
    android:layout_margin="16dp"
    android:columnCount="2"
    android:orientation="horizontal"
    android:useDefaultMargins="true"
    app:layout_constraintTop_toBottomOf="@+id/top_object"
    app:layout_constraintBottom_toTopOf="@+id/bottom_object"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent">

        <ImageView
            android:layout_
            android:layout_
            android:src="@drawable/poster_21"
            android:scaleType="centerCrop"/>

        <ImageView
            android:layout_
            android:layout_
            android:src="@drawable/poster_22"
            android:scaleType="centerCrop"/>

        <ImageView
            android:layout_
            android:layout_
            android:src="@drawable/poster_23"
            android:scaleType="centerCrop"/>

        <ImageView
            android:layout_
            android:layout_
            android:src="@drawable/poster_24"
            android:scaleType="centerCrop"/>

  </GridLayout>

但在这种情况下,我的左上角图像占据了整个网格布局,另外 3 个图像具有相同的大小并且位于屏幕之外。

【问题讨论】:

嗨@ilya,你能解释一下吗,你希望你的图片看起来像什么? 嗨 Mouaad,我希望这 4 个图像对称地位于中心 【参考方案1】:

您可以为每个GridLayout 元素使用0dp 宽度和高度,即ImageView

并使用列和行权重控制宽度和高度

<?xml version="1.0" encoding="utf-8"?>
<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:grid="http://schemas.android.com/apk/tools"
    android:layout_
    android:layout_
    android:layout_margin="16dp"
    android:useDefaultMargins="true"
    android:layout_constraintTop_toBottomOf="@+id/top_object"
    android:layout_constraintBottom_toTopOf="@+id/bottom_object"
    android:layout_constraintLeft_toLeftOf="parent"
    android:layout_constraintRight_toRightOf="parent"     
    android:columnCount="2">

    <ImageView
        android:layout_
        android:layout_
        android:scaleType="centerCrop"
        android:src="@drawable/poster_21"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        grid:layout_gravity="center" />

    <ImageView
        android:layout_
        android:layout_
        android:scaleType="centerCrop"
        android:src="@drawable/poster_22"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        grid:layout_gravity="center" />

    <ImageView
        android:layout_
        android:layout_
        android:scaleType="centerCrop"
        android:src="@drawable/poster_23"
        android:text="item 0x2"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        grid:layout_gravity="center" />


    <ImageView
        android:layout_
        android:layout_
        android:scaleType="centerCrop"
        android:src="@drawable/poster_24"
        android:text="item 1x0"
        android:layout_columnWeight="1"
        android:layout_rowWeight="1"
        grid:layout_gravity="center" />

</GridLayout>

【讨论】:

以上是关于android gridlayout用法的主要内容,如果未能解决你的问题,请参考以下文章

Android之GridLayout网格布局

Android六大布局详解——GridLayout(网格布局)

使 ImageViews 适合 Android GridLayout

Android零基础入门第32节:新推出的GridLayout网格布局

Xamarin Android Forms设计器无法识别GridLayout布局参数

成长之路 GridLayout 布局