UI 未在 Android 模拟器上完全填充
UI not completely populating on Android Emulator
所以,我正在开发这个小天气应用程序作为我 class 的一项任务。我们现在正在使用 Titanium 来完成我们的工作。问题是该应用程序无法正确加载到 android 模拟器中。它只会显示附加到 window.
的第一个视图
这是我的代码:
// the exported function that build the UI
exports.build = function(weather) {
// setting variables based on the actual device height and width
var deviceHeight = Ti.Platform.displayCaps.platformHeight;
var deviceWidth = Ti.Platform.displayCaps.platformWidth;
// the main window for the UI
var mainWindow = Ti.UI.createWindow({
backgroundColor: "#fff",
layout: "horizontal"
});
// the title view
var appTitleView = Ti.UI.createView({
top: 0,
height: 60,
backgroundColor: "#f5f5f5"
});
// the actual title for the app
var appTitle = Ti.UI.createLabel({
text: "Lightning Weather",
textAlign: "center",
font: {fontFamily: "Verdana", fontSize: "24", fontWeight: "Bold"},
width: deviceWidth,
height: 40,
top: 20
});
// the label for the refresh link
var reloadPageLink = Ti.UI.createLabel({
text: "Please tap to get most current weather data",
color: "orange",
textAlign: "center",
font: {fontFamily: "Verdana", fontSize: "18", fontWeight: "Bold"},
height: 60,
bottom: 0,
width: deviceWidth
});
// the scrollview for the actual content
// I went with this just incase there was a device that wouldn't be able to house everything on one screen
// this way the app is still able to be viewed in it's entirety
var windowScrollView = Ti.UI.createScrollView({
height: deviceHeight - appTitleView.height - reloadPageLink.height, // setting the height based on the two static aspects
layout: "horizontal",
width: deviceWidth,
contentWidth: deviceWidth,
showVerticalScrollIndicator: true,
top: 0
});
// the container for the current conditions
var currentConditionsBox = Ti.UI.createView({
width: deviceWidth,
layout: "horizontal",
top: 30,
height: Ti.UI.SIZE // setting the height of the container to the actual content inside of it
});
// the container that allows me to center the icon for the current conditions
var currentConditionsIconContainer = Ti.UI.createView({
width: deviceWidth,
height: Ti.UI.SIZE
});
// the current conditions icon
var currentConditionsIcon = Ti.UI.createImageView({
image: weather.currentIcon,
align: "center"
});
// the current temp
var currentTemp = Ti.UI.createLabel({
width: deviceWidth,
textAlign: "center",
font: {fontFamily: "Verdana", fontSize: "36", fontWeight: "Bold"},
text: weather.temperature + "\u00b0 F"
});
// the current location
var currentLocation = Ti.UI.createLabel({
width: deviceWidth,
textAlign: "center",
text: weather.location,
font: {fontFamily: "Verdana", fontSize: "24"}
});
// the label that titles the forecast
var forecastText = Ti.UI.createLabel({
text: "Forecast:",
textAlign: "center",
width: deviceWidth,
top: 100,
font: {fontFamily: "Verdana", fontSize: "24", fontWeight: "Bold"}
});
// the parent container for the forecast UI
var forecastBox = Ti.UI.createView({
top: 10,
width: deviceWidth,
layout: "horizontal",
height: Ti.UI.SIZE
});
// the next for containers are child containers to the forecastBox, this enables easy setup for a clean look
var dayZeroBox = Ti.UI.createView({
top: 0,
width: "25%"
});
var dayOneBox = Ti.UI.createView({
top: 0,
width: "25%"
});
var dayTwoBox = Ti.UI.createView({
top: 0,
width: "25%"
});
var dayThreeBox = Ti.UI.createView({
top: 0,
width: "25%"
});
// here are the contents for all of the child forecast containers
var dayZeroName = Ti.UI.createLabel({
text: "Today",
top: 10,
textAlign: "center"
});
var dayZeroIcon = Ti.UI.createImageView({
image: weather.day0Icon,
top: 30,
align: "center"
});
var dayZeroHiLo = Ti.UI.createLabel({
text: weather.high + "\u00b0 F / " + weather.low + "\u00b0 F",
top: 80,
textAlign: "center"
});
var dayOneName = Ti.UI.createLabel({
text: weather.day1,
top: 10,
textAlign: "center"
});
var dayOneIcon = Ti.UI.createImageView({
image: weather.day1Icon,
top: 30,
align: "center"
});
var dayOneHiLo = Ti.UI.createLabel({
text: weather.day1Hi + "\u00b0 F / " + weather.day1Lo + "\u00b0 F",
top: 80,
textAlign: "center"
});
var dayTwoName = Ti.UI.createLabel({
text: weather.day2,
top: 10,
textAlign: "center"
});
var dayTwoIcon = Ti.UI.createImageView({
image: weather.day2Icon,
top: 30,
align: "center"
});
var dayTwoHiLo = Ti.UI.createLabel({
text: weather.day2Hi + "\u00b0 F / " + weather.day2Lo + "\u00b0 F",
top: 80,
textAlign: "center"
});
var dayThreeName = Ti.UI.createLabel({
text: weather.day3,
top: 10,
textAlign: "center"
});
var dayThreeIcon = Ti.UI.createImageView({
image: weather.day3Icon,
top: 30,
align: "center"
});
var dayThreeHiLo = Ti.UI.createLabel({
text: weather.day3Hi + "\u00b0 F / " + weather.day3Lo + "\u00b0 F",
top: 80,
textAlign: "center"
});
// end child container contents
// the function that will refresh the page and pull a new location and weather information
var reloadPage = function() {
if (Ti.Network.online) {
var loc = require("loc");
loc.getLocation();
} else {
alert("You are not online.");
};
};
// populating the UI
reloadPageLink.addEventListener("click", reloadPage);
appTitleView.add(appTitle);
currentConditionsIconContainer.add(currentConditionsIcon);
currentConditionsBox.add(currentConditionsIconContainer, currentTemp, currentLocation);
dayZeroBox.add(dayZeroName, dayZeroIcon, dayZeroHiLo);
dayOneBox.add(dayOneName, dayOneIcon, dayOneHiLo);
dayTwoBox.add(dayTwoName, dayTwoIcon, dayTwoHiLo);
dayThreeBox.add(dayThreeName, dayThreeIcon, dayThreeHiLo);
forecastBox.add(dayZeroBox, dayOneBox, dayTwoBox, dayThreeBox);
windowScrollView.add(currentConditionsBox, forecastText, forecastBox);
mainWindow.add(appTitleView, windowScrollView, reloadPageLink);
mainWindow.open();
};
这是它在模拟器上的样子:
我做错了什么导致整个 UI 无法填充?
谢谢!
您的主要 window 布局是 horizontal
。
尝试将其更改为 'vertical'。
我注意到的第二件事是您试图同时向父视图添加多个视图。
根据 spec you have to add one view at a time.
所以将您的代码更改为如下内容:
mainWindow.add(appTitleView);
mainWindow.add(windowScrollView);
mainWindow.add(reloadPageLink);
所以,我正在开发这个小天气应用程序作为我 class 的一项任务。我们现在正在使用 Titanium 来完成我们的工作。问题是该应用程序无法正确加载到 android 模拟器中。它只会显示附加到 window.
的第一个视图这是我的代码:
// the exported function that build the UI
exports.build = function(weather) {
// setting variables based on the actual device height and width
var deviceHeight = Ti.Platform.displayCaps.platformHeight;
var deviceWidth = Ti.Platform.displayCaps.platformWidth;
// the main window for the UI
var mainWindow = Ti.UI.createWindow({
backgroundColor: "#fff",
layout: "horizontal"
});
// the title view
var appTitleView = Ti.UI.createView({
top: 0,
height: 60,
backgroundColor: "#f5f5f5"
});
// the actual title for the app
var appTitle = Ti.UI.createLabel({
text: "Lightning Weather",
textAlign: "center",
font: {fontFamily: "Verdana", fontSize: "24", fontWeight: "Bold"},
width: deviceWidth,
height: 40,
top: 20
});
// the label for the refresh link
var reloadPageLink = Ti.UI.createLabel({
text: "Please tap to get most current weather data",
color: "orange",
textAlign: "center",
font: {fontFamily: "Verdana", fontSize: "18", fontWeight: "Bold"},
height: 60,
bottom: 0,
width: deviceWidth
});
// the scrollview for the actual content
// I went with this just incase there was a device that wouldn't be able to house everything on one screen
// this way the app is still able to be viewed in it's entirety
var windowScrollView = Ti.UI.createScrollView({
height: deviceHeight - appTitleView.height - reloadPageLink.height, // setting the height based on the two static aspects
layout: "horizontal",
width: deviceWidth,
contentWidth: deviceWidth,
showVerticalScrollIndicator: true,
top: 0
});
// the container for the current conditions
var currentConditionsBox = Ti.UI.createView({
width: deviceWidth,
layout: "horizontal",
top: 30,
height: Ti.UI.SIZE // setting the height of the container to the actual content inside of it
});
// the container that allows me to center the icon for the current conditions
var currentConditionsIconContainer = Ti.UI.createView({
width: deviceWidth,
height: Ti.UI.SIZE
});
// the current conditions icon
var currentConditionsIcon = Ti.UI.createImageView({
image: weather.currentIcon,
align: "center"
});
// the current temp
var currentTemp = Ti.UI.createLabel({
width: deviceWidth,
textAlign: "center",
font: {fontFamily: "Verdana", fontSize: "36", fontWeight: "Bold"},
text: weather.temperature + "\u00b0 F"
});
// the current location
var currentLocation = Ti.UI.createLabel({
width: deviceWidth,
textAlign: "center",
text: weather.location,
font: {fontFamily: "Verdana", fontSize: "24"}
});
// the label that titles the forecast
var forecastText = Ti.UI.createLabel({
text: "Forecast:",
textAlign: "center",
width: deviceWidth,
top: 100,
font: {fontFamily: "Verdana", fontSize: "24", fontWeight: "Bold"}
});
// the parent container for the forecast UI
var forecastBox = Ti.UI.createView({
top: 10,
width: deviceWidth,
layout: "horizontal",
height: Ti.UI.SIZE
});
// the next for containers are child containers to the forecastBox, this enables easy setup for a clean look
var dayZeroBox = Ti.UI.createView({
top: 0,
width: "25%"
});
var dayOneBox = Ti.UI.createView({
top: 0,
width: "25%"
});
var dayTwoBox = Ti.UI.createView({
top: 0,
width: "25%"
});
var dayThreeBox = Ti.UI.createView({
top: 0,
width: "25%"
});
// here are the contents for all of the child forecast containers
var dayZeroName = Ti.UI.createLabel({
text: "Today",
top: 10,
textAlign: "center"
});
var dayZeroIcon = Ti.UI.createImageView({
image: weather.day0Icon,
top: 30,
align: "center"
});
var dayZeroHiLo = Ti.UI.createLabel({
text: weather.high + "\u00b0 F / " + weather.low + "\u00b0 F",
top: 80,
textAlign: "center"
});
var dayOneName = Ti.UI.createLabel({
text: weather.day1,
top: 10,
textAlign: "center"
});
var dayOneIcon = Ti.UI.createImageView({
image: weather.day1Icon,
top: 30,
align: "center"
});
var dayOneHiLo = Ti.UI.createLabel({
text: weather.day1Hi + "\u00b0 F / " + weather.day1Lo + "\u00b0 F",
top: 80,
textAlign: "center"
});
var dayTwoName = Ti.UI.createLabel({
text: weather.day2,
top: 10,
textAlign: "center"
});
var dayTwoIcon = Ti.UI.createImageView({
image: weather.day2Icon,
top: 30,
align: "center"
});
var dayTwoHiLo = Ti.UI.createLabel({
text: weather.day2Hi + "\u00b0 F / " + weather.day2Lo + "\u00b0 F",
top: 80,
textAlign: "center"
});
var dayThreeName = Ti.UI.createLabel({
text: weather.day3,
top: 10,
textAlign: "center"
});
var dayThreeIcon = Ti.UI.createImageView({
image: weather.day3Icon,
top: 30,
align: "center"
});
var dayThreeHiLo = Ti.UI.createLabel({
text: weather.day3Hi + "\u00b0 F / " + weather.day3Lo + "\u00b0 F",
top: 80,
textAlign: "center"
});
// end child container contents
// the function that will refresh the page and pull a new location and weather information
var reloadPage = function() {
if (Ti.Network.online) {
var loc = require("loc");
loc.getLocation();
} else {
alert("You are not online.");
};
};
// populating the UI
reloadPageLink.addEventListener("click", reloadPage);
appTitleView.add(appTitle);
currentConditionsIconContainer.add(currentConditionsIcon);
currentConditionsBox.add(currentConditionsIconContainer, currentTemp, currentLocation);
dayZeroBox.add(dayZeroName, dayZeroIcon, dayZeroHiLo);
dayOneBox.add(dayOneName, dayOneIcon, dayOneHiLo);
dayTwoBox.add(dayTwoName, dayTwoIcon, dayTwoHiLo);
dayThreeBox.add(dayThreeName, dayThreeIcon, dayThreeHiLo);
forecastBox.add(dayZeroBox, dayOneBox, dayTwoBox, dayThreeBox);
windowScrollView.add(currentConditionsBox, forecastText, forecastBox);
mainWindow.add(appTitleView, windowScrollView, reloadPageLink);
mainWindow.open();
};
这是它在模拟器上的样子:
我做错了什么导致整个 UI 无法填充?
谢谢!
您的主要 window 布局是 horizontal
。
尝试将其更改为 'vertical'。
我注意到的第二件事是您试图同时向父视图添加多个视图。 根据 spec you have to add one view at a time.
所以将您的代码更改为如下内容:
mainWindow.add(appTitleView);
mainWindow.add(windowScrollView);
mainWindow.add(reloadPageLink);