2013-11-21 4 views
3

я добавил вид на мое приложение определяется следующим образом:Проверьте элемент помещается на экране

Ti.UI.createView({ 
    top: 0, 
    left: 0, 
    width: '50%' 
    height: '460dp', 
    backgroundColor: 'red' 
}); 

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

function getPixels(dp) { 
    return (dp + (Ti.Platform.displayCaps.dpi/160)); 
} 

alert(460); // 920 
alert(Ti.Platform.displayCaps.platformHeight); // 1136 

Что кажется прямо на симуляторе iphone. Однако при выполнении этого точно такой же код на мой андроид устройства я получаю результат:

ScreenHeight: 1200
высота обзора: 690

Который не кажется правильным, потому что вид с красным фоном принимает почти столько же места на симуляторе iphone, как на моем устройстве Android.

Есть ли способ получить согласованные результаты на всех устройствах (ios and android). Или есть какой-то другой способ решить мою проблему?

ответ

1

Если вы пытаетесь поддерживать все размеры, почему бы вам не установить высоту на значение%?

В ответ на ваш вопрос главное, что вам необходимо учесть, что Ti.Platform.displayCaps.platformHeight возвращает значения в платформенных единицах; поэтому пиксели на Android и не зависящие от плотности пиксели (dip) на iOS. Поскольку вы устанавливаете высоту своего просмотра с независимыми от плотности пикселями, вместо этого вы хотите преобразовать эти единицы платформы в независимые от плотности и независимые от платформы единицы.

Я обычно использую только measurement library provided от Titanium и Alloy.

var measurement = require('alloy/measurement'); 
var dpHeight = measurement.pxToDP(Ti.Platform.displayCaps.platformHeight); 
if(460 < dpHeight) { 
    alert('Fits'); 
} else { 
    alert("does not fit'); 
} 

Но на самом деле мне гораздо проще просто использовать относительные макеты с процентными значениями.

Другой способ выяснить, если вид находится в пределах (постфактум), чтобы просто добавить postlayout event listener,, когда это событие происходит это означает, что макет границы были вычислены в единицах системы и теперь подъезд:

view.addEventListener('postlayout', function(e) { 
    if(view.rect.height + view.rect.y > Ti.Platform.displayCaps.platformHeight) { 
     alert('Does not fit") 
    } 
}); 
1

чтобы получить постоянные результаты ширина и высота между платформами вы должны добавить

<property name="ti.ui.defaultunit" type="string">dip</property> 

к tiapp.xml и обеспечить размеры как простые числа:

Ti.UI.createView({ 
    top: 0, 
    left: 0, 
    width: 50, 
    height: 460, 
}); 
Смежные вопросы