App Inventor高级教程——Material Design追求之路——最终解决方案

上次写了这么多教程,终于要完结了。

这次的教程比较高级,涉及到Html框架、Js,建议去W3SCHOOL学习一个。

先放最终效果图。

【教师端截图1】

【教师端截图2】


【学生端截图】


下面开始说一下我的思考过程。
首先,我是怎么样想到这样解决的呢?
这还是要感谢YTB。
这个西班牙文的连接上,我找到了个好东西。
谷歌翻译后,这个人的大概意思是用PhoneGap、或Framework7这类的软件、框架来实现软件外观的实现。
懂了!
(PhoneGap是刚刚找到的,以后慢慢写)
开工!


首先,我们要找到Framework7的网址。左边那个就是。
既然是MD,那么基本的界面是必不可少的。

<!DOCTYPE html>
<html>
  <head>
    <!-- Required meta tags-->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <!-- Color theme for statusbar -->
    <meta name="theme-color" content="#2196f3">
    <!-- Your app title -->
    <title>My App</title>
    <!-- Path to Framework7 Library CSS, Material Theme -->
    <link rel="stylesheet" href="path/to/framework7.material.min.css">
    <!-- Path to Framework7 color related styles, Material Theme -->
    <link rel="stylesheet" href="path/to/framework7.material.colors.min.css">
    <!-- Path to your custom app styles-->
    <link rel="stylesheet" href="path/to/my-app.css">
  </head>
  <body>
    <!-- Views -->
    <div class="views">
      <!-- Your main view, should have "view-main" class -->
      <div class="view view-main">
        <!-- Pages container, because we use fixed navbar and toolbar, it has additional appropriate classes-->
        <div class="pages navbar-fixed toolbar-fixed">
          <!-- Page, "data-page" contains page name -->
          <div data-page="index" class="page">
 
            <!-- Top Navbar. In Material theme it should be inside of the page-->
            <div class="navbar">
              <div class="navbar-inner">
                <div class="center">Awesome App</div>
              </div>
            </div>
 
            <!-- Bottom Toolbar. In Material theme it should be inside of the page-->
            <div class="toolbar">
              <div class="toolbar-inner">
                <!-- Toolbar links -->
                <a href="#" class="link">Link 1</a>
                <a href="#" class="link">Link 2</a>
              </div>
            </div>
 
            <!-- Scrollable page content -->
            <div class="page-content">
              <p>Page content goes here</p>
              <!-- Link to another page -->
              <a href="about.html">About app</a>
            </div>
          </div>
        </div>
      </div>
    </div>
    <!-- Path to Framework7 Library JS-->
    <script type="text/javascript" src="path/to/framework7.min.js"></script>
    <!-- Path to your app js-->
    <script type="text/javascript" src="path/to/my-app.js"></script>
  </body>
</html> 

这是官网上关于一个基本的Material Design界面的布局。
(当然像什么标题的都没改)
打开一看,是不是很高兴?
没错,我们的第一步完成了。
接下来是添加侧边栏了。
null
按照官网说的做,也可以简单的完成。
后续组件的创建也和写HTML代码无异。(虽然我也不是很会)
有几点提一下:
1.导航栏按钮问题

<div class="navbar">
    <div class="navbar-inner">
        <div class="left">
            <a href="#" class="link icon-only">
                <i class="icon icon-bars"></i>
            </a>
        </div>
    </div>
</div>    

如上图,替换原先NAVIBAR的DIV,就能实现简单的导航栏图标。
但是:没有图标变化的动画。请强迫症们牢记这点。
2.导航栏内内容切换问题
这曾是我的一个重要问题之一。
因为没有系统的学过HTML相关的语言,所以,对于AJAX什么的一窍不通。连这点H5知识都是W3SCHOOL现学的。于是,又被我想出了一个歪路子。
首先呢,Framework7提供了操作H5的方法,是用:
null
这样的。
而我输入

$$('p').hide();

时,页面上所有的p标签都消失了。
于是,我想,HTML能不能自定义标签呢?
答案是肯定的。

<html xmlns:look>

<html xmlns:watch>

像这样就可以了。
接下来的问题就简单了。
经过穷举,我们需要在这里:

<watch>
<div data-page="index" class="page">
<!-- Top Navbar. In Material theme it should be inside of the page-->
<div class="navbar">
<div class="navbar-inner">
<div class="center">Awesome App</div>
</div>
</div>

<!--中间放元素-->

</watch>

打上一个标签后,还有另外一个:

<look>
<div data-page="index" class="page">

<!-- Top Navbar. In Material theme it should be inside of the page-->
<div class="navbar">
<div class="navbar-inner">
<div class="center">NoName</div>

<!--上面填软件名字-->
</div>
</div>

<!--TOOLBAR部分-->
<div class="toolbar">
<div class="toolbar-inner">
<!-- Toolbar links -->
<a href="#" class="link icon-only">
<i class="icon icon-bars open-panel"></i>
</a>
</div>
</div>

<!--以上是TOOLBAR部分-->

<!--中间放元素-->

</look>

还有按钮点击部分:

 //默认隐藏
$$('watch').hide();
//数据查询
$$('.button-what.button.color-teal').on('click', function () {
$$('watch').hide();
$$('look').show();
});
//数据管理
$$('.button-manage.button.color-teal').on('click', function () {
$$('look').hide();
$$('watch').show();
});

注意!上面是JS!

要用

<script type="text/javascript">

</script>

包起来的!

3.通讯问题
AI2浏览器封装了两个方法,分别是
window.AppInventor.setWebViewString();

window.AppInventor.getWebViewString();
在HTML中用window.setInterval设置一个计时器,来监听、处理数据,再在AI2中拖一个同样的出来。把原先的按钮什么的全拖过来,监测传回字串就可以了。
【强烈建议一次传回所有数据,否则可能造成不定期错乱】


综合评价:

优点:

  • 好看!
  • 动画流畅
  • 有侧边栏
  • 可定义事件多,可以套用模板
  • 兼容性优秀,移植方便
  • H5是目前APP制作的趋势
  • 如果把关键文件存在云端,那么更新软件再也不用重新编译了。

缺点:

  • 操作困难,尤其是对于无基础的人
  • 如果存在云端,受服务器状态影响
  • 过低版本手机(<=Android 2.2)可能无法运行
  • 所有数据要用Timer传回,耗电相对较大
  • 你可能知难而退

总评:对于编程基础薄弱的同志们,十分不建议用这个方案,还是建议用*S*S*R*登Thunkable重新编译。但是对于完美主义者,以及我这种编程不行外加强迫症患者来说,Framework7还是很有必要的。

 

 

 

-The End-

【文明6游戏中】再来一回合,就一回合!

点赞

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据