索尼Smartwatch折价XML布局(XML Layout on Sony Smartwatch)

2019-06-25 10:17发布

我有得到128×128智能手表屏幕上的适当的布局问题。

这是一个有趣的问题,因为手表上的布局显然是继承了它的运行对设备的屏幕密度。 因此,当在片与手机跑了手表布局元件的尺寸为完全不同的。

我就在智能扩展SDK的样本项目立足我的布局。

有了这个XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="@dimen/smart_watch_control_width"
    android:layout_height="@dimen/smart_watch_control_height"
    android:id="@+id/rlayout"
>

    <Button
        android:id="@+id/imageViewUp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:tag="button"
        android:background="@drawable/up_selector" />
    ...more Buttons
</RelativeLayout>

初始化布局的SmartView只是一个扩展的LinearLayout

private LinearLayout createLayout() {
    mSmartView = new SmartView(mContext);
    mSmartView.setLayoutParams(new LayoutParams(WIDTH, HEIGHT));

    LinearLayout sampleLayout = (LinearLayout) LinearLayout.inflate(
            mContext, R.layout.xbmc, mSmartView);

    sampleLayout.measure(WIDTH, HEIGHT);

    Log.i(TAG, "layout width: " + sampleLayout.getMeasuredWidth()
            + " height: " + sampleLayout.getMeasuredHeight());

    sampleLayout.layout(0, 0, sampleLayout.getMeasuredWidth(),
            sampleLayout.getMeasuredHeight());

    return sampleLayout;
}

createLayout的结果存储在mLayout,然后利用得出:

Bitmap bitmap = Bitmap.createBitmap(128, 128, BITMAP_CONFIG);

// Set default density to avoid scaling.
bitmap.setDensity(DisplayMetrics.DENSITY_DEFAULT);

Canvas canvas = new Canvas(bitmap);
mLayout.draw(canvas);

showBitmap(bitmap);

通过上面的XML,我的手机我得到这个:

在平板电脑上,它看起来是这样的:

另外,如果我硬编码我的XML使用图像的精确像素值,它看起来像平板电脑的版本。 箭头图像是44px,中心一个稍大。

这感觉就像我需要一种方法来设置设备的密度编程用它强制手表的密度。 如何使布局看起来正确的手表? 我宁愿一个解决方案,我能避免硬编码的像素值,因为这不是我们如何在Android上做的事情。

Answer 1:

尝试存储在res /绘制-nodpi文件夹可绘制,应该从应用密度停止Android系统。

这是在8益智游戏,可以做如这里 。



文章来源: XML Layout on Sony Smartwatch