高度和宽度百分比或其他解决方案

时间:2016-01-29 12:39:03

标签: android android-layout android-studio

我正在努力实现以下目标: View 1 View2

到目前为止我有什么 enter image description here

我开始使用换行内容并在按钮之间添加填充,但这是一个问题,因为在某些手机上它只需要一半的屏幕,所以我最终使用了权重。我的第一个问题是第1页上的按钮有0.5的屏幕尺寸和它们之间的填充为15dp所以每个按钮有0.5 * screenize / 7。如果我对第二个视图执行相同操作,则按钮的高度为0.5 * screensize / 3(因此更高的高度)。我也不知道如何使用权重按下页面底部的“发布”按钮。第二个问题是我也想使用权重作为宽度(到目前为止,我的重量是固定的大多数),但这可能会导致一些性能问题(我将使用太多的线性布局),因为这个家伙是在这里说 Android XML: Percentage Height and width to create unique layout

我在Android中编码的view1图片的代码

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


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.18"
        android:orientation="vertical"
        android:paddingTop="15dp">


        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Title1"
            android:textColor="#fff"
            android:textSize="30dp" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="Title2"
            android:textColor="#fff"
            android:textSize="15dp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.10"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal">

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="25dp"
                android:background="@drawable/first" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginRight="27dp"
                android:background="@drawable/second" />

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/third" />
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.50"
        android:orientation="vertical">

        <Button
            android:id="@+id/button1"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_weight="1"
            android:background="@drawable/btnstyle"
            android:gravity="left|center_vertical"
            android:paddingLeft="45dp"
            android:text="Button1"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button2"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_weight="1"
            android:background="@drawable/btnstyle"
            android:gravity="left|center_vertical"
            android:paddingLeft="45dp"
            android:text="Button2"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button3"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_weight="1"
            android:background="@drawable/btnstyle"
            android:gravity="left|center_vertical"
            android:paddingLeft="45dp"
            android:text="Button3"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button4"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_weight="1"
            android:background="@drawable/btnstyle"
            android:gravity="left|center_vertical"
            android:paddingLeft="45dp"
            android:text="Button4"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button5"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_weight="1"
            android:background="@drawable/btnstyle"
            android:gravity="left|center_vertical"
            android:paddingLeft="45dp"
            android:text="Button5"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button6"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:layout_weight="1"
            android:background="@drawable/btnstyle"
            android:gravity="left|center_vertical"
            android:paddingLeft="45dp"
            android:text="Button6"
            android:textColor="#fff" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.22"
        android:layout_marginBottom="15dp"
        android:orientation="vertical">

        <Button
            android:id="@+id/button7"
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:layout_weight="1"
            android:text="Next step"
            android:background="@drawable/nxtbtn"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button8"
            android:layout_width="220dp"
            android:layout_height="0dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="15dp"
            android:paddingLeft="5dp"
            android:paddingRight="5dp"
            android:layout_weight="1"
            android:background="@drawable/nxtbtn"
            android:text="Post it"
            android:textColor="#fff" />
    </LinearLayout>

</LinearLayout>

有没有其他方法在android中编码这两个图像?正如你所看到的那样,我还没有按钮末尾的+。一旦用户完成将通过点击按钮打开的数据(我还没有完成任何这些片段),那个+将会转入一个批准的('tick'符号)。我很抱歉的大小图像,但我找不到如何调整它们的大小

更新:我想要做的是在所有手机上都有相同的外观。我认为我可以通过使用重量和线性布局来做到这一点,但它非常棘手。

2 个答案:

答案 0 :(得分:0)

两件事:

1)对主容器使用RelativeLayout,这样就可以对齐&#34;发布它&#34;使用android:layout_alignParentBottom="true"和&#34; Button-Container&#34;按钮到底部如你所愿(居中等)。

2)为了更好的测试,您应该使用按钮的样式,例如:

/res/values/styles.xml中的

   <style name="CustomButton">
        <item name="android:layout_width">fill_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_marginTop">15dp</item>
        <item name="android:layout_weight">1</item>
        etc...
    </style>
布局中的

   <Button
        android:id="@+id/button4"
        style="@style/CustomButton"/>

希望有所帮助。

答案 1 :(得分:0)

我在这里找到了一个解决方案https://plus.google.com/+AndroidDevelopers/posts/C8oaLunpEEj。 Google有一个新的支持库,可以在不使用权重的情况下实现此目的。这正是我所需要的。您只需将其添加到gradle compile 'com.android.support:percent:23.1.0'并开始使用它,如

<android.support.percent.PercentRelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
     <ImageView
         app:layout_widthPercent="50%"
         app:layout_heightPercent="50%"
         app:layout_marginTopPercent="25%"
         app:layout_marginLeftPercent="25%"/>
</android.support.percent.PercentRelativeLayout>

如果android抱怨layout_height / width只是添加它们,它就不会修改任何东西。