Неправильная папка ресурсов выбрана системой Android

У меня были проблемы с моим приложением на 7-дюймовом устройстве. В целях отладки я добавил всплывающее сообщение, которое отображается после загрузки приложения, чтобы сообщить мне, какую папку ресурсов использует приложение, т.е. какие квалификаторы. У меня есть файлы strings.xml в каждой из следующих папок ресурсов:

значения

значения-нормальные

значения-большие

значения-xlarge

значения-sw600dp

значения-sw720dp

Содержимое строки, используемой всплывающим сообщением, зависит от папки, в которой находится строка. У меня также есть шесть папок макетов с теми же квалификаторами, что и выше, и у меня есть действительные XML-файлы макетов во всех шести папках макетов. Мое приложение отлично работает на «обычных» экранах и 10-дюймовых экранах планшетов.

Проблемное 7-дюймовое устройство (моего приятеля) представляет собой дешевый «Аудиосоник» под управлением Android 4.1.1. Видимо разрешение 800х480, а физическая наименьшая ширина экрана 86мм, или 3,4 дюйма. Это означает 142 dpi.

Учитывая уравнение

dp = (пиксели x 160) / dpi

Наименьшая ширина должна быть 541dp.

А теперь самая сумасшедшая часть, и мой вопрос... с какой стати ресурсы sw720dp (макет и строки) используются моим приложением на этом 7-дюймовом устройстве?!


person Rob K    schedule 29.09.2013    source источник


Ответы (1)


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

Как программно получить размер экрана в Android

person fasteque    schedule 29.09.2013
comment
Это устройство имеет Android 4.1.1, поэтому 4 устаревших «сегмента размера экрана» не должны иметь значения, учитывая, что я предоставляю ресурсы sw600dp. - person Rob K; 30.09.2013
comment
Что еще более важно, я не могу понять, почему ресурсы sw720dp КОГДА-ЛИБО будут выбраны на 7-дюймовом экране. Я понимаю, почему ресурсы sw600dp могут не использоваться, но, конечно же, ресурсы sw720dp никогда не будут лучше соответствовать любому из устаревших сегментов, которые я также предоставил? - person Rob K; 30.09.2013
comment
Вы пытались получить эту информацию программно? - person fasteque; 30.09.2013
comment
У меня еще не было возможности попробовать это, но я буду. К сожалению, у меня нет прямого доступа к планшету моего приятеля, я могу только отправлять ему файлы apk по электронной почте и ждать его отзывов. Возвращаясь к тому, что вы сказали ранее… вы имеете в виду, что производители могут контролировать устаревшие сегменты размеров экрана, в которые попадают их устройства? Я полагаю, что должен быть какой-то момент, когда производитель несет ответственность за указание некоторых «жестко запрограммированных» свойств экрана. - person Rob K; 30.09.2013
comment
Я думаю, что это все еще отдельная проблема от того, что я испытываю. Как я уже сказал, рассматриваемое устройство существенно уже 720dp, да и чуть уже 600dp тоже. Конечно, производители не могут (или не должны) изменить что-либо, что заставит устройство вести себя так, как будто оно имеет другую ширину dp? Если это так, то это совершенно нелепо и делает поддержку всех размеров экрана Android пустой тратой времени. - person Rob K; 30.09.2013
comment
Я согласен, это то, что я узнал, когда мне пришлось иметь дело с первым Samsung Galaxy Tab 7 (situee.blogspot.it/2011/11/). Во всяком случае, это то, что случается не так уж часто. - person fasteque; 30.09.2013
comment
У кого-нибудь еще есть предложения? Я внимательно изучил ссылки, предоставленные fasteque, но все они относятся к устаревшим ведрам размера экрана. Моя проблема связана с квалификаторами swXXXdp. Учитывая, что у устройства 7 дюймовый экран и только 541dp наименьшая ширина (согласно уравнению для расчета dp), но ресурсы sw720dp все еще используются, значит ли это, что производитель сделал что-то глупое, что мешает поддержке размера экрана Android от работы как следует на конкретном устройстве? - person Rob K; 02.10.2013
comment
Кроме того, если я даже не могу полагаться на встроенную поддержку экрана «наименьшей ширины» на проблемном 7-дюймовом устройстве, есть ли способ решить эту проблему? Пока что моя единственная идея состоит в том, чтобы программно создавать/раздувать макеты и определять их размеры в коде java, а не в xml, но это было бы значительным изменением в приложении. - person Rob K; 02.10.2013