Gridlayout改变宽度

时间:2017-09-01 22:52:52

标签: android-layout grid-layout

我一直试图让gridlayout使用:

<GridLayout
        android:layout_width="match_parent"
        android:layout_height="70dp">

        <TextView
            android:text="sdfgh"
            android:layout_height="wrap_content"
            android:id="@+id/AvgGrade"
            android:layout_row="2"
            android:layout_column="1"
            android:layout_rowWeight="0.2"
            android:layout_columnWeight="0.5"
            android:layout_gravity="fill"
            android:textAlignment="gravity"
            android:layout_columnSpan="1" />

        <TextView
            android:text="words"
            android:layout_height="wrap_content"
            android:id="@+id/Totals"
            android:layout_row="1"
            android:layout_column="1"
            android:textAlignment="gravity"
            android:layout_rowWeight="0.2"
            android:layout_columnWeight="0.5"
            android:layout_gravity="fill"
            android:layout_columnSpan="1" />

        <TextView
            android:text="words"
            android:layout_height="wrap_content"
            android:id="@+id/textView3"
            android:layout_row="2"
            android:layout_column="0"
            android:textAlignment="center"
            android:layout_rowWeight="0.2"
            android:layout_columnWeight="0.5"
            android:layout_gravity="fill"
            android:layout_columnSpan="1" />

        <TextView
            android:text="words"
            android:layout_height="wrap_content"
            android:id="@+id/textView4"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_rowWeight="0.2"
            android:layout_columnWeight="0.5"
            android:layout_gravity="fill"
            android:textAlignment="center"
            android:layout_columnSpan="1" />

        <TextView
            android:text="words"
            android:layout_height="wrap_content"
            android:id="@+id/TotalAvg"
            android:layout_row="0"
            android:layout_column="1"
            android:textAlignment="gravity"
            android:layout_rowWeight="0.2"
            android:layout_columnWeight="0.5"
            android:layout_gravity="fill"
            android:layout_columnSpan="1" />

        <TextView
            android:text="words"
            android:layout_height="wrap_content"
            android:id="@+id/textView6"
            android:layout_row="0"
            android:layout_column="0"
            android:textAlignment="center"
            android:layout_columnWeight="0.5"
            android:layout_gravity="fill"
            android:layout_columnSpan="1" />

    </GridLayout>

我的问题是第二列中加载的数据列的大小变化如此之小。我尝试过左侧和中心对齐,似乎没有任何东西可以阻止列的变化。用户将重复更新这些值并轻微地摇晃&#39; jiggle&#39;列移位看起来非常糟糕。

1 个答案:

答案 0 :(得分:0)

经过多次挫折之后,我无法在XML布局中找到解决方案。但是我确实找到了一个似乎在以编程方式运行良好的解决方案。

我添加了一个在我的OnCreate结束时调用的方法

public void ResizeTexts(){
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);

    float density  = getResources().getDisplayMetrics().density;
    float dpWidth  = (outMetrics.widthPixels / density);

    text1.getLayoutParams().width = (int)dpWidth;
    text2.getLayoutParams().width = (int)dpWidth;
    text3.getLayoutParams().width = (int)dpWidth;
    text4.getLayoutParams().width = (int)dpWidth;
    text5.getLayoutParams().width = (int)dpWidth;
    text6.getLayoutParams().width = (int)dpWidth;
}

我改编自此链接re-setting a TextView height programmatically

然后在我的XML布局中,我将其设置为:

<GridLayout
    android:layout_width="match_parent"
    android:layout_height="70dp">

    <TextView
        android:text="points"
        android:layout_height="wrap_content"
        android:layout_width="10dp"
        android:id="@+id/text1"
        android:layout_row="0"
        android:layout_column="0"
        android:textAlignment="textEnd"
        />


    <TextView
        android:text="totals"
        android:layout_height="wrap_content"
        android:layout_width="10dp"
        android:id="@+id/text2"
        android:layout_row="1"
        android:layout_column="0"

        android:textAlignment="textEnd"/>


    <TextView
        android:text="score"
        android:layout_height="wrap_content"
        android:id="@+id/text3"
        android:layout_width="10dp"
        android:layout_row="2"
        android:layout_column="0"
        android:textAlignment="textEnd"/>


    <TextView
        android:text="123.4"
        android:layout_height="wrap_content"
        android:id="@+id/text4"
        android:layout_width="10dp"
        android:layout_row="1"
        android:layout_column="1"
        android:textAlignment="textEnd"/>

    <TextView
        android:text="1.23"
        android:layout_height="wrap_content"
        android:id="@+id/text5"
        android:layout_width="10dp"
        android:layout_row="2"
        android:layout_column="1"
        android:textAlignment="textEnd"/>

    <TextView
        android:text="1234 "
        android:layout_height="wrap_content"
        android:id="@+id/text6"
        android:layout_width="10dp"
        android:layout_row="0"
        android:layout_column="1"
        android:textAlignment="textEnd"/>

</GridLayout>

* xml布局中的布局宽度我正在尝试使用&#39; break&#39;它,实际上并未使用。

不可否认,我不确定这是否是最好的&#39;这样做的方式。就个人而言,我觉得GridLayout XML 应该能够在它自己的基础上做到这一点。但是,我无法弄明白。