【问题标题】:Using different XML layouts for different Android screens?对不同的 Android 屏幕使用不同的 XML 布局?
【发布时间】:2013-12-27 10:36:27
【问题描述】:

我是 Android 的初学者,我正在尝试让几个按钮完美排列。我已经这样做了:

这是代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    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"
    tools:context=".Scientific">

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="63dip"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<Button
    android:id="@+id/button1"
    android:layout_width="63dip"
    android:layout_height="63dip"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:text="1" />

<Button
    android:id="@+id/Button01"
    android:layout_width="63dip"
    android:layout_height="63dip"
    android:layout_alignBaseline="@+id/button1"
    android:layout_alignBottom="@+id/button1"
    android:layout_toRightOf="@+id/button1"
    android:text="1" />

<Button
    android:id="@+id/Button02"
    android:layout_width="63dip"
    android:layout_height="63dip"
    android:layout_alignBaseline="@+id/Button01"
    android:layout_alignBottom="@+id/Button01"
    android:layout_toRightOf="@+id/Button01"
    android:text="1" />

<Button
    android:id="@+id/Button04"
    android:layout_width="63dip"
    android:layout_height="63dip"
    android:layout_alignBaseline="@+id/Button03"
    android:layout_alignBottom="@+id/Button03"
    android:layout_toRightOf="@+id/Button03"
    android:text="1" />

<Button
    android:id="@+id/Button03"
    android:layout_width="63dip"
    android:layout_height="63dip"
    android:layout_alignBaseline="@+id/Button02"
    android:layout_alignBottom="@+id/Button02"
    android:layout_toRightOf="@+id/Button02"
    android:text="1" />

</RelativeLayout>

问题是,这段代码没有将 5 个按钮完美地放置在屏幕底部不同的屏幕尺寸

阅读官方 Android 开发者网站,我了解到我可能需要针对小、普通、大和超大屏幕尺寸的不同活动布局。我还阅读了一些关于在 LinearLayout 中使用 layout_weight 的内容。正确的方法是什么?如果可能的话,我可以提供一些示例代码吗?

编辑:

我还希望按钮在高度上进行缩放,以便相同数量的按钮可以垂直适应不同的设备。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    为按钮使用 LinearLayout 使用 layout_weight

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        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"
        tools:context=".Scientific">
    
    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="63dip"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />
    
    <LinearLayout
    
            android:id="@+id/linearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:orientation="horizontal" >
    
    <Button
        android:id="@+id/button1"
        android:layout_height="63dip"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text="1" />
    
    <Button
        android:id="@+id/Button01"
        android:layout_height="63dip"
         android:layout_width="0dp"
        android:layout_weight="1"
        android:text="1" />
    
    <Button
        android:id="@+id/Button02"
    
        android:layout_height="63dip"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text="1" />
    
    <Button
        android:id="@+id/Button04"
        android:layout_height="63dip"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:text="1" />
    
    <Button
        android:id="@+id/Button03"
        android:layout_width="0dp"
        android:layout_height="63dip"
        android:layout_weight="1"
        android:text="1" />
    </LinearLayout>
    
    </RelativeLayout>
    

    捕捉

    【讨论】:

    • 很好,但是我怎样才能使按钮的高度也按比例缩放,以便在设备上垂直放置相同数量的按钮?
    • @Hmir 为不同布局中的按钮指定自定义高度。也可以横向和纵向
    • @Hmir 你想要的是按钮的行和列??
    • 是的,@Raghunandan 基本上是一个按比例缩放以在不同设备上占用相同空间的按钮网格。我应该为此使用几个线性布局吗?
    • @Hmir 使用表格布局可以指定行数和列数以及设置表格布局的高度和宽度。按钮网格是的,但你不能指定行数你只能指定列数
    【解决方案2】:

    尝试将same layout_weight 添加到您所有的buttons

    <Button
        android:id="@+id/Button03"
        android:layout_width="63dip"
        android:layout_weight="1.0"
        android:layout_height="63dip"
        android:layout_alignBaseline="@+id/Button02"
        android:layout_alignBottom="@+id/Button02"
        android:layout_toRightOf="@+id/Button02"
        android:text="1" />
    

    P.S : layout_weight 不适用于 Relative Layout,您必须使用 linear layout with orientation: horizontal

    当您使用android:layout_weight 时,您应该设置android:layout_width="0dp"(以防垂直方向 - android:layout_height="0dp")。

    【讨论】:

      【解决方案3】:

      根据您支持的屏幕尺寸,您需要指定适当的屏幕布局。我认为你应该先从这篇文章开始:http://developer.android.com/guide/practices/screens_support.html

      res/layout/my_layout.xml             // layout for normal screen size ("default")
      res/layout-small/my_layout.xml       // layout for small screen size
      res/layout-large/my_layout.xml       // layout for large screen size
      res/layout-xlarge/my_layout.xml      // layout for extra large screen size
      res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation
      

      【讨论】:

        【解决方案4】:

        借助@Raghunandan 的一些见解,我基本上能够通过在另一个LinearLayout 中使用多个LinearLayouts,每个具有1 个layout_weight 的LinearLayouts 来实现一个以相同方式向上和向下缩放的按钮表。然后,在每个 LinearLayout 中,我放置了几个按钮,layout_weight 也为 1

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多