2017-02-17 25 views
0

我已經看過包括重力在內的各種解決方案,但還沒有找到我遇到的問題的答案,那就是網格內部的圖像按鈕佈局沒有跨越屏幕的寬度 - 看起來像下面這張圖片。他們更加聚集在左邊。我希望間距甚至可以跨越屏幕。謝謝您的幫助。如何將網格佈局中的圖像按鈕居中 - Android Studio

there is extra spacing on the right hand side

下面是XML文件:

<?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:id="@+id/activity_admin_control" 
    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" 
    tools:context="com.example.myname.myproject.AdminControl"> 

    <Button 
     android:text="Switch to User" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 

     android:layout_centerHorizontal="true" 
     android:layout_gravity="center" 
     android:id="@+id/userSwitch" /> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/userSwitch" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:rowCount="2" 
     android:columnCount="3" 
     android:alignmentMode="alignMargins"> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:layout_row="0" 
      android:layout_column="0" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton5" 
      android:layout_row="0" 
      android:layout_column="1" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton6" 
      android:layout_row="0" 
      android:layout_column="2" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton7" 
      android:layout_row="1" 
      android:layout_column="0" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton8" 
      android:layout_row="1" 
      android:layout_column="1" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton9" 
      android:layout_row="1" 
      android:layout_column="2" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

    </GridLayout> 


</RelativeLayout> 

回答

2

不要定義width自己。讓GridLayout做這個任務。將所有的widthheight設置爲0dp並且全部設置weights1

這可能適合你。我沒有檢查它,但它應該工作。

<GridLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/userSwitch" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:rowCount="2" 
    android:columnCount="3" 
    android:alignmentMode="alignMargins"> 

    <ImageButton 

     app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
     android:layout_row="0" 
     android:layout_column="0" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:scaleType="fitCenter"/> 

    <ImageButton 

     app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
     android:id="@+id/imageButton5" 
     android:layout_row="0" 
     android:layout_column="1" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:scaleType="fitCenter"/> 

    <ImageButton 

     app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
     android:id="@+id/imageButton6" 
     android:layout_row="0" 
     android:layout_column="2" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:scaleType="fitCenter"/> 

    <ImageButton 

     app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
     android:id="@+id/imageButton7" 
     android:layout_row="1" 
     android:layout_column="0" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:scaleType="fitCenter"/> 

    <ImageButton 

     app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
     android:id="@+id/imageButton8" 
     android:layout_row="1" 
     android:layout_column="1" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:scaleType="fitCenter"/> 

    <ImageButton 

     app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
     android:id="@+id/imageButton9" 
     android:layout_row="1" 
     android:layout_column="2" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_columnWeight="1" 
     android:layout_rowWeight="1" 
     android:scaleType="fitCenter"/> 

</GridLayout> 
+0

謝謝,它的工作原理。只有一件事 - 網格佈局的高度是整個屏幕,但我希望它如上圖所示更小。我手動將佈局:網格佈局的高度參數設置爲300 dp。有一個更好的方法嗎? – kmindspark

+0

如果你想使用定義的「高度」或「寬度」,你可以這樣做。但它可能會影響不同屏幕尺寸的佈局。如果你可以有效地使用「權重」,這是很好的。如果你想將'GridLayout'的'height'設置爲屏幕大小的一半,你可以使用'layout:height = 0dp'和'layout:weight = 1'。對此,父級應該是'LinearLayout'和'vertical orientation' –

0

試試這個,

 <?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:id="@+id/activity_admin_control" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <Button 
      android:id="@+id/userSwitch" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_gravity="center" 
      android:text="Switch to User" /> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_above="@+id/userSwitch" 
      android:layout_centerHorizontal="true"> 

      <GridLayout 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 

       android:layout_centerHorizontal="true" 
       android:alignmentMode="alignMargins" 
       android:columnCount="3" 
       android:rowCount="2"> 

       <ImageButton 

        android:layout_width="118dp" 
        android:layout_height="118dp" 
        android:layout_column="0" 
        android:layout_row="0" 
        android:scaleType="fitCenter" 
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark" /> 

       <ImageButton 

        android:id="@+id/imageButton5" 
        android:layout_width="118dp" 
        android:layout_height="118dp" 
        android:layout_column="1" 
        android:layout_row="0" 
        android:scaleType="fitCenter" 
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark" /> 

       <ImageButton 

        android:id="@+id/imageButton6" 
        android:layout_width="118dp" 
        android:layout_height="118dp" 
        android:layout_column="2" 
        android:layout_row="0" 
        android:scaleType="fitCenter" 
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark" /> 

       <ImageButton 

        android:id="@+id/imageButton7" 
        android:layout_width="118dp" 
        android:layout_height="118dp" 
        android:layout_column="0" 
        android:layout_row="1" 
        android:scaleType="fitCenter" 
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark" /> 

       <ImageButton 

        android:id="@+id/imageButton8" 
        android:layout_width="118dp" 
        android:layout_height="118dp" 
        android:layout_column="1" 
        android:layout_row="1" 
        android:scaleType="fitCenter" 
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark" /> 

       <ImageButton 

        android:id="@+id/imageButton9" 
        android:layout_width="118dp" 
        android:layout_height="118dp" 
        android:layout_column="2" 
        android:layout_row="1" 
        android:scaleType="fitCenter" 
        app:srcCompat="@drawable/common_google_signin_btn_icon_dark" /> 

      </GridLayout> 
     </RelativeLayout> 

     </RelativeLayout> 
0

我發現,它不可能與.XML 水平居中的GridView所以我不得不以編程方式做到這一點...這個答案對我幫助很大: link

0

你可以試試這個寬度和高度是harcoded你需要修復行或列,或者你可以使用保證金。

<?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:id="@+id/activity_admin_control" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.myname.myproject.AdminControl"> 

    <Button 
     android:text="Switch to User" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentRight="true" 

     android:layout_centerHorizontal="true" 
     android:layout_gravity="center" 
     android:id="@+id/userSwitch" /> 

    <GridLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/userSwitch" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     android:layout_marginLeft="@dimen/activity_vertical_margin" 
     android:layout_marginRight="@dimen/activity_vertical_margin" 
     android:rowCount="2" 
     android:columnCount="3" 
     android:alignmentMode="alignMargins"> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:layout_row="0" 
      android:layout_column="0" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton5" 
      android:layout_row="0" 
      android:layout_column="1" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton6" 
      android:layout_row="0" 
      android:layout_column="2" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton7" 
      android:layout_row="1" 
      android:layout_column="0" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton8" 
      android:layout_row="1" 
      android:layout_column="1" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

     <ImageButton 

      app:srcCompat="@drawable/common_google_signin_btn_icon_dark" 
      android:id="@+id/imageButton9" 
      android:layout_row="1" 
      android:layout_column="2" 
      android:layout_width="118dp" 
      android:layout_height="118dp" 
      android:scaleType="fitCenter"/> 

    </GridLayout> 


</RelativeLayout>