【问题标题】:Evenly stretch Android GridLayout to create a news application均匀拉伸 Android GridLayout 创建新闻应用
【发布时间】:2015-08-13 14:38:40
【问题描述】:

我正在尝试创建一个以图块显示新闻摘要的新闻应用程序(例如 Flipboard - 请参阅 http://uncrate.com/p/2010/07/flipboard.jpg)。

目前,我只是想获得一个非常简单的工作示例来说明如何构建它。

通过阅读,似乎使用 GridLayout 是在 Android 中执行此操作的最佳方式,以避免使用深度嵌套的 LinearLayout。但是,我已经尝试这样做了几个小时,但没有运气。我已经尝试将layout_width 设置为0dp 并将layout_gravity 设置为fill_horizontal 用于我的LinearLayout 子元素,但这不起作用。我正在考虑尝试在接下来的代码中执行此操作(例如,按照这篇文章中的建议 - https://stackoverflow.com/a/10348166/831821),但我真的很想知道它是否只能通过 XML 实现。

非常感谢您提供任何帮助。

下面是我当前的 main.xml 布局文件。

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

        android:useDefaultMargins="true"
        android:columnOrderPreserved="false" android:rowOrderPreserved="false"
        android:layout_alignWithParentIfMissing="false" android:layout_centerInParent="true" android:columnCount="2"
        android:rowCount="3">

    <LinearLayout
            android:layout_width="0dp"
            android:layout_gravity="fill_horizontal"
            android:layout_height="wrap_content" android:layout_row="0" android:layout_columnSpan="2"
            android:layout_rowSpan="1" android:layout_column="0">
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                android:id="@+id/textView"/>
    </LinearLayout>
    <LinearLayout
            android:layout_width="0dp"
            android:layout_gravity="fill_horizontal"
            android:layout_height="wrap_content" android:layout_column="0" android:layout_columnSpan="1"
            android:layout_row="1" android:layout_rowSpan="2"
            >
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                android:id="@+id/textView1"/>
    </LinearLayout>
    <LinearLayout
            android:layout_width="0dp"
            android:layout_gravity="fill_horizontal"
            android:layout_height="wrap_content" android:layout_column="1" android:layout_columnSpan="1"
            android:layout_row="1" android:layout_rowSpan="2"
            android:baselineAligned="false" android:clickable="false"
            >
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                android:id="@+id/textView2"/>
    </LinearLayout>

</GridLayout>

【问题讨论】:

  • 尝试使用所有线性布局而不是 layout_gravity 使用 inf layout_weight="1",您也可以在 LinearLayout 中完成所有操作
  • @LandLPartners 感谢您的回答,但我刚刚尝试过,但没有成功。还有其他线索吗?
  • 正如您在删除 GridLayout 时尝试的那样,因为 layout_weight 在 GridLayouts 上不起作用。您可以尝试的几个选项是使用表格布局或使用 LieanerLayouts 实现全部(取决于这可能会变得多么复杂)。

标签: android xml grid-layout


【解决方案1】:

在尝试了一些选项之后,我设法提出了以下解决方案,这足以作为一个基本的工作示例。我已经混合使用了GridLayoutLinearLayout 以及为相关LinearLayout 元素指定的layout_weightweightSum,以获得基本的新闻外观页面。

我确实认为 XML 中的嵌套仍然有点过多,但考虑到页面上不会有那么多元素,我对它的现状感到满意。但是,如果有人有更好的解决方案,请告诉我。

<?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:layout_gravity="center" android:columnCount="2" android:rowCount="3" android:useDefaultMargins="true">

    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0" android:layout_columnSpan="2" android:layout_row="0" android:layout_rowSpan="1">
        <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                    android:id="@+id/textView"/>
    </LinearLayout>
    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:weightSum="2" android:layout_column="0" android:layout_columnSpan="2" android:layout_row="1"
            android:layout_rowSpan="2">
        <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1">
            <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                        android:id="@+id/textView1"/>
        </LinearLayout>
        <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1">
            <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
                        android:id="@+id/textView2"/>
        </LinearLayout>
    </LinearLayout>

</GridLayout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 2015-11-19
    • 2011-11-26
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多