按钮的大小取决于屏幕分辨率

时间:2015-06-05 14:49:05

标签: android

我有LinearLayout有6个按钮。在4.7“大小的分辨率下,按钮几乎是完美的。但是在具有更高分辨率的设备上,它们不会占据整个屏幕,而在分辨率较低的设备上并非所有按钮都可见。 您能否解释一下如何在具有不同屏幕分辨率的设备上使按钮显示相同?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/mainbackground">

    <TextView
        android:id="@+id/tvBody"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tv_company"
        android:layout_marginLeft="30dp"
        android:textColor="#002060"
        android:layout_marginTop="20dp"
        android:textSize="15sp"
        >
    </TextView>
    <Button
        android:id="@+id/button_operations"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/gradient_blue"
        android:drawableLeft="@drawable/ic_purchase"
        android:paddingLeft="10dp"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:gravity="left|center"
        android:text=" oper1"
        android:layout_marginTop="15dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:textColor="#001B51"
        android:textSize="30sp"
        android:textStyle="bold"
        />

    ....... //4 more buttons

    <Button
        android:id="@+id/button_exit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/gradient_blue"
        android:paddingLeft="10dp"
        android:drawableLeft="@drawable/ic_exit"
        android:gravity="left|center"
        android:text="  Exit"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:textColor="#001B51"
        android:textSize="30sp"
        android:textStyle="bold"/>
</LinearLayout>

4 个答案:

答案 0 :(得分:2)

如果您希望每个人在第一个TextView之后占据剩余高度的相等部分,请尝试使用LinearLayout's layout_weight属性并将每个Button的高度设置为{{ 1}}像这样:

fill_parent

如果每个<Button android:id="@+id/button_exit" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_weight="1" ... /> 具有相同的layout_weight,则它们将填充可用空间的相同部分。由于Button未加权,它将首先占用所需空间,加权按钮将一起填充剩余空间。

您可能还希望根据屏幕的密度指定不同的文字大小(并且可能还会使用样式来减少所有TextView布局参数的重复),但这有点超出原始问题的范围。

修改:在评论中回答您的问题,了解如何使用不同的资源为不同的密度提供不同的文字大小......

进入Button's并在新行上添加values/dimens.xml

现在进入资源文件夹以获得更大的屏幕尺寸,例如<dimen name="main_button_text_size">30sp</dimen>(注意:如果它不存在,请在values-sw720dp/dimens.xml目录的根目录中创建文件夹/文件),并在新行上添加res

现在,在主要布局文件中,将按钮上的<dimen name="main_button_text_size">40sp</dimen>属性设置为textSize

您现在只需根据其显示的屏幕大小,为同一@dimen/main_button_text_size有效设置不同的值。

还有其他值文件夹,如果您想了解更多信息,https://stackoverflow.com/a/21324209/1426565会给出相当不错的解释。

答案 1 :(得分:1)

如果您使用的是Android Studio,则会有一个名为:

的选项

Preview All Screen Sizes 预览Android Studio 工具栏预览的顶部。

所以,这就是你需要的:

http://developer.android.com/guide/practices/screens_support.html

支持的屏幕范围

  

从Android 1.6(API Level 4)开始,Android提供支持   多种屏幕尺寸和密度,反映了许多不同的   设备可能具有的屏幕配置。你可以使用的功能   Android系统优化您的应用程序的用户界面   每个屏幕配置并确保您的应用程序不仅   渲染得当,但可以提供最佳的用户体验   每个屏幕。

  • ldpi(低)~120dpi
  • mdpi(中)~160dpi
  • hdpi(高)~240dpi
  • xhdpi(超高)~320dpi
  • xxhdpi(extra-extra-high)~480dpi
  • xxxhdpi(extra-extra-extra-high)~640dpi

最终答案: http://developer.android.com/guide/practices/screens_support.html#support

你应该为每个API创建一个与下图完全相同的布局文件:

enter image description here

  • RES /布局/ layout.xml
  • res / layout-small / layout.xml
  • res / layout-large / layout.xml
  • RES /布局XLARGE / layout.xml
  • RES /布局脊/ layout.xml
  • RES /布局小脊/ layout.xml
  • RES /布局大脊/ layout.xml
  • RES /布局XLARGE-脊/ layout.xml

你需要为每个屏幕设计。

答案 2 :(得分:1)

将所有按钮更改为零高度

android:layout_height=0dp"

并为他们增加重量

android:layout_weight="1"

这将使所有视图(按钮)均匀缩放以占据整个LinearLayout。

ps:忽略所有关于使用不同布局或不同维度的讨论。

答案 3 :(得分:0)

如果尺寸不同,则可以通过调用尺寸属性来切换match_parent和layout_weight

==> layout_width= -1 (match_parent)
==> layout_width= 100dp ( fixed width )

==> layout_weight= 1 (setting weight)
==> layout_weight= 0 (Ignore weight)

示例: 假设,我们有三种类型的屏幕(小,中,大),您想 保持match_parent和layout_weight为中小型,以根据 设备尺寸,但对于大型设备,我们需要固定宽度。您可以执行以下操作...

这是三种屏幕类型

1. values ( dimens.xml )
<dimen name="layout_width_value">-1dp</dimen> (android:layout_width=match_parent)
<dimen name="layout_weight_value">1</dimen> (layout_weight=1)

2. values-sw375dp ( dimens.xml )
<dimen name="layout_width_value">-1dp</dimen> (android:layout_width=match_parent)
<dimen name="layout_weight_value">1</dimen> (layout_weight=1)

3. values-sw600dp ( dimens.xml )
<dimen name="layout_width_value">370dp</dimen> (android:layout_width=370dp)
<dimen name="layout_weight_value">0</dimen> (layout_weight=0)

第3个与第1个和第2个不同,因为第3个是固定宽度,并且没有layout_weight。 No1和No2是根据屏幕尺寸自动调整的宽度。