我在 128x128 智能手表屏幕上获得正确布局时遇到问题。
这是一个有趣的问题,因为手表上的布局显然继承了运行它的设备的屏幕密度。因此,当在平板电脑和手机上运行时,手表上的布局元素大小完全不同。
我的布局基于智能扩展 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 以使用图像的确切像素值,它看起来就像平板电脑版本。箭头图像为 44 像素,中间的图像稍大。
感觉就像我需要一种以编程方式设置设备密度的方法,以强制它达到手表的密度。如何使手表上的布局看起来正确?我更喜欢一个可以避免对像素值进行硬编码的解决方案,因为这不是我们在 Android 上做事的方式。