Hbuilder app 整理资料

mui.ajax('http://server-name/login.php',{
data:{
username:'username',
password:'password'
},
dataType:'json',//服务器返回json格式数据
type:'post',//HTTP请求类型
timeout:10000,//超时时间设置为10秒;
success:function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},
error:function(xhr,type,errorThrown){
//异常处理;
console.log(type);
}
});




mui.post('http://server-name/login.php',{
username:'username',
password:'password'
},function(data){
//服务器返回响应,根据响应结果,分析是否登录成功;
...
},'json'
);


mui.get('http://server-name/list.php',{category:'news'},function(data){
//获得服务器响应
...
},'json'
);




mui.post,mui.get不处理timeout和异常(若需处理异常及超时,请使用mui.ajax()方法)




mui.getJSON('http://server-name/list.php',{category:'news'},function(data){
//获得服务器响应
...
}
);




-------------------------------------------------




-------------------------------------------------
手势事件
-------------------------------------------------


分类 参数 描述
点击 tap 单击屏幕
doubletap 双击屏幕
长按 longtap 长按屏幕
hold 按住屏幕
release 离开屏幕
滑动 swipeleft 向左滑动
swiperight 向右滑动
swipeup 向上滑动
swipedown 向下滑动
拖动 dragstart 开始拖动
drag 拖动中
dragend 拖动结束






mui.init({
  gestureConfig:{
   tap: true, //默认为true
   doubletap: true, //默认为false
   longtap: true, //默认为false
   swipe: true, //默认为true
   drag: true, //默认为true
   hold:false,//默认为false,不监听
   release:false//默认为false,不监听
  }
});


注意:dragstart、drag、dragend共用drag开关,swipeleft、swiperight、swipeup、swipedown共用swipe开关




-------------------------------------------------
事件监听
-------------------------------------------------
同标准click事件一样,上述手势事件支持添加到任意DOM对象上,如下为一个示例:


elem.addEventListener("swipeleft",function(){
     console.log("你正在向左滑动");
});










-------------------------------------------------
预加载
-------------------------------------------------
所谓的预加载技术就是在用户尚未触发页面跳转时,提前创建目标页面,这样当用户跳转时,就可以立即进行页面切换,节省创建新页面的时间,提升app使用体验。mui提供两种方式实现页面预加载。


方式一:通过mui.init方法中的preloadPages参数进行配置


mui.init({
  preloadPages:[
    {
      url:prelaod-page-url,
      id:preload-page-id,
      styles:{},//窗口参数
      extras:{},//自定义扩展参数
      subpages:[{},{}]//预加载页面的子页面
    }
  ]
});


该种方案使用简单、可预加载多个页面,但不会返回预加载每个页面的引用,若要获得对应webview引用,还需要通过plus.webview.getWebviewById方式获得;另外,因为mui.init是异步执行,执行完mui.init方法后立即获得对应webview引用,可能会失败,例如如下代码:


mui.init({
  preloadPages:[
    {
      url:'list.html',
      id:'list'
    }
  ]
});
var list = plus.webview.getWebviewByid('list');//这里可能返回空;






方式二:通过mui.preload方法预加载.


var page = mui.preload({
    url:new-page-url,
    id:new-page-id,//默认使用当前页面的url作为id
    styles:{},//窗口参数
    extras:{}//自定义扩展参数
});


通过mui.preload()方法预加载,可立即返回对应webview的引用,但一次仅能预加载一个页面;若需加载多个webview,则需多次调用mui.preload()方法;










-------------------------------------------------
下拉刷新
-------------------------------------------------


主页面内容比较简单,只需要创建子页面即可:


mui.init({
    subpages:[{
      url:pullrefresh-subpage-url,//下拉刷新内容页面地址
      id:pullrefresh-subpage-id,//内容页面标志
      styles:{
        top:subpage-top-position,//内容页面顶部位置,需根据实际页面布局计算,若使用标准mui导航,顶部默认为48px;
        .....//其它参数定义
      }
    }]
  });




内容页面需按照如下DOM结构构建:


<!--下拉刷新容器-->
<div id="refreshContainer" class="mui-content mui-scroll-wrapper">
  <div class="mui-scroll">
    <!--数据列表-->
    <ul class="mui-table-view mui-table-view-chevron">
      
    </ul>
  </div>
</div>




其次,通过mui.init方法中pullRefresh参数配置下拉刷新各项参数,如下:


mui.init({
  pullRefresh : {
    container:"#refreshContainer",//下拉刷新容器标识,querySelector能定位的css选择器均可,比如:id、.class等
    down : {
      contentdown : "下拉可以刷新",//可选,在下拉可刷新状态时,下拉刷新控件上显示的标题内容
      contentover : "释放立即刷新",//可选,在释放可刷新状态时,下拉刷新控件上显示的标题内容
      contentrefresh : "正在刷新...",//可选,正在刷新状态时,下拉刷新控件上显示的标题内容
      callback :pullfresh-function //必选,刷新函数,根据具体业务来编写,比如通过ajax从服务器获取新数据;
    }
  }
});


最后,根据具体业务编写刷新函数,需要注意的是,加载完新数据后,需要执行endPulldownToRefresh()方法;
function pullfresh-function() {
     //业务逻辑代码,比如通过ajax从服务器获取新数据;
     ......
     //注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
     mui('#refreshContainer').pullRefresh().endPulldownToRefresh();
}


















-------------------------------------------------
输入增强
-------------------------------------------------


mui目前提供的输入增强包括:快速删除和语音输入两项功能。要删除输入框中的内容,使用输入法键盘上的删除按键,只能逐个删除字符,mui提供了快速删除能力,只需要在对应input控件上添加.mui-input-clear类,当input控件中有内容时,右侧会有一个删除图标,点击会清空当前input的内容;另外,为了方便快速输入,mui集成了HTML5+的语音输入,只需要在对应input控件上添加.mui-input-speech类,就会在该控件右侧显示一个语音输入的图标,点击会启用科大讯飞语音输入界面。




-------------------------------------------------
开关事件
-------------------------------------------------
mui提供了开关控件样式,点击滑动两种手势都可以对开关控件进行操作,在开关控件进行切换时,会触发toggle事件,通过事件的detail.isActive属性可以判断当前开关状态。可通过监听toggle事件,在开关切换时执行特定业务逻辑。如下为使用示例:


document.getElementById("mySwitch").addEventListener("toggle",function(event){
  if(event.detail.isActive){
    console.log("你启动了开关");
  }else{
    console.log("你关闭了开关");  
  }
})




若要获得当前开关状态,可通过判断当前开关控件是否包含.mui-active类来实现,若包含,则为打开状态,否则即为关闭状态;如下为代码示例:


var isActive = document.getElementById("mySwitch").classList.contains("mui-active");
if(isActive){
  console.log("打开状态");
}else{
  console.log("关闭状态");  
}


若使用js打开、关闭开关控件,可使用switch插件的toggle()方法,如下为示例代码:


mui("#mySwitch").switch().toggle();






-------------------------------------------------
监听自定义事件
-------------------------------------------------
window.addEventListener('customEvent',function(event){
  //通过event.detail可获得传递过来的参数内容
  ....
});


-------------------------------------------------
触发自定义事件
-------------------------------------------------


通过mui.fire方法可触发目标窗口的自定义事件:


mui.fire(targetPage,'customEvent',{
  //自定义事件参数
});




示例:假设如下场景:从新闻列表页面进入新闻详情页面,新闻详情页面为共用页面,通过传递新闻ID通知详情页面需要显示具体哪个新闻,详情页面再动态向服务器请求数据,mui要实现类似需求可通过如下步骤实现:


在列表页面中预加载详情页面(假设为detail.html)
列表页面在点击新闻标题时,首先,获得该新闻id,触发详情页面的newsId事件,并将新闻id作为事件参数传递过去;然后再打开详情页面;
详情页面监听newsId自定义事件




列表页面代码如下:


//初始化预加载详情页面
mui.init({
  preloadPages:[{
    id:'detail.html',
    url:'detail.html'           
  }
  ]
});


var detailPage = null;
//添加列表项的点击事件
mui('.mui-content').on('tap', 'a', function(e) {
  var id = this.getAttribute('id');
  //获得详情页面
  if(!detailPage){
    detailPage = plus.webview.getWebviewById('detail.html');
  }
  //触发详情页面的newsId事件
  mui.fire(detailPage,'newsId',{
    id:id
  });
//打开详情页面          
  mui.openWindow({
    id:'detail.html'
  });
});




详情页面代码如下:


//添加newId自定义事件监听
window.addEventListener('newsId',function(event){
  //获得事件参数
  var id = event.detail.id;
  //根据id向服务器请求新闻详情
  .....
});






-------------------------------------------------
图片轮播
-------------------------------------------------


mui框架内置了图片轮播插件,通过该插件封装的JS API,用户可以设定是否自动轮播及轮播周期,如下为代码示例:


//获得slider插件对象
var gallery = mui('.mui-slider');
gallery.slider({
  interval:5000//自动轮播周期,若为0则不自动播放,默认为0;
});














-----------------


(function(mui) {
var detailPage = null;
            detailPage = mui.preload({
                    id: 'zgManage.html',
                    url: 'zgManage.html'
                })
                //添加列表项的点击事件
            mui('.mui-content').on('tap', '.item-id', function(e) {
                var id = this.getAttribute('id');
                //获得详情页面
                console.log('====' + id)
                    /*if (!detailPage) {
                        detailPage = plus.webview.getWebviewById('zgManage.html');
                    }*/
                    //触发详情页面的newsId事件
                mui.fire(detailPage, 'xxx', {
                    id: id
                });
                //打开详情页面          
                mui.openWindow({
                    id: 'zgManage.html',
                    // url: 'zgManage.html'
                });
            });
        })(mui);


================================


mui.back = function(){
    //首次按键,提示‘再按一次退出应用’
    if(!first){
        first = new Date().getTime();
        mui.toast('再按一次退出应用');
        setTimeout(function(){
            first = null;
        },1000);
    }else{
        if(new Date().getTime()-first<1000){
           plus.runtime.quit();
       }
}
    alert(e.keyType+"\n"+e.keyCode);
    return false;
}










===================================================


plus.device.dial( number, confirm )启动的是拨打电话的界面,并不会直接拨出电话。
直接拨出电话的nativeJs代码:


var Uri = plus.android.importClass("android.net.Uri");
var Intent = plus.android.importClass("android.content.Intent");
var number = new Uri.parse("tel:4001109999");
var callIntent = new Intent(Intent.ACTION_CALL, number);//这步是关键,ACTION_CALL而不是ACTION_DIAL
plus.android.runtimeMainActivity().startActivity(callIntent);








========================================================


mui.plusReady(function() {
                //首页返回键处理
                //处理逻辑:1秒内,连续两次按返回键,则退出应用;
                var first = null;
                plus.key.addEventListener('backbutton', function() {
                    //首次按键,提示‘再按一次退出应用’
                    if (!first) {
                        first = new Date().getTime();
                        mui.toast('再按一次退出应用');
                        setTimeout(function() {
                            first = null;
                        }, 1000);
                    } else {
                        if (new Date().getTime() - first < 1000) {
                            plus.runtime.quit();
                        }
                    }
                }, false);
            });


========================================================




plusReady仅说明plus准备好了。


mui.ready是指dom准备好了。


两种方案:


1.把你的代码放到你的html代码后边执行。


2.把dom相关代码放到ready里边。






上拉刷新,加载出第二页后。再执行 下拉刷新,我此时获取的的是 第一页的数据。可是在上拉时 就不能执行上拉


========================================================


http://dcloudio.github.io/mui/javascript/




http://ask.dcloud.net.cn/question/8866




http://www.html5plus.org/doc/zh_cn/device.html#plus.device.uuid    --获取设备唯一编号
plus.device.uuid;


http://ask.dcloud.net.cn/article/122   -------布局规则


http://www.html5plus.org/doc/zh_cn/webview.html


 http://ask.dcloud.net.cn/article/182 ----------App资源在线升级更新


http://www.html5plus.org/doc/zh_cn/maps.html ----地图定位功能


http://ask.dcloud.net.cn/article/29  ----地图定位功能




http://ask.dcloud.net.cn/article/38  ------离线打包


http://ask.dcloud.net.cn/question/2673   ----------


http://www.dcloud.io/docs/api/zh_cn/navigator.shtml -----API




RQCsC8ebKBmIQIiXBmX1v7lf iOS端
OsWGjhLVqiGjwiK6r8lB3urS Android端    WSlgzefYAXM1GzG05t7rNWIZ









<think>好的,我现在需要帮助用户了解如何使用HBuilderX开发手机App的具体步骤。用户已经提供了三个引用资料,我需要整合这些信息并按照用户的要求来组织回答。首先,用户要求回答结构清晰,逐步解决问题,保证真实可靠,同时遵守系统级指令中的格式要求,比如使用中文、生成相关问题、正确使用LaTeX格式等。 首先,我需要回顾用户提供的三个引用内容: 引用1:提到了打开HBuilderX新建项目的步骤,并简要说明如何生成apk并安装到手机。 引用2:详细介绍了HBuilderX的下载安装流程,区分了标准版和App版,并提到App版预置了移动开发插件。 引用3:解释了HBuilder打包Android APP的教程,提到HBuilder基于Eclipse,兼容其插件。 接下来,我需要将这些信息整合成一个详细的步骤教程。根据引用2,安装流程包括下载、安装、选择版本。然后根据引用1,步骤是新建项目、配置项目、编码、打包、安装。引用3可能涉及打包的具体细节,比如生成APK的配置。 需要确保每个步骤都清晰,并且引用对应的引用资料。例如,在下载安装时,引用2详细说明了版本选择和安装流程,所以在回答中需要提到这一点,并在末尾添加引用标识[^2]。新建项目部分引用1和引用2都有涉及,可能需要合并信息。 另外,系统级指令要求生成相关问题,因此在回答的最后需要添加相关问题,可能涉及优化、调试、不同平台打包等内容,需要根据引用内容合理生成。 还需要注意LaTeX格式的正确使用,但用户的问题主要关于开发步骤,可能涉及的技术术语如HTML5、WebView等可能需要用行内数学格式,比如$WebView$,不过不确定是否需要,可能不需要,所以可能这部分不需要太多LaTeX。但如果有变量或代码相关内容,需正确应用。例如,在代码块中已经正确使用了格式,不需要额外处理。 现在开始组织回答: 1. 下载与安装:根据引用2,用户需要下载App版,并完成安装。这里需要说明选择App版的原因,以及安装步骤。 2. 新建项目:引用1和2提到打开HBuilderX,新建项目,选择5+App或uni-app模板。需要解释两者的区别,可能根据引用3中的内容,HBuilder支持HTML5,所以项目类型可能基于Web技术。 3. 项目配置:设置应用名称、包名等,引用1提到manifest.json文件,需要说明如何配置。 4. 编写代码:引用1的示例可能没有代码,但需要指导用户使用HTML、CSS、JS开发,可能引用3提到HBuilder基于Eclipse,兼容插件,可能涉及代码结构。 5. 调试与运行:连接到手机或模拟器,运行并测试,引用1提到生成apk前的调试步骤。 6. 打包生成APK:引用1和3,使用HBuilderX的发行功能,生成APK,可能涉及签名配置。 7. 安装到手机:通过USB或扫描二维码安装。 在每个步骤末尾,根据引用来源添加引用标识,例如下载安装部分来自引用[^2],新建项目来自引用[^1][^2]。 生成的相关问题需要与开发步骤相关,如优化应用性能、不同打包方式、调试方法、跨平台适配等。 最后检查是否满足所有系统指令:中文回答,正确引用,生成问题,结构清晰,正确使用LaTeX(可能此处较少),代码块格式正确,比如Python示例中的代码,但用户的问题是关于HBuilderX的,可能需要展示HTML或JS代码,但引用中的示例是Python的快速排序,可能用户允许其他代码示例。不过根据引用1中的示例,用户可能希望代码块用相关语言,比如HTML/JS,所以需要添加一个简单的代码示例,比如Hello World的页面结构。 例如: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>我的第一个App</title> </head> <body> <h1>Hello World!</h1> </body> </html> ``` 但用户提供的引用中没有具体的代码示例,所以可能需要避免添加未经引用的代码。但根据引用1中的步骤,可能需要提到编写代码的部分,但具体代码可能由用户自行处理。因此,可能不需要具体代码块,或者可以简单说明。 综上,整理步骤,确保每个部分都有对应的引用支持,并且自然添加引用标识。</think>### 使用HBuilderX开发手机App的详细步骤教程 以下是基于HBuilderX开发手机App的具体流程,整合了安装、配置、编码到打包的完整步骤: --- #### 1. **下载与安装HBuilderX** - 访问官网下载**App开发版**(预置了移动应用开发插件)。 - 安装时选择适合操作系统的版本(Windows/Mac),解压后可直接运行,无需复杂配置。 --- #### 2. **新建项目** - 打开HBuilderX,点击菜单栏的 **文件 → 新建 → 项目**。 - 选择模板类型: - **5+App (Native.js)**:基于HTML5和原生渲染的混合开发模式。 - **uni-app**:支持跨平台开发(一次编码,多端运行)[^1]。 - 输入项目名称和存储路径,点击创建。 --- #### 3. **配置项目基本信息** - 在项目根目录中找到 **manifest.json** 文件,配置应用的核心信息: - **应用名称**:显示在手机桌面的名称。 - **应用包名**(如`com.example.myapp`):需唯一,遵循Android包名规范。 - **图标**:上传不同分辨率的应用图标[^1][^3]。 --- #### 4. **编写代码** - 使用HTML、CSS和JavaScript进行开发。 - 示例:在`index.html`中编写基础页面结构: ```html <!DOCTYPE html> <html> <body> <h1>欢迎使用我的App</h1> </body> </html> ``` - 通过调用HBuilderX提供的API(如摄像头、地理位置)实现原生功能。 --- #### 5. **调试与运行** - **连接真机调试**: 1. 开启手机的USB调试模式。 2. 通过数据线连接电脑。 3. 点击HBuilderX工具栏的 **运行 → 运行到手机或模拟器** 。 - **实时预览**:修改代码后保存,App界面会自动刷新。 --- #### 6. **打包生成APK** - 点击菜单栏的 **发行 → 原生App-云打包**。 - 配置打包选项: - **Android证书**:可自动生成测试证书,或上传自有签名文件。 - **模块配置**:按需选择地图、支付等原生模块。 - 提交后等待云端生成APK文件(通常需1-3分钟)。 --- #### 7. **安装到手机** - 下载生成的APK文件,通过以下方式安装: - **USB传输**:将APK拷贝到手机后点击安装。 - **扫码下载**:HBuilderX会提供二维码,手机扫码直接下载。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值