【问题标题】:Design android app for fitting all screens设计适合所有屏幕的安卓应用
【发布时间】:2016-01-29 03:20:27
【问题描述】:

我正在尝试为 android 构建一个应用程序,并为片段创建了一个 xml 文件。 在预览中,即 Nexus 4 我可以看到 items(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>

【问题讨论】:

  • 如果您可以发布布局,有人可能会帮助您,在那之前请尝试一下,stackoverflow.com/questions/29025843/…
  • @PankajNimgade 发布了代码。填充是问题,但如果不使用特定的度量单位,我不知道如何设置它。
  • 我已经发布了一个答案,我想这会对你有所帮助

标签: android android-layout


【解决方案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>

输出

更新

您可以通过使用layout_weight 将Views 的宽度设置为0dp 来水平分布Views 平衡,在给定的示例中,我展示了两个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 垂直占据相等的空间,您可以使用以下示例,使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>

【讨论】:

  • 我怎样才能以同样的方式设置宽度?
  • @BogdanDaniel,您可以在设置 width="0dp" 的同时使用 layout_weight,这样您的视图宽度将由 layout_weight 中提供的百分比管理,android 框架会处理 erst :)跨度>
  • 但是我应该为此做一个新的线性布局吗?因为我已经有了它的高度
【解决方案2】:

您应该使用布局权重。

来自docs

布局权重

LinearLayout 还支持为单个子级分配权重 使用 android:layout_weight 属性。该属性分配一个 视图的“重要性”值,即它应该有多少空间 占据屏幕。较大的权重值允许它扩展到 填充父视图中的任何剩余空间。子视图可以指定一个 权重值,然后视图组中的任何剩余空间为 按儿童申报体重的比例分配给儿童。 默认权重为零。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多