我开发了一个时钟部件。在很多设备上看起来都不错。摩托罗拉Xoom除外,因为它属于XLarge类别。
这是clock.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#00000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

<AnalogClock android:id="@+id/AnalogClock"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:dial="@drawable/widgetclock"
    android:hand_hour="@drawable/widgethour"
    android:hand_minute="@drawable/widgetminute" />

    <!-- Time Row -->
    <LinearLayout
        android:id="@+id/lltimeheaderrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center|top"
        android:layout_marginTop="45dp"
        android:visibility="gone">

        <!-- TIME -->
        <LinearLayout android:id="@+id/llTimeDefault"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

            <TextView
                android:id="@+id/HOUR"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/my_gray"
                android:textStyle="bold"
                android:textSize="15sp"/>

            <TextView
                android:id="@+id/MINUTE"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/my_gray"
                android:textStyle="bold"
                android:textSize="15sp" />
            </LinearLayout>

            <TextView
                android:id="@+id/AM_PM"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textColor="@color/my_gray"
                android:textStyle="bold"
                android:textSize="13sp"
                android:padding="1dp" />
        </LinearLayout>
    </LinearLayout>

    <!-- Calendar Graph -->
    <LinearLayout
        android:id="@+id/llCalGraph"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center|left"
        android:layout_marginLeft="45dp">
            <FrameLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent">
                <ImageView
                    android:id="@+id/CalendarImg"
                    android:src="@drawable/calendar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <TextView android:id="@+id/DateDayG"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center|top"
                    android:layout_marginTop="3dp"
                    android:textSize="11sp"
                    android:textStyle="bold"
                    android:textColor="@color/my_gray"
                    android:shadowColor="@color/my_black"
                    android:shadowDx="1"
                    android:shadowDy="1"
                    android:shadowRadius="2"
                    ></TextView>
                <TextView android:id="@+id/DateNoG"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="5dp"
                    android:textSize="25sp"
                    android:textColor="@color/my_gray"
                    ></TextView>
            </FrameLayout>

    </LinearLayout>

    <!-- BATTERY -->
    <LinearLayout
        android:id="@+id/llBattGraph"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="center|right"
        android:layout_marginRight="45dp">
            <FrameLayout android:layout_width="fill_parent"
                android:layout_height="fill_parent">
                <ImageView
                    android:id="@+id/BatteryImg"
                    android:src="@drawable/batt_00"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <ImageView
                    android:id="@+id/BatteryFlashing"
                    android:src="@drawable/flashing"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="13dp"
                    android:layout_marginLeft="2dp"
                    android:visibility="gone" />
                <TextView
                    android:id="@+id/BatteryLevel"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="@color/my_gray"
                    android:textSize="18sp"
                    android:layout_gravity="center" />


            </FrameLayout>
    </LinearLayout>

    <!-- Weather Row -->
    <LinearLayout
        android:id="@+id/llweatherrow"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center|bottom"
        android:layout_marginBottom="45dp">

        <!-- WEATHER IMAGE -->
        <LinearLayout
            android:id="@+id/llWeatherImage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="visible"
            android:layout_gravity="center">

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

    </LinearLayout>

</FrameLayout>

基本上它在小部件上有4个元素。上,下。左右两侧。
我只是使用framelayout作为基本布局,每个元素都使用linearlayout,每个角的重力为45dp。
这是Xoom上的小部件的外观
我希望元素的位置应该在我画的红色圆圈上。
我应该使用什么样的布局组合?你能建议一下吗?
假设我坚持这个布局。如何为xoom设备提供可选布局?我试着把clock.xml放在layout xlarge和drawable xlarge上,但是什么都没有…

最佳答案

最好和更整洁的方法是创建一个文件夹layout-xlarge,其中包括目标设备具有xlarge布局时将加载的clock.xml
这样你就可以根据从开发者文档中获得的屏幕大小、密度等进行不同的布局http://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayouts
另一种解决方案是将特定45dpXdp中的所有大小都放入名为dimen的文件的values文件夹中,然后在xml中声明为:...="@dimen/largeButton",并使用前面提到的相同方法创建相应的values-xlarge并在其中添加适当的dimen文件。
这是非常有用的机制,因为您可以根据屏幕大小创建不同的布局,并使其能够获得不同密度的像素。如果你没有听说这些条款,请让我提供更多的细节。
编辑:从文档

res/layout/my_layout.xml             // layout for normal screen size ("default")

res/layout-small/my_layout.xml       // layout for small screen size

res/layout-large/my_layout.xml       // layout for large screen size

res/layout-xlarge/my_layout.xml      // layout for extra large screen size

res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

你确定就是这样的目录吗?与布局文件名相同,如clock.xmleverywhere?
另一个评论编辑:
它的效率更高,因为只替换数字而不是加载完整布局文件夹的转换效率更高。尽管如此,您仍然可以重用维度,而不必在布局之间来回检查“那个维度又是什么?”就像一个固定尺寸的大按钮。
更重要的是,每个文件夹都可以根据特定的原因进行扩展。如果需要相同的布局但不同的尺寸,则应覆盖尺寸而不是复制粘贴整个布局。更有意义,不是吗?
因为付出的努力几乎是一样的。像layout-large/文件夹一样,您将拥有values-large/。在我提供的文档中以及在互联网上有一个很好的例子。

关于android - 如何处理Android XLarge屏幕?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11584107/

10-10 01:56