У меня возникли проблемы с правильной компоновкой на экране 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 выше, на моем телефоне я получаю следующее:
На табличке это выглядит следующим образом:
Кроме того, если я жесткий код мой XML использовать точные значения пикселей изображения он выглядит как версия планшета. Изображения стрелки 44px, центр один немного больше.
Похоже, мне нужен способ, чтобы программно настроить плотность устройства, чтобы заставить его к плотности часов. Как сделать макет корректным на часах? Я бы предпочел решение, где я могу избежать жесткого кодирования значений пикселей, поскольку это не то, как мы делаем вещи на Android.
cha-ching! До сих пор я не знал об этом postfix. –