布局搞砸了更大的屏幕尺寸,没有利用额外的空间?

时间:2012-10-16 15:33:19

标签: android xml image android-layout layout

几乎完成了我的应用程序,我遇到了一个巨大的错误。正如标题所说;我刚刚在Galaxy Nexus上测试了我的应用程序。比我到目前为止测试我的应用程序的屏幕更大。欲望高清。该应用在DesireHD上看起来很好,在GNexus上非常糟糕。

我的意思是:Desire HD screenshotGNexus screenshot

我为每个文件夹-hdpi -xhdpi等创建了图像。我按照开发指南中的3:4:6:8比例来正确创建它们。它肯定是从xhdpi中获取图像。我可以说这是因为关于ImageViews的约束和反馈改变了设计。

所有东西都有ImageView,我应该提一下。我不知道他们为什么没有正确出现。我尝试在layout-xlarge中创建一个main.xml,然后在layout-sw360dp中创建一个main.xml,但都没有解决问题。事情看起来很不合适。考虑到它正在拾取xhdpi图像,我不知道它们为什么不能正确缩放。如果需要,我会发布我的XML。我已经回到了只有一个res-layout文件夹,因为它似乎没什么区别。

不妨立即添加我的XML:我们走了,http://pastebin.com/PkzSDxxw - 我用上面的屏幕截图对其进行了颜色编码。

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:fillViewport="true"
   android:background="@color/mainback">

    <!-- Title contains application info and content starts immediately below. -->

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="wrap_content">
    <!-- red -->
    <ImageView
       android:id="@+id/ColourTitle"
       android:layout_height="wrap_content"
       android:layout_width="fill_parent"
       android:src="@drawable/main_colourtitle"
       android:contentDescription="@string/ContentDescColourTitle"/>
    <!-- blue -->          
    <ImageView
       android:id="@+id/PastSeason"
       android:layout_height="wrap_content"
       android:layout_width="fill_parent"
       android:layout_below="@id/ColourTitle"
       android:contentDescription="@string/ContentDescHistory"
       android:layout_marginBottom="12dp"
       android:layout_marginTop="12dp"
       android:onClick="PastSeason"
       android:src="@drawable/main_history"/>
    <!-- green first row -->
                                <LinearLayout
                                    android:id="@+id/DriveCurrent"
                                    android:layout_height="wrap_content"
                                    android:layout_width="match_parent"
                                    android:layout_below="@id/PastSeason"
                                    android:gravity="center"
                                    android:layout_marginTop="7dp">

                                        <ImageView
                                                android:id="@+id/Drivers"
                                                android:layout_height="wrap_content"
                                                android:layout_width="wrap_content"
                                                android:onClick="F1Drivers"
                                                android:src="@drawable/main_driver"
                                                android:contentDescription="@string/ContentDescDriver"
                                                android:layout_marginRight="30dp"/>

                                        <ImageView
                                                android:id="@+id/CurrentF1"
                                                android:layout_height="wrap_content"
                                                android:layout_width="wrap_content"
                                                android:onClick="CurrentSeason"
                                                android:src="@drawable/main_currentseason"
                                                android:contentDescription="@string/ContentDescCurrentF1"
                                                android:layout_marginLeft="15dp"/>

                                </LinearLayout>  
   <!-- green 2nd line -->
                                <LinearLayout
                                    android:layout_below="@id/DriveCurrent"
                                    android:layout_height="wrap_content"
                                    android:layout_width="match_parent"
                                    android:gravity="center"
                                    android:layout_marginTop="10dp"
                                    android:id="@+id/TeamDriverRecord">

                                            <ImageView
                                                android:layout_height="wrap_content"
                                                android:layout_width="wrap_content"
                                                android:src="@drawable/main_driver_record"
                                                android:contentDescription="@string/ContentDescDriverRecord"
                                                android:layout_marginRight="30dp"
                                                android:onClick="DriverRecord"/>

                                            <ImageView
                                                android:id="@+id/teamrecord"
                                                android:layout_height="wrap_content"
                                                android:layout_width="wrap_content"
                                                android:src="@drawable/main_team_record"
                                                android:contentDescription="@string/ContentDescTeamRecord"
                                                android:layout_marginLeft="15dp"
                                                android:onClick="TeamRecord"/>

                                </LinearLayout>

        <!-- faq aboutus feedback -->                  
                                <LinearLayout
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:layout_alignParentBottom="true"
                                    android:layout_below="@id/TeamDriverRecord">       

                                        <ImageView
                                                android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:src="@drawable/main_faq"
                                        android:contentDescription="@string/ContentDescFAQ"
                                        android:onClick="FAQPage">
                                        </ImageView>

                                        <ImageView
                                                android:layout_width="wrap_content"
                                        android:layout_height="wrap_content"
                                        android:src="@drawable/main_feedback"
                                        android:contentDescription="@string/ContentDescFeedback"
                                        android:onClick="FeedbackPage">
                                        </ImageView>

                                        <ImageView
                                            android:layout_width="wrap_content"
                                            android:layout_height="wrap_content"
                                            android:contentDescription="@string/ContentDescAboutUs"
                                            android:src="@drawable/main_aboutus"
                                            android:onClick="AboutUs">
                                        </ImageView>                               
                                </LinearLayout>

</RelativeLayout>

</ScrollView>

我真的可以帮忙,这让我疯了,我以为我把它全部覆盖了。 :(谢谢。

编辑:在Eclipse中,当在XML编码旁边的“图形布局”选项卡中选择不同的屏幕尺寸时,对于任何大于4英寸的屏幕,它都不能正确缩放图像。如果我选择Nexus S显示它缩放很好。接下来是GNexus,然后你就会遇到同样的问题。 ImageViews无法扩展以满足更大的屏幕尺寸。

1 个答案:

答案 0 :(得分:0)

RelativeLayouts有时可能很难处理,有时它可能像反转操作一样微妙(例如,A上方的A与A下方的B不一样)。我推荐以下内容:

为每个子项设置以下属性(红色,蓝色和三个LinearLayouts)

android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"

为了让他们扩大规模以填满屏幕。

对于每个绿色ImageView,放置android:gravity="center"以使每个绿色方块位于其可用空间的中间 - 这应确保尽可能保持一致的间距。

在绿色第二行LinearLayout中,输入

android:layout_above="@+id/TeamDriverRecord"

并从常见问题/关于我们/反馈行中删除以下内容

android:layout_below="@id/TeamDriverRecord"

原因是它首先布置绿色第二行,然后将FAQ /其他东西放在 all 下面的空间中,覆盖过程中的height = wrap_content - 这是为什么这条线在较大的屏幕上显得更高而不是正确地捕捉到底部。您还可以通过向FAQ LinearLayout的每个子项添加android:layout_alignParentBottom="true"来解决这个问题。