Каждое тело предлагает что-то, но никто не пытается объяснить, почему это происходит.Я попытаюсь объяснить это сейчас.Конечно, это произойдет только тогда, когда вы пытаетесь настроить изображения в строке рейтинга.
Представьте, что у нас есть пользовательское изображение размером 72x72 пикселей, и это наш ресурс для XXXHDPI - (это 4x).
- То же изображение должно иметь копию внутри XXHDPI, XHDPI, HDPI, MDPI и LDPI.Я пока пропущу последний каталог ресурсов.
- Внутри разных каталогов это изображение должно быть следующим:
- для размера копии в формате XXHDPI должно быть 54x54 (это 3x)
- для изображения размера копии XHDPI должно быть 36x36 (это 2x)
- для изображения копии размера HDPI должно быть 27x27 (это 1,5x)
- для изображения изображения размера MDPI необходимобыть 18x18 (это 1x)
- Так что теперь в этом сценарии, если высота вашего Рейтинга выше, чем 18 dp , например, 30 dp, вы увидите этоПлохие артефакты изображения под каждым изображением звезды, ПОТОМУ ЧТО очевидно, что RatingBar пытается заполнить остальную часть его высоты чем-либо (ваше изображение - 18 dp, но высота бара - 30 dp), поэтому остальные 12 dp будут заполнены этими артефактами.
Вот почему, если вы установите фиксированную высоту строки рейтинга, все МОЖЕТ быть в порядке, но также НЕ МОЖЕТ быть в порядке.Все это зависит от вашего нестандартного размера изображения.
Я думаю, что есть одно решение, которое будет работать во всех возможных сценариях, а именно:
- Создание ресурса изображения для всех экранов устройств, которые вашиПриложение будет поддерживать XXXHDPI, XXHDPI или все, что вам нужно.
- Убедитесь, что если ваше (MDPI 1x) изображение имеет, например, высоту 20 пикселей, ваша высота RatingBar не будет больше 20 dp, и все будетбудьте в порядке.
ПРИМЕЧАНИЕ. Во всем этом разговоре мы говорим о dp (пикселях плотности), а не в px, потому что, если мы предоставим все эти ресурсы изображения в каждой отдельной папке res, у нас будет возможность работать с dpне с пикс.Я надеюсь, что последнее предложение понятно и имеет смысл.
РЕДАКТИРОВАТЬ: Другой возможный способ - оставить небольшой отступ (пустое пространство), возможно, 1px или 2px внизу вашего пользовательского изображения.В этом случае представление RatingBar НЕ будет отображать эти пиксели артефактов, поскольку они будут взяты из отступа вашего пользовательского изображения, который на самом деле является просто пустыми (прозрачными) пикселями.Я лично считаю, что это не лучший способ, потому что заполнение изображения создаст некоторое пространство (заполнение) между RatingBar и остальными представлениями внутри макета.В этом случае у вас не будет абсолютно полного контроля над пространством видов, поскольку некоторая небольшая часть была жестко запрограммирована внутри пользовательского изображения (эти 2 пикселя отступа).