使用gridlayout的图像对齐问题

时间:2016-12-23 05:16:06

标签: android layout grid

当我将APK导出到手机进行测试时,我对图片的对齐方式有些问题。对齐完全不同并且不在网格中。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="sg.edu.rp.c346.tictactoee.MainActivity"
    tools:showIn="@layout/activity_main">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/board"
        android:columnCount="4"
        android:rowCount="3"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:id="@+id/gridLayout">

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView0"
            android:layout_row="0"
            android:layout_column="0"
            android:onClick="gameLogic"
            android:tag="0"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="50dp" />

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView1"
            android:layout_row="0"
            android:layout_column="1"
            android:onClick="gameLogic"
            android:tag="1"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="7dp" />

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView2"
            android:layout_row="0"
            android:layout_column="2"
            android:layout_marginLeft="20dp"
            android:layout_marginTop="50dp"
            android:onClick="gameLogic"
            android:tag="2" />

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView3"
            android:layout_row="1"
            android:layout_column="0"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="50dp"
            android:onClick="gameLogic"
            android:tag="3"/>

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView4"
            android:layout_row="1"
            android:layout_column="1"
            android:layout_marginTop="50dp"
            android:layout_marginLeft="7dp"
            android:onClick="gameLogic"
            android:tag="4"/>

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView5"
            android:layout_row="1"
            android:layout_column="2"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="50dp"
            android:onClick="gameLogic"
            android:tag="5"/>

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView6"
            android:layout_row="2"
            android:layout_column="0"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="30dp"
            android:onClick="gameLogic"
            android:tag="6"/>

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView7"
            android:layout_row="2"
            android:layout_column="1"
            android:layout_marginTop="30dp"
            android:layout_marginLeft="7dp"
            android:onClick="gameLogic"
            android:tag="7"/>

        <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView8"
            android:layout_row="2"
            android:layout_column="2"
            android:layout_marginLeft="15dp"
            android:layout_marginTop="30dp"
            android:onClick="gameLogic"
            android:tag="8"/>

    </GridLayout>

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:background="#1eccd5"
        android:padding="35dp"
        android:id="@+id/winnerLayout">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:id="@+id/textView"
            android:textColor="#FFFFFFFF" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Play Again"
            android:id="@+id/button"
            android:onClick="playAgain" />
    </LinearLayout>

</RelativeLayout>

使用android studio显示如下:

enter image description here

然而,当我将它导出到我的Android手机时,对齐完全改变并且没有网格,任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

我想你是Android的新手。 Android会在您的设备上创建任何view(screen)时使用设备的尺寸。 Android支持不同的维度,如

  1. HDPI
  2. xhdpi
  3. xxhdpi
  4. xxxhdpi等。
  5. 因此,对于您的情况,Android系统会尝试以您给出的绝对大小调整所有视图。

    我建议您使用wrap_content来查看您的widthheight

    您可以按如下方式修改布局文件:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:app="http://schemas.android.com/apk/res-auto"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingBottom="@dimen/activity_vertical_margin"
                    android:paddingLeft="@dimen/activity_horizontal_margin"
                    android:paddingRight="@dimen/activity_horizontal_margin"
                    android:paddingTop="@dimen/activity_vertical_margin"
                    app:layout_behavior="@string/appbar_scrolling_view_behavior">
    
        <GridLayout
            android:id="@+id/gridLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:columnCount="4"
            android:rowCount="3">
    
            <ImageView
                android:id="@+id/imageView0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:layout_row="0"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="0"/>
    
            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_row="0"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="1"/>
    
            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="2"
                android:layout_row="0"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="2"/>
    
            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:layout_row="1"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="3"/>
    
            <ImageView
                android:id="@+id/imageView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_row="1"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="4"/>
    
            <ImageView
                android:id="@+id/imageView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="2"
                android:layout_row="1"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="5"/>
    
            <ImageView
                android:id="@+id/imageView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:layout_row="2"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="6"/>
    
            <ImageView
                android:id="@+id/imageView7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:layout_row="2"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="7"/>
    
            <ImageView
                android:id="@+id/imageView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="2"
                android:layout_row="2"
                android:onClick="gameLogic"
                android:padding="30dp"
                android:src="@android:drawable/ic_menu_add"
                android:tag="8"/>
    
        </GridLayout>
    
        <LinearLayout
            android:id="@+id/winnerLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:background="#1eccd5"
            android:orientation="vertical"
            android:padding="35dp"
            android:visibility="gone">
    
            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="#FFFFFFFF"/>
    
            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:onClick="playAgain"
                android:text="Play Again"/>
        </LinearLayout>
    
    </RelativeLayout>
    

    您可以根据自己的要求更改paddingsrc

    如果不同,请添加图片的方式!

    有关详细信息,请查看此link

答案 1 :(得分:0)

在图片视图中添加填充

android:padding="10dp"

例如:

  <ImageView
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:id="@+id/imageView0"
            android:layout_row="0"
            android:layout_column="0"
            android:padding="10dp"
            android:onClick="gameLogic"
            android:tag="0"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="50dp" />

这将解决您的问题。

答案 2 :(得分:0)

  • 将GridLayout更改为android.support.v7.widget.GridLayout
  • 添加

    app:columnCount="3"
    app:rowCount="3"
    

    到GridView

  • 在ImageView上使用

    app:layout_columnWeight="1"
    app:layout_rowWeight="1"
    

而不是

    android:layout_width="90dp"
    android:layout_height="90dp"

xml文件将如下所示,

<android.support.v7.widget.GridLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="500dp"
    app:columnCount="3"
    app:orientation="horizontal"
    app:rowCount="3"
    app:useDefaultMargins="true">

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView0"
            android:tag="0"
            android:background="#ff0000" />

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView1"
            android:onClick="gameLogic"
            android:tag="1"
            android:background="#ff0000"/>

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView2"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="2" />

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView3"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="3"/>

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView4"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="4"/>

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView5"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="5"/>

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView6"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="6"/>

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView7"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="7"/>

        <ImageView
            app:layout_columnWeight="1"
            app:layout_rowWeight="1"
            android:id="@+id/imageView8"
            android:background="#ff0000"
            android:onClick="gameLogic"
            android:tag="8"/>

    </android.support.v7.widget.GridLayout>

enter image description here