【问题标题】:Gridlayout with square children带有方形孩子的网格布局
【发布时间】:2016-02-05 08:54:58
【问题描述】:

正如您从这张图片中看到的那样,我一直在尝试实现带有方形子代的GridLayout

所以基本上视图应该根据项目的数量进行调整,而无需我声明列大小和行大小。 GridLayout 有可能吗?如果没有,那么忘记这个问题。

现在让我们进入正方形部分。我尝试实现此代码

public class SquareLinearLayout extends LinearLayout {


    public SquareLinearLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);

        if (widthSize == 0 && heightSize == 0) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);

            final int minSize = Math.min(getMeasuredWidth(), getMeasuredHeight());
            setMeasuredDimension(minSize, minSize);
            return;
        }

        final int size;
        if (widthSize == 0 || heightSize == 0) {
            size = Math.max(widthSize, heightSize);
        } else {
            size = Math.min(widthSize, heightSize);
        }

        final int newMeasureSpec = MeasureSpec.makeMeasureSpec(size, MeasureSpec.EXACTLY);
        super.onMeasure(newMeasureSpec, newMeasureSpec);
    }
}

虽然它确实使子布局成为正方形,但它也占据了屏幕的整个宽度,将其他子布局推出了布局的可视部分。

你有没有链接或者你自己有类似这个类但不占据整个布局宽度的代码?提前致谢。

【问题讨论】:

标签: android android-gridlayout


【解决方案1】:

我从来没有使用上面相同的代码让它工作并将项目放在 TableLayout 而不是 Gridlayout 中。

如果您像我一样陷入这种情况,这里有一个示例代码。首先,我为正方形创建一个布局。

<?xml version="1.0" encoding="utf-8"?>
<com.android.f45tv.view.ui.SquareLinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/sllContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="2dp"
    android:orientation="vertical">

    <LinearLayout
        android:id="@+id/llHolder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="2dp"
        android:gravity="center"
        android:orientation="vertical">

        <TextView
            android:id="@+id/tvName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="18sp"
            android:textColor="@color/white"
            android:layout_marginBottom="2dp"
            android:gravity="center_horizontal" />

        <TextView
            android:id="@+id/tvPercent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="40sp"
            android:textColor="@color/white"
            android:gravity="center" />

        <TextView
            android:id="@+id/tvBPM"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/white"
            android:textSize="12sp"
            android:gravity="end" />

        <TextView
            android:id="@+id/tvBPMLabel"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="bpm"
            android:textSize="10sp"
            android:textColor="@color/white"
            android:gravity="end" />

    </LinearLayout>

</com.android.f45tv.view.ui.SquareLinearLayout>

然后将其添加到我的主要活动布局中,并在表格行内使用include 标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2021-09-10
    • 1970-01-01
    • 2018-07-28
    • 2019-07-22
    • 2014-06-02
    • 1970-01-01
    相关资源
    最近更新 更多