不同的SmartWatch控制屏显示

时间:2012-10-16 11:38:18

标签: sony sony-smartwatch

我的应用程序在简单的3x3网格中显示数字1-9的简单屏幕。您可以在此处查看我在SmartWatch上的显示效果:https://www.youtube.com/watch?v=ijh5EOTTR-w

现在,这一切都是正确的。问题是,用户在其设备上报告了相同应用的不同显示,可以在此处看到:https://docs.google.com/open?id=0BwywSxPvL53dcmlwd0RJQWhVa0E

两个SmartWatches都在相同的版本上运行:

  • Smartwatch版本0.1.A.3.7
  • 主机应用程序1.2.37

唯一的区别是手机型号:问题出现在索尼Xperia S上,而在索尼Xperia Sola上一切正常。这两部手机都运行着索尼的股票Android Gingerbread(在升级到ICS后,Sola上的所有产品都继续正常工作)。

我尝试使用dip,px,mm以不同的方式指定数字'(文本)大小,但在Sola的所有情况下,它们的尺寸都比Xperia S小得多。

我不知道是什么可以使这个显着的差异,并希望任何提示或帮助。谢谢!

P.S。我没有使用任何drawables。

这是我的代码,使事情更加清晰:

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);

2 个答案:

答案 0 :(得分:2)

所以,另一个答案,因为第一个答案仍然是相关的 - 对于drawables。

首先,您要使用PX,因为SmartWatch显示器是由128x128像素构建的。不应该使用密度。

我已经修改了你的xmls了。大多数情况下,我删除了不必要的定义。

网格:

<?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);

干杯!

答案 1 :(得分:0)

要阻止Android应用密度,请尝试使用res/drawable-nodpi文件夹。

我认为您的问题可能类似于this question