0

私のアプリは、3x3 の単純なグリッドに 1 ~ 9 の数字の単純な画面を表示します。これが私の SmartWatch でどのように見えるかは、https: //www.youtube.com/watch?v= ijh5EOTTR-w で確認できます。

さて、それはすべて正しいです。問題は、ユーザーが自分のデバイスで同じアプリの表示が非常に異なると報告したことです

両方の SmartWatch が同じバージョンで実行されています。

  • スマートウォッチ バージョン 0.1.A.3.7
  • ホスト アプリケーション 1.2.37

唯一の違いは電話のモデルです。問題は Sony Xperia S で発生しますが、Sony Xperia Sola ではすべて正常に動作しています。どちらの電話も、Sony の標準 Android Gingerbread を実行します (Sola では、ICS へのアップグレード後もすべて正常に動作します)。

dip、px、mm を使用して、さまざまな方法で数字 (テキスト) のサイズを指定しようとしましたが、いずれの場合も、Sola では Xperia S よりもはるかに小さい寸法で表示されました。

何がこの大きな違いを生んでいるのかわかりません。ヒントや助けをいただければ幸いです。ありがとうございました!

PS私はドローアブルを使用していません。

物事をさらに明確にするための私のコードは次のとおりです。

1) 値を保持するグリッド:

<?xml version="1.0" encoding="utf-8"?>
<!-- px is used since this is a layout for the accessory display. -->
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/smart_watch_control_height"
    android:layout_height="@dimen/smart_watch_control_width" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:ignore="PxUsage">

<GridView
    android:id="@+id/grid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginRight="0px"
    android:layout_marginTop="-13px"
    android:columnWidth="40px"
    android:gravity="center"
    android:horizontalSpacing="0dip"
    android:numColumns="3"
    android:padding="0dip"
    android:stretchMode="none"
    android:verticalSpacing="0dip" />

</RelativeLayout>

2) グリッドの各セルには、次の要素のいずれかが入ります。

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="16dip"
    android:textStyle="bold"
    android:textColor="#0000FF"
    android:gravity="center"
    android:padding="0dip"
/>

3) コントロールの描画ロジック:

// Create background bitmap for animation.
background = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// Set default density to avoid scaling.
background.setDensity(DisplayMetrics.DENSITY_DEFAULT);

LinearLayout root = new LinearLayout(mContext);
root.setLayoutParams(new LayoutParams(width, height));

LinearLayout sampleLayout= (LinearLayout) LinearLayout.inflate(mContext,
        R.layout.speed_dial_control, root);

// draw on the sampleLayout
GridView gridView = (GridView) sampleLayout.findViewById(R.id.grid);
gridView.setAdapter(adapter);

// adjust the size
sampleLayout.measure(width, height);
sampleLayout.layout(0, 0, sampleLayout.getMeasuredWidth(),
    sampleLayout.getMeasuredHeight());

// Draw on canvas
Canvas canvas = new Canvas(background);
sampleLayout.draw(canvas);

// Send bitmap to accessory
showBitmap(background);
4

2 に答える 2

2

したがって、最初の回答がまだ関連しているため、別の回答です-ドローアブルの場合。

SmartWatch ディスプレイは 128x128 ピクセルで構成されているため、まず PX を使用します。密度を適用しないでください。

xml を少し変更しました。ほとんどの場合、不要な定義を削除しました。

グリッド:

<?xml version="1.0" encoding="utf-8"?>
<!-- px is used since this is a layout for the accessory display. -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="@dimen/smart_watch_control_height"
    android:layout_height="@dimen/smart_watch_control_width"
    tools:ignore="PxUsage" >

    <GridView
        android:id="@+id/grid"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:numColumns="3" />

</RelativeLayout>

ご覧のとおり、元の xml のほとんどを省略しています。グリッドと列数を定義するだけです。残りは自動的に処理されます。つまり、グリッドは親レイアウト (128x128) に均等に分散されます。

セル:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@android:id/text1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:textColor="#0000FF"
    android:textSize="26px"
    android:textStyle="bold"
    tools:ignore="PxUsage" />

ここでは、textSize をピクセルに変更し、パディングを記述する必要がないため、パディングを削除しました。

これでうまくいくはずです。さまざまな電話モデルでテストしましたが、うまくいきました。そうでない場合は、アダプターに問題がある可能性があります。テストのために、次のような単純な ArrayAdapter を使用しました。

String[] numbers = new String[] {
        "1", "2", "3", "4", "5",
        "6", "7", "8", "9"
};

ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, R.layout.cell, numbers);

乾杯!

于 2012-10-23T08:38:57.170 に答える
0

Android が密度を適用しないようにするには、res/drawable-nodpiフォルダーを使用してみてください。

あなたの問題はこの質問に似ていると思います。

于 2012-10-17T11:23:04.517 に答える