线性布局不适合xhdpi和xxhdpi,可以给我布局的建议吗?

时间:2014-11-16 05:08:21

标签: android android-layout android-linearlayout

我使用LinearLayout,并且不适合xhdpi和xxhdpi,就像这样。

on hdpi

image1

xhdpi上的

,xxhdpi:

image2

我像这样使用LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg_gradien_menu"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/Recommendation"
        android:textColor="@color/font"
        android:layout_marginBottom="5dp"
        android:textSize="18sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="@string/frame"
        android:textColor="@color/font"
        android:textSize="13sp" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="5dp"
    android:gravity="center_vertical|center_horizontal|center" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/frame_mtb_roadbike" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right|center_vertical|center_horizontal"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/TextView04"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/ct"
            android:textColor="@color/font"
            android:textSize="13sp" />

        <Button
            android:id="@+id/Button01"
            android:layout_width="100dp"
            android:layout_height="35dp"
            android:layout_marginTop="7dp"
            android:background="@drawable/btn_blue_focused"
            android:gravity="center_vertical|center_horizontal|center"
            android:text="80 cm"
            android:textColor="@color/dec_font"
            android:textSize="19sp"
            android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/TextView03"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="@string/adtional"
        android:textColor="@color/font"
        android:textSize="12sp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:text="TextView"
        android:textColor="@color/font"
        android:textSize="11sp" />

</LinearLayout>

<View
    android:id="@+id/view1"
    android:layout_width="fill_parent"
    android:layout_height="1dp"
    android:layout_below="@+id/linearLayout2"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="5dp"
    android:background="@color/font" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="8dp"
        android:text="@string/crank"
        android:textColor="@color/font"
        android:textSize="13sp" />

</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:gravity="center" >

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:src="@drawable/crank_img" />

    <LinearLayout
        android:id="@+id/linearLayout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:gravity="right|center_vertical|center_horizontal"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/TextView02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/crank_dec"
            android:textColor="@color/font"
            android:textSize="13sp" />

        <Button
            android:id="@+id/Button02"
            android:layout_width="100dp"
            android:layout_height="35dp"
            android:layout_marginTop="7dp"
            android:background="@drawable/btn_blue_focused"
            android:gravity="center_vertical|center_horizontal|center"
            android:text="80 cm"
            android:textColor="@color/dec_font"
            android:textSize="19sp"
            android:textStyle="bold" />

        <Button
            android:id="@+id/button1"
            android:layout_width="100dp"
            android:layout_height="35dp"
            android:layout_marginTop="5dp"
            android:background="@drawable/btn_blue_focused"
            android:gravity="center_vertical|center_horizontal|center"
            android:text="80 cm"
            android:textColor="@color/dec_font"
            android:textSize="19sp"
            android:textStyle="bold" />
    </LinearLayout>

</LinearLayout>

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_gravity="bottom"
    android:orientation="vertical" >

<LinearLayout
    android:id="@+id/linearLayout4"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:background="@drawable/rectangle_note"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/disclaimer"
        android:textSize="11sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/disclaimer_desc"
        android:textSize="10sp" />

</LinearLayout>

        <Button
        android:id="@+id/btn_starover"
        android:layout_width="fill_parent"
        android:layout_height="@dimen/btn_height"
        android:background="@drawable/btn_menu"
        android:text="@string/again"
        android:textColor="@color/white" />
    </LinearLayout>

可以给我布局的建议吗?

2 个答案:

答案 0 :(得分:1)

首先,评论:不要使用fill_parent,因为它已被弃用。相反,您应该始终使用match_parent

要点: 您需要在窗口小部件上使用layout_weight属性来在布局中分配未分配的空间。这将拉伸小部件以沿一个轴填充屏幕(取决于包含它们的线性布局的方向)。

长答案:

您的布局问题在于您使用wrap_content来表示许多小部件的高度和宽度。这将导致窗口小部件的大小根据其自然&#34;大小,通常意味着足够大以适应内容,加上一些额外的像素用于填充和基于样式的边距。设置为包装内容的窗口小部件不会根据屏幕大小拉伸或缩小。它们总是倾向于倾向于父容器的左上角。

同样重要的是要注意,即使您将父容器设置为match_parent,它包含的小部件也不会自动填充容器。例如,您可以创建以下内容:

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

  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Button"/>
</LinearLayout>

即使父布局设置为与屏幕宽度相匹配,按钮也会浮动在屏幕的左侧。

如果您希望窗体小部件在线性布局中拉伸以填充屏幕上的空白区域,那么您有一个很好的选择:layout_weight

当Android在线性布局中调整窗口小部件时,会进行两次传递。在第一轮中,它使用layout_widthlayout_height属性。如果这些设置为wrap_content,则窗口小部件将设置为&#34; natural&#34;第一遍中的大小。

在第二遍中,它会查看窗口小部件的layout_weight属性。根据其权重将任何剩余像素分配给所有小部件。根本没有指定权重的小部件不能获得任何像素。指定权重的小部件获得与其权重成比例的像素(例如,权重为2的小部件的权重是权重为1的小部件的两倍)。通过这种方式,一个维度中的所有未分配像素可以分布在您的小部件中,无论您喜欢什么。希望他们都去一个小部件?赋予它1的权重,不要给任何其他小部件赋予权重。想要在所有小部件中平均分配空间吗?给他们所有的重量1。

重要的是要注意,权重只会沿一个轴分布像素:对于水平线性布局,这是X轴,对于垂直线性布局,这是Y轴。

答案 1 :(得分:-2)

您希望布局自动拉伸?您是否考虑过使用relativelayout作为根?