Эмулятор, устройство, Android Studio Layout Различия в уведомлениях - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь создать фрагмент для уведомления ... эмулятор и макет в конструкторе Android Studio в порядке.

(пример эмулятора)

layout on emulator

(Пример конструктора) layout in android studio

Но при запуске приложения на целевом устройстве макет не выравнивается должным образом.

(макет на устройстве) Layout on device

Устройство представляет собой границу s7 с разрешением 1440 * 2560, размером экрана 5,5 дюйма и наименьшей шириной 360dp.

Я создал эмулятор на основе этих спецификаций и запускаю на нем приложение.

Макет находится в папке res. Layout-sw360dp-xxxhdpi

Существуют другие папки макетов:

layout-sw320dp-hdpi

layout-sw360dp-xhdpi

layout-sw360dp-xxhdpi

layout-sw411dp-xxxhdpi

Я пытался масштабировать изображения, fitxy, fitstart и т. д ...

Я тщательно проверил размеры пикселей плотности для каждого изображения, макета и фона.

Макет XML:

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/media_notification_large_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:padding="0dp">

<ImageView
android:id="@+id/note_far_left"
android:layout_width="6.5dp"
android:layout_height="112dp"
android:layout_alignParentLeft="true"
android:src="@mipmap/note_far_left" />

<ImageView
android:id="@+id/note_picture_top"
android:layout_width="133.5dp"
android:layout_height="13.5dp"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/note_far_left"
android:src="@mipmap/note_picture_top" />

<ImageView
android:id="@+id/note_picture"
android:layout_width="85dp"
android:layout_height="85dp"
android:layout_below="@id/note_picture_top"
android:layout_toRightOf="@id/note_far_left"
android:background="@drawable/silver_note"
android:src="@drawable/silver_note" />

<ImageView
android:id="@+id/note_picture_bottom"
android:layout_width="85dp"
android:layout_height="13.5dp"
android:layout_below="@id/note_picture"
android:layout_toRightOf="@id/note_far_left"
android:src="@mipmap/note_picture_bottom" />

<ImageView
android:id="@+id/note_title_text_top"
android:layout_width="172.75dp"
android:layout_height="6.5dp"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/note_picture_top"
android:src="@mipmap/note_title_text_top" />

<ImageView
android:id="@+id/note_picture_right_top"
android:layout_width="48.5dp"
android:layout_height="32.25dp"
android:layout_below="@id/note_picture_top"
android:layout_toRightOf="@id/note_picture"
android:src="@mipmap/note_picture_right_top" />

<ImageView
android:id="@+id/note_picture_right_bottom"
android:layout_width="14.25dp"
android:layout_height="66.25dp"
android:layout_below="@id/note_picture_right_top"
android:layout_toRightOf="@id/note_picture"
android:src="@mipmap/note_picture_right_bottom" />

<ImageView
android:id="@+id/note_title_text_bottom"
android:layout_width="172.75dp"
android:layout_height="13.5dp"
android:layout_below="@+id/note_title"
android:layout_toRightOf="@id/note_picture_right_top"
android:src="@mipmap/note_title_text_bottom" />

<TextView
android:id="@+id/note_shb1"
android:layout_width="68.5dp"
android:layout_height="13.25dp"
android:layout_below="@id/note_title_text_bottom"
android:layout_margin="0dp"
android:layout_toRightOf="@id/note_picture_right_bottom"
android:background="@mipmap/note_shb1"
android:fontFamily="@font/digital_7_mono"
android:gravity="center"
android:text="Shuffle"
android:textColor="@color/colorAccent"
android:textSize="9.25sp" />

<TextView
android:id="@+id/note_shb2"
android:layout_width="68.5dp"
android:layout_height="13.25dp"
android:layout_below="@id/note_title_text_bottom"
android:layout_margin="0dp"
android:layout_toRightOf="@id/note_shb1"
android:background="@mipmap/note_shb2"
android:fontFamily="@font/digital_7_mono"
android:gravity="center"
android:text="Hands Free"
android:textColor="@color/colorAccent"
android:textSize="9.25sp" />

<TextView
android:id="@+id/note_shb3"
android:layout_width="70dp"
android:layout_height="13.25dp"
android:layout_below="@id/note_title_text_bottom"
android:layout_margin="0dp"
android:layout_toRightOf="@id/note_shb2"
android:background="@mipmap/note_shb3"
android:fontFamily="@font/digital_7_mono"
android:gravity="center"
android:text="Bluetooth"
android:textColor="@color/colorAccent"
android:textSize="9.25sp" />

<ImageView
android:id="@+id/note_button_top"
android:layout_width="207dp"
android:layout_height="18dp"
android:layout_below="@id/note_shb1"
android:layout_toRightOf="@id/note_picture_right_bottom"
android:clickable="true"
android:scaleType="centerInside"
android:src="@mipmap/note_button_top" />

<ImageView
android:id="@+id/note_shuffle"
android:layout_width="34.25dp"
android:layout_height="35dp"
android:layout_below="@id/note_button_top"
android:layout_toRightOf="@id/note_picture_right_bottom"
android:clickable="true"
android:src="@drawable/note_shuffle_selector" />

<ImageView
android:id="@+id/note_back"
android:layout_width="34.25dp"
android:layout_height="35dp"
android:layout_below="@id/note_button_top"
android:layout_toRightOf="@id/note_shuffle"
android:clickable="true"
android:src="@drawable/note_back_selector" />

<ImageView
android:id="@+id/note_stop"
android:layout_width="34.25dp"
android:layout_height="35dp"
android:layout_below="@id/note_button_top"
android:layout_toRightOf="@id/note_back"
android:clickable="true"
android:src="@drawable/note_stop_selector" />

<ImageView
android:id="@+id/note_play"
android:layout_width="34.25dp"
android:layout_height="35dp"
android:layout_below="@id/note_button_top"
android:layout_toRightOf="@id/note_stop"
android:clickable="true"
android:src="@drawable/note_play_selector" />

<ImageView
android:id="@+id/note_next"
android:layout_width="34.25dp"
android:layout_height="35dp"
android:layout_below="@id/note_button_top"
android:layout_toRightOf="@id/note_play"
android:clickable="true"
android:src="@drawable/note_next_selector" />

<ImageView
android:id="@+id/note_hands"
android:layout_width="35.75dp"
android:layout_height="35dp"
android:layout_below="@id/note_button_top"
android:layout_toRightOf="@id/note_next"
android:clickable="true"
android:src="@drawable/note_hands_selector" />

<TextView
android:id="@+id/note_title"
android:layout_width="137dp"
android:layout_height="25.75dp"
android:layout_below="@id/note_title_text_top"
android:layout_margin="0dp"
android:layout_toRightOf="@id/note_picture_right_top"
android:background="@mipmap/note_title_text"
android:ellipsize="end"
android:fontFamily="@font/digital_7_mono"
android:gravity="center"
android:paddingStart="1dp"
android:paddingEnd="1dp"
android:singleLine="true"
android:text="@string/emergency_broadcast"
android:textColor="@color/colorAccent"
android:textSize="16sp" />

<ImageView
android:id="@+id/note_power"
android:layout_width="35.75dp"
android:layout_height="25.75dp"
android:layout_alignTop="@+id/note_title"
android:layout_toRightOf="@id/note_title"
android:clickable="true"
android:src="@drawable/note_power_selector" />

(редактировать: добавлен код для построителя уведомлений) код для создания уведомления:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        builder.setStyle(new NotificationCompat.DecoratedCustomViewStyle());
    }else{
        builder.setStyle(new NotificationCompat.BigPictureStyle());
    }

            builder
            .setSmallIcon(R.drawable.icon)
            .setContentTitle(description.getTitle())
            .setSubText(metadataCompat.getText(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE))
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setContentIntent(pContentIntent);



    return builder;

У меня нет идей,что мне не хватает?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Убедитесь, что ширина @ id / note_title_text_bottom равна сумме note_title и note_power во всех файлах макета (для всех размеров экрана).В противном случае, что-то не так с @ mipmap / note_title_text_bottom "для одной из плотностей. В любом случае, лучше использовать относительные размеры и масштабировать рисуемые объекты вместо использования нескольких макетов с абсолютными значениями, которые действительно сложно поддерживать и масштабировать.

0 голосов
/ 10 октября 2018

убедитесь, что вы разместили изображение срезов в том же dpi.

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

2- использование android: scaleType = "FIT_XY" для достижения этой цели.

https://developer.android.com/reference/android/widget/ImageView.ScaleType

...