2017-02-17 21 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>