Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Qt Quick ×é¼þÓë¶ÔÏó¶¯Ì¬´´½¨Ïê½â£¨¶þ£©
 
×÷Õß WPJYµÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-08-12
  4593  次浏览      27
 

ÀûÓà Loader ¶¯Ì¬´´½¨ÓëÏú»Ù×é¼þ

ÏÖÔÚÎÒÃÇ¿´¿´ÈçºÎ¶¯Ì¬´´½¨¡¢Ïú»Ù×é¼þ¡£ÏÂÃæÊÇ dynamic_component.qml £º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
width: 320;
height: 240;
color: "#EEEEEE";
id: rootItem;
property var colorPickerShow : false;

Text {
id: coloredText;
anchors.horizontalCenter: parent.horizontalCenter;
anchors.top: parent.top;
anchors.topMargin: 4;
text: "Hello World!";
font.pixelSize: 32;
}

Button {
id: ctrlButton;
text: "Show";
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;

onClicked:{
if(rootItem.colorPickerShow){
redLoader.source = "";
blueLoader.source = "";
rootItem.colorPickerShow = false;
ctrlButton.text = "Show";
}else{
redLoader.source = "ColorPicker.qml";
redLoader.item.colorPicked.connect(onPickedRed);
blueLoader.source = "ColorPicker.qml";
blueLoader.item.colorPicked.connect(onPickedBlue);
redLoader.focus = true;
rootItem.colorPickerShow = true;
ctrlButton.text = "Hide";
}
}
}

Loader{
id: redLoader;
anchors.left: ctrlButton.right;
anchors.leftMargin: 4;
anchors.bottom: ctrlButton.bottom;

KeyNavigation.right: blueLoader;
KeyNavigation.tab: blueLoader;

onLoaded:{
if(item != null){
item.color = "red";
item.focus = true;
}
}

onFocusChanged:{
if(item != null){
item.focus = focus;
}
}
}

Loader{
id: blueLoader;
anchors.left: redLoader.right;
anchors.leftMargin: 4;
anchors.bottom: redLoader.bottom;
KeyNavigation.left: redLoader;
KeyNavigation.tab: redLoader;

onLoaded:{
if(item != null){
item.color = "blue";
}
}

onFocusChanged:{
if(item != null){
item.focus = focus;
}
}
}

function onPickedBlue(clr){
coloredText.color = clr;
if(!blueLoader.focus){
blueLoader.focus = true;
redLoader.focus = false;
}
}

function onPickedRed(clr){
coloredText.color = clr;
if(!redLoader.focus){
redLoader.focus = true;
blueLoader.focus = false;
}
}
}

Õâ´ÎÎÒÃÇÔÚ½çÃæÉÏ·ÅÒ»¸ö°´Å¥£¬Í¨¹ý°´Å¥À´¿ØÖÆÑÕɫѡÔñ×é¼þµÄ´´½¨ÓëÏú»Ù¡£Æô¶¯Ó¦ÓÃʱûÓд´½¨ÑÕɫѡÔñ×é¼þ£¬Èçͼ 4 Ëùʾ£º

ͼ 4 ¶¯Ì¬´´½¨×é¼þ³õʼЧ¹û

µ±Äãµã»÷ "Show" °´¼ü£¬´úÂëͨ¹ýÉèÖà redLoader ºÍ blueLoader µÄ source À´´´½¨ÑÕɫѡÔñ×é¼þ£¬Á¬½ÓÑÕÉ«×é¼þµÄ colorPicked Ðźŵ½ÏàÓ¦µÄ·½·¨£¬Í¬Ê±½«¸Ä±ä°´Å¥ÎÄ×Ö£¬Ò²¸Ä±ä rootItem ά»¤µÄÑÕÉ«×é¼þÊÇ·ñÏÔʾµÄ±ê־λÒÔ±ãÏ´ÎÔÙµã»÷°´Å¥¿ÉÒÔÕý³£ÏÔʾ¡£Í¼ 5 ÊÇÑÕɫѡÔñ×é¼þÏÔʾºóµÄЧ¹ûͼ£º

ͼ 5 ÑÕÉ«×é¼þ´´½¨ºóµÄЧ¹û

ʹÓà Loader ¿ØÖÆ×é¼þµÄ¶¯Ì¬´´½¨ÓëÏú»Ù£¬Ö»ÊÇ Qt Quick ÌṩµÄ¶¯Ì¬Î¬»¤¶ÔÏóµÄÁ½ÖÖ·½Ê½ÖеÄÒ»ÖÖ¡£»¹ÓÐÒ»ÖÖ£¬ÊÇÔÚ JavaScript Öж¯Ì¬´´½¨ QML ¶ÔÏó¡£

ÔÚ JavaScript Öж¯Ì¬´´½¨ QML ¶ÔÏó

ML Ö§³ÖÔÚ JavaScript Öж¯Ì¬´´½¨¶ÔÏó¡£Õâ¶ÔÓÚÑÓ³Ù¶ÔÏóµÄ´´½¨¡¢Ëõ¶ÌÓ¦ÓÃµÄÆô¶¯Ê±¼ä¶¼ÊÇÓаïÖúµÄ¡£Í¬Ê±ÕâÖÖ»úÖÆÒ²Ê¹µÃÎÒÃÇ¿ÉÒÔ¸ù¾ÝÓû§µÄÊäÈë»òÕßijЩʼþÀ´¶¯Ì¬µÄ½«¿É¼ûÔªËØÌí¼Óµ½Ó¦Óó¡¾°ÖС£

ÔÚ JavaScript ÖУ¬ÓÐÁ½ÖÖ·½Ê½¿ÉÒÔ¶¯Ì¬µØ´´½¨¶ÔÏó£º

ʹÓà Qt.createComponent() ¶¯Ì¬µØ´´½¨Ò»¸ö×é¼þ¶ÔÏó£¬È»ºóʹÓà Component µÄ createObject() ·½·¨´´½¨¶ÔÏó

ʹÓà Qt.createQmlObject() ´ÓÒ»¸ö QML ×Ö·û´®Ö±½Ó´´½¨Ò»¸ö¶ÔÏó

Èç¹ûÄãÔÚÒ»¸ö qml ÎļþÖж¨ÒåÁËÒ»¸ö×é¼þ£¨±ÈÈçÎÒÃÇµÄ ColorPicker £©£¬¶øÄãÏ붯̬µØ´´½¨ËüµÄʵÀý£¬Ê¹Óà Qt.createComponent() ÊDZȽϺõķ½Ê½£»¶øÈç¹ûÄãµÄ QML ¶ÔÏó±¾ÉíÊÇÔÚÓ¦ÓÃÔËÐÐʱ²úÉúµÄ£¬ÄÇ Qt.createQmlObject() ¿ÉÄÜÊDZȽϺõÄÑ¡Ôñ¡£

´Ó×é¼þÎļþ¶¯Ì¬´´½¨ Component

Qt ¶ÔÏóµÄ createComponent() ·½·¨¿ÉÒÔ¸ù¾Ý QML Îļþ¶¯Ì¬µÄ´´½¨Ò»¸ö×é¼þ¡£Ò»µ©ÄãÓµÓÐÁË×é¼þ¶ÔÏ󣬾ͿÉÒÔµ÷ÓÃËüµÄ createObject() ·½·¨´´½¨Ò»¸ö×é¼þµÄʵÀý¡£ÏÂÃæÊÇÎÒÃÇеÄʾÀý£¬ qml ÎļþÊÇ qt_create_component.qml £º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
id: rootItem;
width: 360;
height: 300;
property var count: 0;
property Component component: null;

Text {
id: coloredText;
text: "Hello World!";
anchors.centerIn: parent;
font.pixelSize: 24;
}

function changeTextColor(clr){
coloredText.color = clr;
}

function createColorPicker(clr){
if(rootItem.component == null){
rootItem.component = Qt.createComponent("ColorPicker.qml");
}
var colorPicker;
if(rootItem.component.status == Component.Ready) {
colorPicker = rootItem.component.createObject(rootItem, {"color" : clr, "x" : rootItem.count *55, "y" : 10});
colorPicker.colorPicked.connect(rootItem.changeTextColor);
}

rootItem.count++;
}

Button {
id: add;
text: "add";
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
onClicked: {
createColorPicker(Qt.rgba(Math.random(), Math.random(), Math.random(), 1));
}
}
}

ͼ 6 ÊÇʾÀýÆô¶¯ºóµÄ½çÃæ£º

ͼ 6 qt create component ³õʼЧ¹û

ͼ 7 ÊÇÎÒµã»÷ÁË 6 ´Î "add" °´Å¥ºóµÄЧ¹û£º

ͼ 7 ¶¯Ì¬´´½¨ÁËÑÕɫѡÔñ×é¼þ

ºÃÀ²£¬ÏÖÔÚÈÃÎÒÃÇÀ´¿´¿´´úÂë¡£

ÎÒÔÚ qt_create_component.qml Öж¨ÒåÁË createColorPicker() º¯Êý£¬¸Ãº¯ÊýµÄ²ÎÊýÊÇÑÕɫֵ£¬Ëü¸ù¾ÝÑÕɫֵÀ´´´½¨Ò»¸öÑÕɫѡÔñ×é¼þʵÀý¡£Ê×ÏÈËüÅÐ¶Ï rootItem µÄ component ÊôÐÔÈç¹ûΪ null £¬¾Íµ÷Óà Qt.createComponent() ´´½¨Ò»¸ö ColorPicker ×é¼þ£¬È»ºóµ÷Óà Component.createObject() ´´½¨Ò»¸öÑÕɫѡÔñ×é¼þʵÀý¡£ createObject() ·½·¨ÓÐÁ½¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊýÓÃÀ´Ö¸¶¨´´½¨³öÀ´µÄ item µÄ parent £¬µÚ¶þ¸ö²ÎÊýÓÃÀ´´«µÝ³õʼ»¯²ÎÊý¸ø´ý´´½¨µÄ item £¬ÕâЩ²ÎÊýÒÔ key - value µÄÐÎʽ±£´æÔÚÒ»¸ö¶ÔÏóÖС£ÎÒÔÚ´´½¨ÑÕÉ«×é¼þʵÀýʱ£¬´«µÝÑÕÉ«¡¢ x ¡¢ y Èý¸öÊôÐÔ¸ø´ý´´½¨µÄ item £¬ÓÚÊÇÄã¿´µ½ÁË£¬ÄÇЩɫ¿é¶¼ÔÚ½çÃæ¶¥²¿¡£´´½¨ÁËÑÕɫѡÔñ×é¼þʵÀý£¬ÎÒµ÷Óà colorPicked ÐÅºÅµÄ connect() ·½·¨£¬Á¬½Ó rootItem µÄ changeTextColor ·½·¨£¬ÒÔ±ãÓû§µã»÷É«¿éʱ¸Ä±ä "Hello World!" Îı¾µÄÑÕÉ«¡£

ÔÙÀ´¿´ "add" °´Å¥£¬ËüµÄ onClicked ÐźŴ¦ÀíÆ÷£¬µ÷Óà Math ¶ÔÏóµÄËæ»úº¯Êý random() ºÍ Qt.rgba() £¬Ëæ»úÉú³ÉÒ»¸ö Color ¶ÔÏ󣬴«µÝ¸ø createColorPicker() ·½·¨À´´´½¨Ö¸¶¨ÑÕÉ«µÄÑÕɫѡÔñ×é¼þʵÀý¡£

Ìáһϣ¬¶ÔÓÚǶÈëÔÚ qml ÎĵµÄÚ¶¨ÒåµÄ Component £¬ÒòΪ Component ¶ÔÏóÊÇÏֳɵģ¬¿ÉÒÔÂÔÈ¥ Qt.createComponent() µ÷Óã¬Ö±½ÓʹÓà createObject() ·½·¨´´½¨×é¼þʵÀý¡£

´úÂë¾ÍÕâô¼òµ¥£¬½â˵µ½´ËΪֹ¡£ÏÖÔÚÈÃÎÒÃÇ¿´¿´ÔõôʹÓà Qt.createQmlObject() À´´´½¨¶ÔÏó¡£

´Ó QML ×Ö·û´®´´½¨¶ÔÏó

Èç¹ûÄãµÄÈí¼þ£¬ÐèÒªÔÚÔËÐйý³ÌÖУ¬¸ù¾ÝÓ¦ÓõÄ״̬ÊÊʱµÄÉú³ÉÓÃÓÚÃèÊö¶ÔÏóµÄ QML ×Ö·û´®£¬½ø¶ø¸ù¾ÝÕâ¸ö QML ×Ö·û´®´´½¨¶ÔÏó£¬ÄÇô¿ÉÒÔʹÓÃÏñÏÂÃæÕâÑù£º

var newObject = Qt.createQmlObject('import QtQuick 2.0; Rectangle {color: "red"; width: 20; height: 20}',
parentItem, "dynamicSnippet1");

createQmlObject µÄµÚÒ»¸ö²ÎÊýÊÇÒª´´½¨¶ÔÏóµÄ QML ×Ö·û´®£¬¾ÍÏñÒ»¸ö QML ÎĵµÒ»Ñù£¬ÄãÐèÒªµ¼ÈëÄãÓõ½µÄËùÓÐÀàÐͺÍÄ£¿é£»µÚ¶þ¸ö²ÎÊýÓÃÓÚÖ¸¶¨Òª´´½¨µÄ¶ÔÏóµÄ¸¸¶ÔÏó£»µÚÈý¸ö²ÎÊý£¬ÓÃÓÚ¸øÐ´´½¨µÄ¶ÔÏó¹ØÁªÒ»¸öÎļþ·¾¶£¬Ö÷ÒªÓÃÓÚ±¨¸æ´íÎó¡£

¶ÔÓÚ¶¯Ì¬´´½¨µÄ¶ÔÏ󣬸ÃÈçºÎÏú»ÙÄØ£¿

Ïú»Ù¶¯Ì¬´´½¨µÄ¶ÔÏó

ÓÐЩÈí¼þ£¬ÔÚ²»ÐèÒªÒ»¸ö¶¯Ì¬´´½¨µÄ QML ¶ÔÏóʱ£¬½ö½öÊǰÑËüµÄ visible ÊôÐÔÉèÖÃΪ false »òÕß°Ñ opactity ÊôÐÔÉèÖÃΪ 0 £¬¶ø²»ÊÇɾ³ýÕâ¸ö¶ÔÏó¡£Èç¹û¶¯Ì¬´´½¨µÄ¶ÔÏóºÜ¶à£¬ÎÞÓõĶÔÏó¶¼Õâô´¦Àí¶ø²»Ö±½Óɾ³ý£¬ÄÇ»á¸øÈí¼þ´øÀ´±È½Ï´óµÄÐÔÄÜÎÊÌ⣬±ÈÈçÄÚ´æÕ¼ÓÃÔö¶à£¬ÔËÐÐËٶȱäÂýµÈµÈ¡£ËùÒÔÄØ£¬¶¯Ì¬´´½¨µÄ¶ÔÏ󣬲»ÔÙʹÓÃʱ£¬×îºÃ°ÑËüɾ³ýµô¡£

ÎÒÃÇÕâÀï˵µÄ¶¯Ì¬´´½¨µÄ¶ÔÏó£¬ÌØÖ¸Ê¹Óà Qt.createComponent() »ò Qt.createQmlObject() ·½·¨´´½¨µÄ¶ÔÏó£¬ Ê¹Óà Loader ´´½¨µÄ¶ÔÏó£¬Ó¦µ±Í¨¹ý½« source ÉèÖÃΪ¿Õ´®»ò½« sourceComponent ÉèÖÃΪ undefined ´¥·¢ Loader Ïú»ÙËüÃÇ¡£

Ҫɾ³ýÒ»¸ö¶ÔÏ󣬿ÉÒÔµ÷ÓÃÆä destroy() ·½·¨¡£ destroy() ·½·¨ÓÐÒ»¸ö¿ÉÑ¡²ÎÊý£¬Ö¸¶¨ÑÓ³Ù¶àÉÙºÁÃëÔÙɾ³ýÕâ¸ö¶ÔÏ󣬯äĬÈÏֵΪ 0 ¡£ destroy() ·½·¨Óеã¶ùÏñ Qt C++ ÖÐ QObject µÄ deleteLater() ·½·¨£¬¼´±ãÄãÉ趨ÑÓ³ÙΪ 0 È¥µ÷ÓÃËü£¬¶ÔÏóÒ²²¢²»»áÁ¢¼´É¾³ý£¬QML ÒýÇæ»áÔÚµ±Ç°´úÂë¿éÖ´ÐнáÊøºóµÄij¸öºÏÊʵÄʱ¿Ìɾ³ýËüÃÇ¡£ËùÒÔÄØ£¬¼´±ãÄãÔÚÒ»¸ö¶ÔÏóÄÚ²¿µ÷Óà destroy() ·½·¨Ò²Êǰ²È«µÄ¡£

ÏÖÔÚÈÃÎÒÎÒÃÇÔÙÀ´Ò»¸öʵÀý£¬¿´¿´ÈçºÎÏú»Ù¶ÔÏó¡£Ð嵀 qml ÎļþÃüÃûΪ delete_dynamic_object.qml £¬´Ó qt_create_component.qml ¿½±´¶øÀ´£¬×÷ÁËÒ»µãµãÐ޸ġ£ÏÈ¿´Ï£º

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
id: rootItem;
width: 360;
height: 300;
property var count: 0;
property Component component: null;

Text {
id: coloredText;
text: "Hello World!";
anchors.centerIn: parent;
font.pixelSize: 24;
}

function changeTextColor(clr){
coloredText.color = clr;
}

function createColorPicker(clr){
if(rootItem.component == null){
rootItem.component = Qt.createComponent("ColorPicker.qml");
}
var colorPicker;
if(rootItem.component.status == Component.Ready) {
colorPicker = rootItem.component.createObject(rootItem, {"color" : clr, "x" : rootItem.count *55, "y" : 10});
colorPicker.colorPicked.connect(rootItem.changeTextColor);
//[1] add 3 lines to delete some obejcts
if(rootItem.count % 2 == 1) {
colorPicker.destroy(1000);
}
}

rootItem.count++;
}

Button {
id: add;
text: "add";
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
onClicked: {
createColorPicker(Qt.rgba(Math.random(), Math.random(), Math.random(), 1));
}
}
}

Ð޸ĵIJ¿·ÖÎÒÓÃ×¢Êͱê×¢³öÀ´ÁË£ºÌí¼ÓÁËÈýÐдúÂ룬д´½¨µÄÑÕɫѡÔñ×é¼þʵÀý£¬¸ôÒ»¸öɾһ¸ö£¬ destroy(1000) µ÷ÓÃָʾ¶ÔÏóÔÚ 1 Ãëºóɾ³ý¡£

ͼ 8 ÊÇÔËÐкóµÄЧ¹ûͼ£º

ͼ 8 ɾ³ý¶¯Ì¬´´½¨µÄ¶ÔÏó

ÎÒ»¹ÖÆ×÷ÁËÒ»¸öÑÝʾɾ³ý¶¯Ì¬´´½¨µÄ¶ÔÏóµÄʾÀý£¬ qml ÎļþÊÇ delete_dynamic_object2.qml £¬ÎҰѵã»÷ "add" °´Å¥´´½¨µÄ¶ÔÏó±£´æÔÚÒ»¸öÊý×éÖУ¬µ±Äãµã»÷ "del" °´Å¥Ê±£¬É¾³ý×îºóÌí¼ÓµÄÄǸöÑÕɫѡÔñ×é¼þʵÀý¡£ÏÂÃæÊÇ´úÂ룺

import QtQuick 2.0
import QtQuick.Controls 1.1
Rectangle {
id: rootItem;
width: 360;
height: 300;
property var count: 0;
property Component component: null;
property var dynamicObjects: new Array();

Text {
id: coloredText;
text: "Hello World!";
anchors.centerIn: parent;
font.pixelSize: 24;
}

function changeTextColor(clr){
coloredText.color = clr;
}

function createColorPicker(clr){
if(rootItem.component == null){
rootItem.component = Qt.createComponent("ColorPicker.qml");
}
var colorPicker;
if(rootItem.component.status == Component.Ready) {
colorPicker = rootItem.component.createObject(rootItem, {"color" : clr, "x" : rootItem.dynamicObjects.length *55, "y" : 10});
colorPicker.colorPicked.connect(rootItem.changeTextColor);
rootItem.dynamicObjects[rootItem.dynamicObjects.length] = colorPicker;
console.log("add, rootItem.dynamicObject.length = ", rootItem.dynamicObjects.length);
}
}

Button {
id: add;
text: "add";
anchors.left: parent.left;
anchors.leftMargin: 4;
anchors.bottom: parent.bottom;
anchors.bottomMargin: 4;
onClicked: {
createColorPicker(Qt.rgba(Math.random(), Math.random(), Math.random(), 1));
}
}
Button {
id: del;
text: "del";
anchors.left: add.right;
anchors.leftMargin: 4;
anchors.bottom: add.bottom;
onClicked: {
console.log("rootItem.dynamicObject.length = ", rootItem.dynamicObjects.length);
if(rootItem.dynamicObjects.length > 0){
var deleted = rootItem.dynamicObjects.splice(-1, 1);
deleted[0].destroy();
}
}
}
}

Äã¿ÉÒÔ×Ô¼ºÊ¹Óà qmlscene ÔËÐÐ delete_dynamic_object2.qml ¿´¿´Ð§¹û¡£

   
4593 ´Îä¯ÀÀ       27
 
Ïà¹ØÎÄÕÂ

ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖÓë̽ÌÖ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
 
Ïà¹ØÎĵµ

Android_UI¹Ù·½Éè¼Æ½Ì³Ì
ÊÖ»ú¿ª·¢Æ½Ì¨½éÉÜ
androidÅÄÕÕ¼°ÉÏ´«¹¦ÄÜ
Android½²ÒåÖÇÄÜÊÖ»ú¿ª·¢
Ïà¹Ø¿Î³Ì

Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
Androidϵͳ¿ª·¢
AndroidÓ¦Óÿª·¢
ÊÖ»úÈí¼þ²âÊÔ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

androidÈË»ú½çÃæÖ¸ÄÏ
AndroidÊÖ»ú¿ª·¢£¨Ò»£©
AndroidÊÖ»ú¿ª·¢£¨¶þ£©
AndroidÊÖ»ú¿ª·¢£¨Èý£©
AndroidÊÖ»ú¿ª·¢£¨ËÄ£©
iPhoneÏûÏ¢ÍÆËÍ»úÖÆÊµÏÖ̽ÌÖ
ÊÖ»úÈí¼þ²âÊÔÓÃÀýÉè¼ÆÊµ¼ù
ÊÖ»ú¿Í»§¶ËUI²âÊÔ·ÖÎö
ÊÖ»úÈí¼þ×Ô¶¯»¯²âÊÔÑо¿±¨¸æ


Android¸ß¼¶Òƶ¯Ó¦ÓóÌÐò
AndroidÓ¦Óÿª·¢
Androidϵͳ¿ª·¢
ÊÖ»úÈí¼þ²âÊÔ
ǶÈëʽÈí¼þ²âÊÔ
AndroidÈí¡¢Ó²¡¢ÔÆÕûºÏ


ÁìÏÈIT¹«Ë¾ android¿ª·¢Æ½Ì¨×î¼Ñʵ¼ù
±±¾© Android¿ª·¢¼¼Êõ½ø½×
ijÐÂÄÜÔ´ÁìÓòÆóÒµ Android¿ª·¢¼¼Êõ
ijº½Ì칫˾ Android¡¢IOSÓ¦ÓÃÈí¼þ¿ª·¢
°¢¶û¿¨ÌØ LinuxÄÚºËÇý¶¯
°¬Ä¬Éú ǶÈëʽÈí¼þ¼Ü¹¹Éè¼Æ
Î÷ÃÅ×Ó Ç¶Èëʽ¼Ü¹¹Éè¼Æ