2012-06-11 3 views
2

У меня возникли проблемы с правильной компоновкой на экране smartwatch 128x128.XML Layout на Sony Smartwatch

Это интересная проблема, потому что макет на часах явно наследует плотность экрана от устройства, на котором он работает. Поэтому, когда вы бегали по планшету и телефону, элементы макета на часах были совершенно разными.

Я основываю свой макет на одном из примеров проектов в 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.

+0

cha-ching! До сих пор я не знал об этом postfix. –