2012-06-11 52 views
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,在我的手機上,我得到這個: Handset

在平板電腦上,它看起來像這樣: Tablet

另外,如果我硬編碼XML我使用它看起來像平板電腦版本的圖像精確的像素值。箭頭圖像是44px,中心略大。

感覺就像我需要一種方法來設置設備的密度,以編程方式強制手錶的密度。如何讓佈局在手錶上正確顯示?我希望有一個解決方案,我可以避免對像素值進行硬編碼,因爲這不是我們在Android上做的事情。

回答

4

嘗試在res/drawable-nodpi文件夾中存儲繪圖,這應該會阻止Android應用密度。

這是例如完成在8益智遊戲,可用here。茶012!

+0

茶!!直到現在,我還不知道該文件夾後綴。 –