2

時計ウィジェットを開発しました。多くのデバイスで問題なく表示されます。XLARGEカテゴリに分類されるため、MotorolaXoomを除きます。

これは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をベースレイアウトとして使用し、各要素は各コーナーに重力45dpのLinearLayoutを使用しています。

これは、ウィジェットがXoomでどのように表示されるかを示しています。要素の位置は、描画する赤い円上にあるはずです。

  1. 使用するのに最適なレイアウトの組み合わせは何ですか?提案できますか?
  2. 私がこのレイアウトに固執しているとしましょう。Xoomデバイスの代替レイアウトを提供するにはどうすればよいですか?clock.xmlをlayout-xlargeとdrawable-xlargeに配置しようとしましたが、何もありません...
4

1 に答える 1

3

最良かつすっきりとした方法は、フォルダを作成することです。そこには、ターゲットデバイスがxlargeレイアウトの場合にロードされるフォルダlayout-xlargeが含まれています。clock.xml

このようにして、画面サイズ、密度などに応じてさまざまなレイアウトを作成できます。開発者向けドキュメントhttp://developer.android.com/guide/practices/screens_support.html#DeclaringTabletLayoutsから入手

45dp別の解決策は、特定のサイズまたはXdpvaluesフォルダーにあるすべてのサイズを、という名前のファイルdimenに入れて、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.xmlどこのようにレイアウトと同じファイル名で?

コメントする別の編集:

ご想像のとおり、完全なレイアウトフォルダをロードするのではなく、数字だけを置き換える移行の方がはるかに効率的であるため、はるかに効率的です。それでも、ディメンションを再利用でき、レイアウト間を行ったり来たりせずに、「そのディメンションは何でしたか」を確認できます。大きなボタンの固定寸法のように。

さらに重要なのは、特定の理由で各フォルダーを拡張できることです。同じレイアウトで異なる寸法が必要な場合は、レイアウト全体をコピーして貼り付けるのではなく、寸法を上書きする必要があります。もっと理にかなっていますね。

そして、努力はほとんど同じことです。フォルダのようlayout-large/にあなたは持っているでしょうvalues-large/。私が提供した文書やインターネット全体に非常に良い例があります。

于 2012-07-20T17:41:35.363 に答える