标签: android-gridlayout

GridLayout中的微调器

将Spinner添加到GridLayout似乎"打破"了布局.我准备了一个最小的工作示例来说明问题:

我想要一个左边是标签的网格,右边是输入控件.右边的控件应占用剩余空间.这是一个简单的例子:

使用EditTexts进行网格化

用旋转器替换其中一个输入控件会导致右列延伸到屏幕边界之外,从而导致布局难看.

Grid with Spinner

为什么会发生这种情况,我该如何避免呢?


这是第一个例子的代码:

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

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <EditText
        android:layout_gravity="fill_horizontal"
        android:hint="EditText" />

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <EditText
        android:layout_gravity="fill_horizontal"
        android:hint="EditText" />

</GridLayout>
Run Code Online (Sandbox Code Playgroud)

这是第二张图片的代码.唯一的区别是第一个EditText已被Spinner取代:

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

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <Spinner
        android:id="@+id/spinner1"
        android:layout_gravity="fill_horizontal" />

    <TextView
        android:layout_gravity="left"
        android:text="TextView" />

    <EditText
        android:layout_gravity="fill_horizontal"
        android:hint="EditText" />

</GridLayout>
Run Code Online (Sandbox Code Playgroud)

layout android android-gridlayout

8
推荐指数
1
解决办法
2722
查看次数

将具有xml布局的片段动态添加到GridLayout是不可行的

在我们的应用程序中,我们尝试动态地将片段添加到GridLayout.空格网布局在XML中定义,片段的布局也是如此.在运行时,我们检查一些数据,然后从中确定要添加到布局的片段数以及每个片段使用的布局.当我们让片段为其生成的视图分配大小时,它都可以工作,但是如果我们在布局文件中指定片段的大小,则网格布局中不会显示任何内容.显然我们可以在创建视图时简单地指定大小,但我们更愿意在片段的xml布局中进行,因为这样我们就可以利用Android的内置系统为每个设备选择正确的布局.

我正在使用支持库片段.我没有使用支持库GridLayout,如果这有所作为

相关代码和xml如下:

GridLayout XML:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <ScrollView
        android:id="@+id/grid_scroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/bottom_fragment"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginRight="8dp"
        android:layout_marginTop="?android:attr/actionBarSize"
        android:overScrollMode="ifContentScrolls" >

        <GridLayout
            android:id="@+id/grid"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:alignmentMode="alignMargins"
            android:animateLayoutChanges="true"
            android:columnCount="3"
            android:columnOrderPreserved="true"
            android:orientation="horizontal"
            android:overScrollMode="ifContentScrolls"
            android:rowOrderPreserved="true" >
        </GridLayout>
    </ScrollView>
</merge>
Run Code Online (Sandbox Code Playgroud)

片段XML的示例

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:alpha="1" >

    <Button
        android:id="@+id/button1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:alpha="1.0" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

片段onCreateView()方法

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);
    View view;
    GridLayout.Spec rowSpec = GridLayout.spec(mRowStart, mRowSpan);
    GridLayout.Spec columnSpec;
    GridLayout.LayoutParams childParams;
    if (large) …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments android-gridlayout

8
推荐指数
1
解决办法
6800
查看次数

减少android中gridlayout的行/列数

我需要一个动态的gridlayout,它可以在3乘3和4乘4之间切换.我可以将setRowCount和setColumnCount从3改为4而不是从4到3.它将显示以下问题:

引发者:java.lang.IllegalArgumentException:rowCount必须大于或等于每个子项的LayoutParams中定义的所有网格索引(和跨度)的最大值.

有没有任何解决方法来使用gridlayout实现这一目标.

提前致谢.

android android-gridlayout

8
推荐指数
2
解决办法
2972
查看次数

GridLayout列超出了它的范围

我正在尝试制作类似网格的形式,类似于官方Android开发者博客上的示例.

这是我的布局:

<?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">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="48dp"
        android:layout_marginRight="48dp"
        android:layout_marginTop="@dimen/activity_vertical_margin"
        android:columnCount="2"
        android:rowCount="2">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_gravity="end"
            android:layout_row="0"
            android:text="Send"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="24sp" />

        <Spinner
            android:id="@+id/send_currency"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_row="0" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:layout_gravity="end"
            android:layout_row="1"
            android:text="to"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="24sp" />

        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="1"
            android:layout_row="1"
            android:hint="username"
            android:textColor="?android:attr/textColorPrimary"
            android:textSize="24sp" />
    </GridLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我的左栏(静态文本,右对齐)工作正常.它将文本对齐,宽度取决于最宽的行.

但是,右列似乎是在GridLayout范围之外绘制的.

选择了GridLayout的布局预览

在该图片中,蓝色框是GridLayout的边界.您已经可以在顶部的绿色栏中看到问题.右侧应该停在GridLayout的边界(就像左侧一样),但由于某种原因它会超越它.

选择了右列的布局预览

该图片中的蓝色框是EditText的边界(它设置为wrap_content).然而,浅绿色的盒子是允许它扩展的范围.当我在EditText中输入大量字符时,它会经过GridLayout的边界,甚至超过手机屏幕的边缘!

截图

这是GridLayout中的错误吗?或者我错过了什么?

android android-layout android-gridlayout

8
推荐指数
2
解决办法
3596
查看次数

哪个LayoutManager用于2048游戏的动画?

出于培训目的,我目前正在复制2048游戏.我完成了逻辑和交互,但打印(并简单地刷新)它在一个TextView看起来很荒谬的单一内容当然.

在考虑如何为游戏构建UI时,我不确定LayoutManager选择哪个.我需要在游戏的4 x 4网格中做的是合并并在动画中添加行和列内的单元格.在我看来,这:

  • GridLayout当我需要能够处理单个行和列时,它将处理完整数据集(四行/四列中的16个瓦片),因此无法工作.但是,我不确定这一点.我曾经使用GridLayout过,但从未操纵过多少项(添加,删除),也从未使用过这种操作的动画.有没有办法操纵单行和列?

  • LinearLayout因为当我想要操纵列时遇到麻烦,但是有四个水平LinearLayouts或行,但有四个垂直LinearLayouts ,我将无法工作.

  • RelativeLayout或者ConstraintLayout可能 - 也许.这里的麻烦似乎是我必须跟踪我的16个视图TextView,并且可能以编程方式构建完整的布局,以便我可以告诉动画该做什么.当然可行,但具有挑战性.

  • CustomLayout 是一个选择,但我应该建立哪个超类?为什么?

我错过了简单的解决方案吗?如果没有,那么LayoutManager对于我的数据结构来说,最"自然"的是什么(目前是16个整数的数组,但可以很容易地改为4 x 4整数数组).

android android-animation android-layout android-gridlayout android-constraintlayout

8
推荐指数
1
解决办法
605
查看次数

使用GridLayoutManager的RecyclerView

装饰RecyclerView以获得这样的外观和感觉的最佳和最简单的方法是什么?我正在开发一个旅行座位预订应用程序...我知道我可以使用gridlayout管理员的recyclerview来做这件事但是应该是什么步骤我不知道有一件事要注意每辆巴士有不同的座位安排

在此输入图像描述

在此输入图像描述

在此输入图像描述

android android-gridlayout gridlayoutmanager recycler-adapter android-recyclerview

7
推荐指数
1
解决办法
2275
查看次数

将视图动态添加到GridLayout时,对齐方式不对

当用XML添加按钮时 - 一切都很好

通过XML添加按钮时

  <GridLayout
    android:id="@+id/social_gl_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerHorizontal="true"
    android:alignmentMode="alignBounds"
    android:columnCount="2"
    android:padding="8dp">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="45dp"
        android:layout_columnWeight="1">
        <Button
            android:layout_width="fill_parent"
            android:layout_height="45dp"
            android:background="@android:color/holo_blue_light"
            android:text="Hi"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="45dp"
        android:layout_columnWeight="1">
        <Button
            android:layout_width="fill_parent"
            android:layout_height="45dp"
            android:background="@android:color/holo_green_light"
            android:text="Whatsapp"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="45dp"
        android:layout_columnWeight="1">
        <Button
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:background="@android:color/holo_green_light"
            android:text="This is facebook"
            />
    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="45dp"
        android:layout_columnWeight="1">
        <Button
            android:layout_width="match_parent"
            android:layout_height="45dp"
            android:background="@android:color/holo_blue_light"
            android:text="On"
            />
    </LinearLayout>

</GridLayout>
Run Code Online (Sandbox Code Playgroud)

动态添加按钮时(按代码) - 缺少对齐,按钮不占用列的完整宽度

GridLayout gl = (GridLayout) findViewById(R.id.social_gl_content);
    LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
    for (int i = 0 ; i < strs.length ; i++) …
Run Code Online (Sandbox Code Playgroud)

android grid-layout android-layout android-gridlayout

7
推荐指数
1
解决办法
336
查看次数

如何以编程方式添加GridLayout子项的layout_columnWeight?

我想使用GridLayout(不GridView)作为象棋或棋子等游戏的棋盘.由于我有点不愿意使用带有64个孩子View的xml文件,我尝试以编程方式添加它们.

为了简单起见,我开始使用TextViews作为孩子ViewGridLayout.

我的问题是Views不是均匀分布的,而且我不知道如何在我的java代码中获得均匀分布.设置layout_columnWeight和没有类似"setWeight()"的方法layout_rowWeight.

目前,这是我的activity_dynamic_grid_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:id="@+id/ivLogo"
    android:background="#ff0000"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"/>

<android.support.v7.widget.GridLayout
    android:id="@+id/grid_layout"
    android:background="#004080"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/ivLogo"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="36dp">

</android.support.v7.widget.GridLayout>
Run Code Online (Sandbox Code Playgroud)

我已经将GridLayout宽度和高度设置为match_parent这里,但我在运行时使用a ViewTreeObserver.OnPreDrawListener来更改它们以获得方块板.这是有效的,彩色背景显示了预期的方形空间.

我的onCreate()

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dynamic_grid_layout);

    GridLayout gl = (GridLayout) findViewById(R.id.grid_layout);
    gl.setColumnCount(8);
    gl.setRowCount(8);

    for(int i=0; i<gl.getRowCount(); i++)
    {
        GridLayout.Spec rowSpec = GridLayout.spec(i, 1, …
Run Code Online (Sandbox Code Playgroud)

java android android-gridlayout

7
推荐指数
2
解决办法
4141
查看次数

以编程方式将 TextView 添加到网格布局对齐方式不正确

嗨,我正在尝试将带有 drawableLeft 的 TextView 添加到 GridLayout。我在循环中添加这个 TextView。TextView 被正确添加,但未正确对齐。每个 textview 应该在一个水平行中采用相等的宽度,这不会发生。

以下是我正在使用的代码

    GridLayout gridLayout = new GridLayout(getContext());
            gridLayout.setAlignmentMode(GridLayout.ALIGN_BOUNDS);
            gridLayout.setColumnCount(2);
            gridLayout.setRowCount(3);
            TextView titleText;
            for (int i = 0; facilities != null && i < facilities.size(); i++) {
                titleText = new TextView(getContext());
                titleText.setText(facilities.get(i));
                gridLayout.addView(titleText, i);
                titleText.setCompoundDrawablesWithIntrinsicBounds(rightIc, 0, 0, 0);
}
Run Code Online (Sandbox Code Playgroud)

android dynamic android-gridlayout

6
推荐指数
1
解决办法
3万
查看次数

动态 Android 网格布局,可自定义子项的位置和大小

我目前正在尝试从自定义元素(取自数据库)创建 Android 网格布局,并且需要有关如何实现它的建议。网格应该有 6 列,并且应该垂直滚动。每个网格元素(Item)都有columnSpan、columnRow、xPosition和yPosition。

这是所需结果的示例: 在此输入图像描述

我尝试使用 GridLayout,但没有适配器支持。我尝试使用网格视图,但无法使其看起来正确。我需要一个强大的解决方案,但此时我迫切需要一个可行的解决方案。

是一篇旧帖子,其中包含过于复杂的解决方案。有什么改变吗?这个问题有好的解决办法吗?为什么这个问题首先存在?

android gridview grid-layout android-gridview android-gridlayout

6
推荐指数
0
解决办法
1887
查看次数