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

Android 按钮的大小取决于屏幕分辨率,android,Android,我有带有6个按钮的LinearLayout。分辨率为4.7英寸时,按钮几乎完美无瑕。但在分辨率较高的设备上,按钮不会占据整个屏幕,而在分辨率较低的设备上,按钮并非全部可见。 请您解释一下,如何使按钮在具有不同屏幕分辨率的设备上显示相同 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android

我有带有6个按钮的
LinearLayout
。分辨率为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个按钮

如果希望每个按钮在第一个
文本视图之后占据剩余高度的相等部分,请尝试使用
线性布局的布局权重属性,并将每个
按钮的高度设置为
填充父项
,如下所示:

<Button
    android:id="@+id/button_exit"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    ... />

如果每个
按钮
的布局权重相等,则每个按钮将填满可用空间的相同部分。由于
文本视图
未加权,因此它将首先占用所需空间,加权按钮将一起填满剩余空间

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

编辑:回答评论中关于如何使用不同资源为不同密度提供不同文本大小的问题

进入
values/dimens.xml
并在新行中添加
30sp

现在进入resources文件夹以获得更大的屏幕尺寸,例如
values-sw720dp/dimens.xml
(注意:如果
res
目录不存在,则在其根目录中创建文件夹/文件),并在新行中添加
40sp

现在,在主布局文件中,将按钮上的
textSize
属性设置为
@dimen/main\u button\u text\u size

现在,您已经根据屏幕的大小为相同的
TextView
有效地设置了不同的值


还有其他的值文件夹,如果您想了解更多信息,它提供了一个很好的解释。

如果您使用的是
Android Studio
,则有一个选项称为:

预览所有屏幕大小
在Android Studio的预览中
工具栏顶部预览

因此,以下是您需要的:

支持的屏幕范围

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

  • ldpi(低)~120dpi
  • mdpi(中等)~160dpi
  • hdpi(高)~240dpi
  • xhdpi(超高)~320dpi
  • xxhdpi(超高)~480dpi
  • xxxhdpi(超高)~640dpi
最后回答:

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

  • res/layout/layout.xml
  • res/layout small/layout.xml
  • res/layout large/layout.xml
  • res/layout xlarge/layout.xml
  • res/layout land/layout.xml
  • res/layout small land/layout.xml
  • res/layout-large-land/layout.xml
  • res/layout xlarge land/layout.xml

您需要为每个屏幕进行设计。

将所有按钮更改为零高度

android:layout_height=0dp"
并增加它们的重量

android:layout_weight="1"
这将使所有视图(按钮)的比例相等,以占据整个线性布局


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

如果您有不同的维度,您可以通过调用维度属性来切换匹配父项和布局权重

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

==> layout_weight= 1 (setting weight)
==> layout_weight= 0 (Ignore 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)
1.值(dimens.xml)
-1dp(android:layout\u width=match\u parent)
1(布局重量=1)
2.values-sw375dp(dimens.xml)
-1dp(android:layout\u width=match\u parent)
1(布局重量=1)
3.values-sw600dp(dimens.xml)
370dp(android:layout_width=370dp)
0(布局重量=0)
3号与1号和2号不同,因为3号的宽度固定,没有布局重量。
No1和No2的宽度可根据屏幕大小进行灵活的自动调整。

使用不同的dimens.xml并添加到相应的分辨率资源文件夹您可以尝试使用
weightSum
您可能还希望根据屏幕密度指定不同的文本大小-我如何做到这一点?回答为编辑,因为我认为它不适合这里忽略所有关于使用不同布局或不同维度的讨论。-不能忽略文本的不同维度size@AndrewEfremov这些是android开发者的重要工具,但与你的主要问题无关。