Титан обрабатывает различные решения - PullRequest
9 голосов
/ 07 сентября 2011

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

Ответы [ 3 ]

7 голосов
/ 28 октября 2011

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

//=============================================================================
// inch
//
// compute approximate number of pixels for the specified physical on-screen
// size based on the density reported by the OS
//=============================================================================
function inch(size)
{
    // default to 160 dpi if unavailable
    var height = size * 160.0; 

    try
    { 
        // compute header height based on screen density ... target .25" height
        height = size * Ti.Platform.displayCaps.dpi; 
    }
    catch(e) { warn("Error accessing display caps for screen density calculation: " + e); }

    return height;
}

Так что, если вы хотите, чтобы на экране было что-то высотой 3/4 дюйма ...

Ti.UI.createThing({ height: inch(.75)});

... или если вы хотите масштабировать вещи по размеру точки, можно сделать несколько констант ...

const g_12pt = inch(12/72); //0.166667
const g_10pt = inch(10/72); //0.138889
const g_8pt = inch(8/72);   //0.111111
const g_6pt = inch(6/72);   //0.083333
...
...font:{fontSize: g_10pt, fontWeight:"bold"},...

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

//=============================================================================
// screenWidth - return screen width in inches
//=============================================================================
function screenWidth()
{
    return Titanium.Platform.displayCaps.platformWidth / Titanium.Platform.displayCaps.dpi;
}

//=============================================================================
// screenHeight - return screen height in inches
//=============================================================================
function screenHeight()
{
    return Titanium.Platform.displayCaps.platformHeight / Titanium.Platform.displayCaps.dpi;
}

Вы можете продолжать и продолжать оттуда ... но это действительно помогло нам понять, как мы размещали наши экраны на разных плотностях и платформах. Функция inch имеет обработку исключений только потому, что мы используем ее в начале приложения, а иногда платформа Ti.Platform все еще не определена. К тому времени, когда мы выкладываем наши отчеты, Ti.Platform доступна, поэтому функции экрана не имеют обработки исключений. Если вам нужно сделать запрос раньше, вам также может понадобиться обработка исключений.

Надеюсь, это поможет!

5 голосов
/ 08 сентября 2011

Вы захотите изменить свой tiapp.xml - в разделе Android вы добавите запись манифеста, например, так:

<android xmlns:android="http://schemas.android.com/apk/res/android">
    <manifest>
        <supports-screens android:anyDensity="false"/>
    </manifest>
</android>

Это сделает приложение по умолчанию тем же стилем, что и старые версии Titanium, где оно в основном масштабируется в соответствии с используемым устройством. Более подробную информацию об изменении можно найти здесь: http://developer.appcelerator.com/blog/2011/06/new-defaults-for-android-layouts-in-1-7.html

1 голос
/ 03 февраля 2015

ну, насколько я гуглил, решение:

1. Определите конкретное разрешение экрана:

// app/alloy.js
Alloy.Globals.isIos7Plus = (OS_IOS && parseInt(Ti.Platform.version.split(".")[0]) >= 7);
Alloy.Globals.iPhoneTall = (OS_IOS && Ti.Platform.osname == "iphone" && Ti.Platform.displayCaps.platformHeight == 568); 

2. Запишите стиль запроса tss:

// Query styles
"#info[if=Alloy.Globals.isIos7Plus]" : {
    font : { textStyle : Ti.UI.TEXT_STYLE_FOOTNOTE }
},
"#title[if=Alloy.Globals.isIos7Plus]" : {
    top: '25dp', // compensate for the status bar on iOS 7
    font : { textStyle : Ti.UI.TEXT_STYLE_HEADLINE }
},
"#content[if=Alloy.Globals.isIos7Plus]" : {
    font : { textStyle : Ti.UI.TEXT_STYLE_CAPTION1 }
},
"ScrollView[if=Alloy.Globals.iPhoneTall]" : {
    height : '500dp'
}

см .: http://docs.appcelerator.com/titanium/3.0/#!/guide/Alloy_Styles_and_Themes-section-35621526_AlloyStylesandThemes-Platform-SpecificStyles

...