如何在屏幕的某些位置对齐视图,在多个屏幕分辨率下保持一致?

时间:2011-12-12 00:26:17

标签: android layout android-layout

我对齐按钮时遇到了一些问题。我希望得到它们(大致)我的屏幕的1/3和2/3(我提供了一个截图,使事情更清晰) 我的代码如下:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="@drawable/mainbg">

    <Button 
        android:text="@string/topbutton"
        android:background="@drawable/silvertablesbuttonbgkort"
        android:id="@+id/topbutton"
        android:layout_alignParentRight="true" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center|center_vertical">
    </Button>

    <Button 
        android:text="@string/midbutton"
        android:background="@drawable/silvertablesbuttonbglang"
        android:id="@+id/midbutton"
        android:layout_alignParentRight="true" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center|center_vertical">
   </Button>


<RelativeLayout 
    android:id="@+id/underbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button 
        android:text="@string/underbartekst"
        android:background="@drawable/silvertablesunderbar"
        android:id="@+id/underbarbutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:textSize="20dp"
        android:gravity="left|center_vertical" >
    </Button>

</RelativeLayout>

我试图让它看起来像这样:(如果发布屏幕截图模型在这里不受欢迎,我很抱歉,我只是想不出更好的方法来清理我想要的东西做)

似乎我无法发布图片,因为我在这里太新了......所以这里是截图的链接:http://i.imgur.com/l3b3z.png

我最初的想法是围绕两个按钮包裹一个垂直线性布局,并在两者之间放置空文本视图,如果这个应用程序是在一个屏幕尺寸上运行的话,这实际上会起作用,但我很漂亮确定它会因为另一个屏幕分辨率而陷入困境。我通过使用带有android:layout_alignParentBottom =“true”的relativelayout解决了底部栏的问题,但我真的想不到一种方法可以捕捉到1/3或2/3。有没有办法可以使用各种屏幕分辨率?

修改 我解决了我的问题!我试着发布它作为答案,但我不能在8小时内。那会的,但是现在,我只是将其作为编辑发布在这里:

我在屏幕中间放置了一个0x0的TextView,并将RelativeLayouts放在屏幕的上方和下方,填满了屏幕。然后我在这些布局的中间放置了两个0x0的TextView,在这些布局中,有两个新的RelativeLayouts。一个低于最高TextView,一个高于最低。我将按钮放在这些布局的中心。它就像一个魅力,并不依赖于代码本身。这是我现在的代码:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="@drawable/mainbg">


    <TextView 
        android:text=" "
        android:id="@+id/ankermidden"
        android:layout_centerVertical="true"
        android:layout_width="0dp"
        android:layout_height="0dp">
    </TextView>

    <RelativeLayout
        android:id="@+id/ankerveldboven"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/ankermidden">

                <TextView 
                    android:text=" "
                    android:id="@+id/ankerboven"
                    android:layout_centerVertical="true"
                    android:layout_width="0dp"
                    android:layout_height="0dp">
                </TextView>

            <RelativeLayout
                android:id="@+id/ankerveldmidboven"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/ankerboven">

                 <Button 
                    android:text="@string/topbutton"
                    android:background="@drawable/silvertablesbuttonbgkort"
                    android:id="@+id/topbutton"
                    android:layout_alignParentRight="true"
                    android:layout_centerInParent="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center|center_vertical">
                </Button>

            </RelativeLayout>

</RelativeLayout>


<RelativeLayout
        android:id="@+id/ankerveldonder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/ankermidden">

    <TextView 
        android:text=" "
        android:id="@+id/ankeronder"
        android:layout_centerVertical="true"
        android:layout_width="0dp"
        android:layout_height="0dp">
    </TextView>

            <RelativeLayout
                android:id="@+id/ankerveldmidonder"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_above="@id/ankeronder">      

                <Button 
                    android:text="@string/midbutton"
                    android:background="@drawable/silvertablesbuttonbglang"
                    android:id="@+id/midbutton"
                    android:layout_alignParentRight="true" 
                    android:layout_centerInParent="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center|center_vertical">
                </Button>

            </RelativeLayout>       

 </RelativeLayout>

<RelativeLayout 
    android:id="@+id/underbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button 
        android:text="@string/underbartekst"
        android:background="@drawable/silvertablesunderbar"
        android:id="@+id/underbarbutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:textSize="20dp"
        android:gravity="left|center_vertical" >
    </Button>

</RelativeLayout>

所以是的,这比我想象的要容易。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案!一个与自身完全相关的,并且根本不依赖于像素或密度像素。

我在屏幕中间放置了一个0x0的TextView,并将RelativeLayouts放在屏幕的上方和下方,填满了屏幕。

然后我在这些布局的中间放置了两个0x0的TextView,在这些布局中,有两个新的RelativeLayouts。一个低于最高TextView,一个高于最低。我将按钮放在这些布局的中心。

它就像一个魅力,并不依赖于代码本身。

这是我现在的代码:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:background="@drawable/mainbg">


    <TextView 
        android:text=" "
        android:id="@+id/ankermidden"
        android:layout_centerVertical="true"
        android:layout_width="0dp"
        android:layout_height="0dp">
    </TextView>

    <RelativeLayout
        android:id="@+id/ankerveldboven"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/ankermidden">

                <TextView 
                    android:text=" "
                    android:id="@+id/ankerboven"
                    android:layout_centerVertical="true"
                    android:layout_width="0dp"
                    android:layout_height="0dp">
                </TextView>

            <RelativeLayout
                android:id="@+id/ankerveldmidboven"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/ankerboven">

                 <Button 
                    android:text="@string/topbutton"
                    android:background="@drawable/silvertablesbuttonbgkort"
                    android:id="@+id/topbutton"
                    android:layout_alignParentRight="true"
                    android:layout_centerInParent="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center|center_vertical">
                </Button>

            </RelativeLayout>

</RelativeLayout>


<RelativeLayout
        android:id="@+id/ankerveldonder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/ankermidden">

    <TextView 
        android:text=" "
        android:id="@+id/ankeronder"
        android:layout_centerVertical="true"
        android:layout_width="0dp"
        android:layout_height="0dp">
    </TextView>

            <RelativeLayout
                android:id="@+id/ankerveldmidonder"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_above="@id/ankeronder">      

                <Button 
                    android:text="@string/midbutton"
                    android:background="@drawable/silvertablesbuttonbglang"
                    android:id="@+id/midbutton"
                    android:layout_alignParentRight="true" 
                    android:layout_centerInParent="true"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center|center_vertical">
                </Button>

            </RelativeLayout>       

 </RelativeLayout>

<RelativeLayout 
    android:id="@+id/underbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button 
        android:text="@string/underbartekst"
        android:background="@drawable/silvertablesunderbar"
        android:id="@+id/underbarbutton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="20dp"
        android:textSize="20dp"
        android:gravity="left|center_vertical" >
    </Button>

</RelativeLayout>

所以是的,这比我想象的要容易。

比尔·加里建议在dp中使用一个保证金,它会在不同的屏幕尺寸上保持相同的比例,但经过大量的实验后,事情最终会在不同的屏幕上看起来很奇怪。

在我回到原点之前,我会做更多的实验,因为整个下降边缘的事情让我感到沮丧......应该正确展示的东西不是,而且只是在某些屏幕分辨率上不应该这样做。

我会开始做那些关于那些东西的作业,但就目前而言,虽然它有点长,我上面发布的代码对我来说完美无瑕。

答案 1 :(得分:0)

试试这个,你可能要调整dp android:layout_marginTop =“150dp”

<Button 
    android:text="@string/topbutton"
    android:background="@drawable/silvertablesbuttonbgkort"
    android:id="@+id/topbutton"
    android:layout_alignParentRight="true" 
    android:layout_marginTop="150dp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center|center_vertical">
</Button>