设计Android应用程序以适应所有屏幕

时间:2016-01-27 16:24:01

标签: android android-layout

我正在尝试为Android构建应用程序,并为片段创建了一个xml文件。  在预览中, Nexus 4 我可以看到项目(buttons, text view, etc.)占用了所有空间,但是当我在手机上运行我的应用时( s6 edge + )有1/5的屏幕免费。  wrap_content的所有内容都设置了我的高度,我只使用dp单位的填充。

我该如何解决这个问题?我应该更换所有包装内容'达到所有高度的特定值?

我的xml文件:

 <?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:background="@drawable/gradient"
    android:layout_height="match_parent">

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

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

    <LinearLayout
        android:layout_width="match_parent"
        android:paddingTop="15dp"
        android:paddingLeft="100dp"
        android:layout_height="wrap_content">

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

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

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

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

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

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

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

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

    <Button
        android:layout_width="270dp"
        android:layout_marginTop="15dp"
        android:background="@drawable/btnstyle"
        android:layout_height="wrap_content"
        android:text="button8"
        android:gravity="left|center_vertical"
        android:paddingLeft="65dp"
        android:alpha="0.7"
        android:textColor="#fff"
        android:id="@+id/button6"
        android:layout_gravity="center_horizontal" />

</LinearLayout>

2 个答案:

答案 0 :(得分:1)

好吧我确实做了一些改变,

虽然我真的不明白哪个视图应该在你的布局中做什么。所以我以这种布局的方式管理它的空间以支持多屏幕,但你应该考虑根据你想要定位的屏幕制作不同的布局。

请试试这个

<?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:background="#ffffff"
    android:orientation="vertical">

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

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:paddingTop="35dp"
            android:text="Title1"
            android:textColor="#000"
            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="#000"
            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="match_parent"
            android:paddingLeft="100dp"
            android:paddingTop="15dp">

            <ImageView
                android:id="@+id/imageView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="15dp"
                android:background="@android:color/holo_purple" />

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginRight="17dp"
                android:background="@android:color/holo_purple" />

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

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

        <Button
            android:id="@+id/button1"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            android:background="@android:color/holo_purple"
            android:gravity="left|center_vertical"
            android:paddingLeft="65dp"
            android:text="button3"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button2"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            android:background="@android:color/holo_purple"
            android:gravity="left|center_vertical"
            android:paddingLeft="65dp"
            android:text="button4"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button3"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            android:background="@android:color/holo_purple"
            android:gravity="left|center_vertical"
            android:paddingLeft="65dp"
            android:text="button5"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button4"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            android:background="@android:color/holo_purple"
            android:gravity="left|center_vertical"
            android:paddingLeft="65dp"
            android:text="button6"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button5"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            android:background="@android:color/holo_purple"
            android:gravity="left|center_vertical"
            android:paddingLeft="65dp"
            android:text="button7"
            android:textColor="#fff" />

        <Button
            android:id="@+id/button6"
            android:layout_width="270dp"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:layout_gravity="center_horizontal"
            android:layout_margin="10dp"
            android:alpha="0.7"
            android:background="@android:color/holo_purple"
            android:gravity="left|center_vertical"
            android:paddingLeft="65dp"
            android:text="button8"
            android:textColor="#fff" />

    </LinearLayout>


</LinearLayout>
  

输出

output

  

更新

使用Views同时将layout_weight宽度设置为0dp时,您可以采取以此方式水平分布Buttons均衡的事项,在给定的示例中,我展示了两个width水平的空间。注意它的layout_weight<?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:gravity="center_horizontal" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="4dp" android:layout_weight="0.5" android:text="One" android:textAllCaps="false" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="4dp" android:layout_weight="0.5" android:text="Two" android:textAllCaps="false" /> </LinearLayout>

Views

enter image description here

如果您希望两个parent layout垂直占据相同的空间,可以使用以下示例,使view's的方向垂直,0dp高度<?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:orientation="vertical"> <ImageView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.5" android:src="@drawable/goku" /> <ImageView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.5" android:src="@drawable/gohan" /> </LinearLayout>

[AS] table_alias

enter image description here

答案 1 :(得分:0)

您应该使用布局权重。

来自docs

  

布局重量

     

LinearLayout还支持为各个孩子分配权重   使用android:layout_weight属性。此属性指定一个   对于视图的“重要性”价值应该是多少空间   占据屏幕上。较大的重量值允许它扩展到   填充父视图中的任何剩余空间。子视图可以指定一个   权重值,然后视图组中的任何剩余空间   按照宣称的体重比例分配给儿童。   默认权重为零。

     

例如,如果有三个文本字段,其中两个声明了一个   重量为1,而另一个没有给予重量,第三个文字字段   没有重量不会增长,只会占据所需的面积   它的内容。另外两个将同等扩展以填补空间   测量完三个场后剩下的。如果第三个字段是   然后给出2的权重(而不是0),那么它现在被宣布更多   比其他人都重要,所以它剩下的一半   空间,而前两个平均分享其余部分。