【问题标题】:Android - Layout for both Galaxy S4 and Nexus 5Android - Galaxy S4 和 Nexus 5 的布局
【发布时间】:2013-12-19 05:14:00
【问题描述】:

我是否可以使用特定的限定词来做出不同的 专门针对 Nexus 5 的布局?

我正在将 layout-xhdpi 用于 Galaxy S4(我已检查具有物理键的 S4 Active)和 Note 2 等设备,我不想在那里更改任何内容.

编辑#2 S4 和 Nexus 5 之间差异的原因,不考虑布局不是最佳的事实,是因为有效屏幕尺寸不像 Galaxy S4 (1920) 而是更小 - 1776,因为软键。

编辑#3 这是只有一个相对布局的新布局:(问题是 android:id="@+id/nextlevel" 位于 android:id="@+id/banner_adview ")

<?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/bg"
  android:gravity="center_horizontal"
  android:orientation="vertical" >

<TextView
    android:id="@+id/endlevel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:layout_marginBottom="13dp"
    android:background="@drawable/header"
    android:gravity="center"
    android:paddingBottom="1dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingTop="1dp"
    android:textColor="#ecf0f1"
    android:textSize="20sp"
    android:textStyle="normal" >
</TextView>

<TextView
    android:id="@+id/congratulations"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/endlevel"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="7dp"
    android:gravity="center"
    android:text="@string/congratulations"
    android:textColor="#ecf0f1"
    android:textSize="19sp"
    android:textStyle="bold" >
</TextView>

<ImageView
    android:id="@+id/summary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/congratulations"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="10dp"
    android:layout_marginTop="7dp"
    android:background="@drawable/levelendresultbg" />

<TextView
    android:id="@+id/pointstext"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/congratulations"
    android:layout_marginTop="11dp"
    android:gravity="center"
    android:textColor="#ecf0f1"
    android:textSize="17sp"
    android:textStyle="bold" >
</TextView>

<ImageView
    android:id="@+id/divider"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/pointstext"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="5dp"
    android:layout_marginTop="5dp"
    android:src="@drawable/divider" />

<TextView
    android:id="@+id/totalpointstext"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/divider"
    android:layout_marginBottom="4dp"
    android:gravity="center"
    android:textColor="#e1c736"
    android:textSize="17sp"
    android:textStyle="bold" />

<ImageView
    android:id="@+id/award"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/endlevel"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="10dp"
    android:layout_toRightOf="@id/congratulations"
    android:src="@drawable/award" />

<TextView
    android:id="@+id/topborder"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/totalpointstext"
    android:layout_marginTop="13dp"
    android:background="@drawable/border"
    android:gravity="left"
    android:paddingLeft="10dp"
    android:textColor="#ecf0f1"
    android:textSize="17sp"
    android:textStyle="bold" />

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="280dp"
    android:layout_below="@id/topborder"
    android:background="@color/transparent"
    android:cacheColorHint="#00000000"
    android:fadeScrollbars="false" />

<TextView
    android:id="@+id/bottomborder"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@android:id/list"
    android:background="@drawable/border"
    android:gravity="center" />

<ImageButton
    android:id="@+id/nextlevel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/bottomborder"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:layout_marginTop="30dp"
    android:background="@drawable/nextlevelbutton"
    android:textSize="20sp" />

<com.google.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@+id/banner_adview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    ads:adSize="BANNER"
    ads:adUnitId="XXXXXXXXXXXX"
    ads:loadAdOnCreate="true"
    android:background="@drawable/adback" />

</RelativeLayout>

谢谢!

【问题讨论】:

  • 如果您正在考虑特定于设备的布局,您应该真正考虑查看您是如何构建布局的。而是专注于构建可扩展的布局,使用 RelativeLayoutLinearLayout 等布局进行扩展
  • 这是我唯一遇到问题的设备。大多数布局都是相对的,并且都使用 dp/sp 测量值。
  • 我现在想到一件事,if(isNexus5) setContentView(R.layout.name_nexus_5) else setContentView(R.layout.name)
  • 那你为什么不发布你的布局和一些你遇到的问题的截图呢?不知何故,其他人能够为所有这些设备使用相同的布局。
  • @ianhanniballake 我已将信息添加到原始问题中。发送!

标签: android android-layout


【解决方案1】:

如果您有一个带有 layout-xhdpi 或 layout-xhdpi 的布局,那么您可能一开始就做错了什么。

-xhdpi 和 -xxhdpi 限定符将主要影响可绘制对象,而不是布局(也就是说,除非您的背景图像占据布局的整个宽度或高度)。

对于布局,您通常必须使用尺寸限定符,而不是密度限定符。对于密度,您必须修改的是可绘制对象,而不是布局。

【讨论】:

  • 我在原始问题中添加了额外的信息,谢谢! :)
  • 我不打算使用不同的布局,但问题是相同的布局如何在 Galaxy S4 上正常工作(1080 x 1920 像素,5.0 英寸(~441 ppi 像素密度)但没有t 在 Nexus 5 上(1080 x 1920 像素,4.95 英寸(~445 ppi 像素密度)。
  • 您发布的布局代码不应该在任何手机上运行。你一定犯了一些剪切和粘贴错误。话虽如此,这还不是最大的问题。使用这种布局,您应该只使用一个 RelativeLayout,并使用 layout_below 或 layout_alignblahblah 等属性...developer.android.com/guide/topics/ui/layout/relative.html
  • 从我在上一个链接中提供的示例开始,尝试一次一个元素从头开始构建您的布局。不要使用 Eclipse/Android Studio 布局设计器工具。试着理解你在做什么。仅使用 IDE 来指出您的语法错误。不要盲目复制你不理解的例子。如果您尝试理解它们,RelativeLayout 属性实际上是有意义的。你可能不知道确切的语法,但没关系,如果你专注于一次做一点点改变,如果你帮助自己阅读我链接的指南,你可以慢慢完成它。
  • 谢谢,虽然我认为我提供的屏幕截图可能具有误导性,因为我必须隐藏部分。我非常了解大多数(如果不是全部)相对布局属性。我会再看一遍,但我仍然不明白为什么相同的布局在 Galaxy S4(1080 x 1920 像素,5.0 英寸(~441 ppi 像素密度)上可以正常工作,但在 Nexus 5(1080 x 1920 像素)上却不行, 4.95 英寸(约 445 ppi 像素密度)。
猜你喜欢
  • 2012-07-26
  • 1970-01-01
  • 2013-10-16
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
相关资源
最近更新 更多