如何在任何屏幕尺寸上以相同的比例显示Android View的位置和大小?

时间:2016-03-10 13:19:12

标签: android android-layout

我尝试使用此布局参数定位按钮:

    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Butt1"
    android:id="@+id/b1"
    android:rotation="-9"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="205dp" 

我的想法是让按钮透明,并保留背景图像的视觉提示,让用户知道那里有一个按钮。

我已经通过手动定位和调整按钮大小在我的设备上工作,在我的设备上使用保证金顶部205dp我得到了这个:

This is the result on my device

在另一台设备上,按钮未对齐/调整为背景图像:

This is on another device

如何了解如何在任何设备上匹配按钮的位置和大小?

2 个答案:

答案 0 :(得分:1)

使用<RelativeLayout>而不是android:layout_marginTop="205dp"使用属性android:layout_below,以便您可以指定按钮后面的人!

实施例

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="16dp"
    android:paddingRight="16dp" >
    <EditText
        android:id="@+id/name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/reminder" />
    <Spinner
        android:id="@+id/dates"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/times" />
    <Spinner
        android:id="@id/times"
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/name"
        android:layout_alignParentRight="true" />
    <Button
        android:layout_width="96dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/times"
        android:layout_alignParentRight="true"
        android:text="@string/done" />
</RelativeLayout>

Spinner位于EdiText之后,而Button位于第二位Spinner之后

如果您希望屏幕左侧中心的按钮始终使用此代码。

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingLeft="16dp"
        android:paddingRight="16dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true">

            <Button
                android:id="@+id/play"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>
            <Button
                android:id="@+id/score"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_below="@id/play"
                android:layout_alignParentLeft="true"
                android:layout_toLeftOf="@+id/times" />
            <Button
                android:id="@id/times"
                android:layout_width="96dp"
                android:layout_height="wrap_content"
                android:layout_below="@id/score"
                android:layout_alignParentRight="true" />
            <Button
                android:id="@+id/players"
                android:layout_width="96dp"
                android:layout_height="wrap_content"
                android:layout_below="@id/times"
                android:layout_alignParentRight="true"
                android:text="@string/done" />

        </LinearLayout>

    </RelativeLayout>

使用像LinearLayout这样的容器,RelativeLayout的属性将其放在左侧(或右侧)并居中垂直,以便LinearLayout内的所有按钮更改位置从所有屏幕维度。

阅读我发布的文档并查看 RelativeLayout参数,以便找到最适合您的解决方案。

<强>意大利语: Credo tu sia italiano,se usilaproprietàandroid:layout_below dici praticamente che l'elemento con questaproprietàsideve posizionare subito sotto un determinato elemento specificato per ID Poi se vuoi li spazi l'uno dall'altro con un marginTop。 Per mantenere il tutto centrato usa un LinearLayout,Consideralo un container che ha来proprietàdelRelativeLayout quelle di stare a sinistra e al centro della schermata,cosìsiadatta ad ogni schermo。

一些Relative Layout guideparameters

答案 1 :(得分:1)

查看this库:它定义具有百分比定位/大小调整功能的RelativeLayout版本。

我想指出的是,使用透明背景并让按钮被窗口的背景图像暗示是“简单”的方式,但这是一种不好的做法。这样你就不会给触摸用户界面的用户提供视觉反馈,你不得不用你的应用程序上传一个大图像,这个图像将被不可避免的工件拉伸,并且不能很好地适应不同的屏幕宽高比。

您应该尝试构建一个UI,其中按钮是一个实际按钮,位于屏幕上。

在您的情况下,这不是一件容易的事,因为您需要不规则形状的按钮彼此重叠(如果您认为它们是矩形的)。因此,您需要以特殊/自定义方式处理触摸。

如果您决定使用其他路线,请查看其他问题和答案:

另一种方法是使用坐标映射图像,就像在HTML地图标记中一样。 This Android库似乎在Android Image Widget中实现了这种确切的行为。