2013-03-27 2 views
0

Я постараюсь быть точным как можно больше. Я написал приложение, сам полный код не имеет значенияРазличные поведения одного и того же приложения на одних и тех же устройствах

public void onWindowFocusChanged(boolean hasFocus){ 
    super.onWindowFocusChanged(hasFocus); 

    if(hasFocus){ 
     globalWidth = mainLayout.getWidth(); 
     refillData(); 
    } 
} 

он прекрасно работает на моем устройстве (SGS2 DarkyROM hd2.1 Android версии 4.0.3 также проверили его на системах, основанных на 2.3 версии для sgs2), другой sgs2 с PilotX2.1, также он работает на ASUS Transformer (android v4.2.1) и многих других устройствах с разными размерами экрана. Я должен сказать, что он имеет различный вид в зависимости от того, какое устройство он запускает (он строит основной макет динамически, поэтому его действительно заметно, если приложение работает правильно или нет).

Но на некоторых устройствах это странное поведение. Например, в HTC (htc sense 2.1), работающем под управлением Android версии 2.3.5, его каким-то образом в строке getWidth() возвращает половину или фактическую ширину экрана. Или версия sgs2 4.2.1 android также возвращает странный результат.

Я попытался найти в google и переполнение стека, чтобы узнать, есть ли какие-то конкретные системные различия, которые следует учитывать, которые оказывают такое большое влияние на приложение, но ничего. Я не использую какое-либо конкретное оборудование устройства, которое может быть реализовано по-разному разработчиком системы.

В чем проблема, о которой я не думал? Может быть, что разные ядра создают «проблемное» поведение для моего приложения? Я думал, что это могут быть разные ПЗУ, но я проверил хотя бы 6-8 разных ПЗУ и не имел проблем.

Если кто-нибудь знаком с этой темой или встретил нечто подобное, я был бы рад даже за ссылку на веб-страницу. Я действительно разочарован.

ответ

0

Может быть, вы можете исправить свои меры, используя View.makeMeasureSpec

mainLayout.measure(
     MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), 
     MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 

int height = mainLayout.getMeasuredHeight(); 
int width = mainLayout.getMeasuredWidth(); 
+1

Thnx, я проверю его завтра. – user1927829

+0

Это не сработало. это даже показало странное поведение. Помещая этот код 'mainLayout.measure ( MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED)); дает очень странные результаты. – user1927829

Смежные вопросы