2
我在128x128智能手錶屏幕上獲得正確佈局時遇到問題。Sony Smartwatch上的XML佈局
這是一個有趣的問題,因爲手錶上的佈局明顯地繼承了它所運行的設備的屏幕密度。因此,當平板電腦與手機一起運行時,手錶上的佈局元素大小完全不同。
我基於我的佈局在智能擴展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上做的事情。
茶!!直到現在,我還不知道該文件夾後綴。 –