zoukankan      html  css  js  c++  java
  • Android应用之个人应用软件开发(1)【需求及UI布局】

    需求:【理财+日志】

           目前我个人做的是自己的一个理财软件,我这个人是一个极度木有理财观念的人,每个月没有固定的开资计划和理财计划。于是乎我看了别的理财软件也让我觉得很 繁琐和复杂我觉得如果让我来做一个理财软件,那第一必须得方便,个性化,有可能我一键就能记录我当天的开资情况(根据前一天的理财记录来添加第二天的理财 纪录是否一样)。而且是否每天都要统计开资呢,不一定,我只纪录我当天的花费即可,而且我可以编辑这个月内我某一天的开资情况,还有一个功能就是我忘了昨 天的理财添加了,我选择日期来进行理财管理。达到即使忘记了我也能添加回来。当然作为一个管理软件我们没有必要记得非常之精确,我们不是科学家要进行精确 的数值统计,我们只记录当月大概开资情况和,按照这个计划这个月的开资的花费那一部分超出了我们预期的开资。比如我早上买了10个包子,包子的价钱1元, 中午吃了20个包子,晚上吃了20个包子(当然我不是一直吃包子),我们就可以大致模糊理财。早餐10元,午餐20,晚餐20,是否有购买物品情况,必须 生活消耗品开资(菜米油盐酱醋茶等等)。好了不扣水勒。我直接把我需要的分为4大块!

           根据以上需求理财功能分为4大块:

           1,今日记账(纪录每一天的生活开资情况) 

           2,本月日历(这个月的日历分布)

           3,本月流水(本月开资消耗点柱状图)

           4,开资统计(一个月的预计开资 和 软件纪录的实际开资 比对情况)

           有了这4个功能那么我就可以看出我这个月的钱都花到哪去了,下个月应该怎么来理财,心里有个数就行,软件是死的,人是活的,我们还得每天按照自己的思想来活,活出精彩的每一天,哇哈哈。

    UI设计:

           UI设计,我们提到过Android Layout Edior 布局资源管理器。根据GOOGLE提供的人机接口我们可以方便的引用一些套件 Widget 这个非常成熟的套件,我觉得大致和silverlight / flax 等里面的控件大致一样的 ,还汤不换药  一个按钮是就是按钮  它有事件 给我们提供服务 . 

           首先我们新建一个工程,可以看到工程建立起来后已经给我们自动配置和引入了安卓开发必备的环境。

           当然我们也看到了androidManifest.xml配置文件。我们的程序的程序的入口点是main.xml ,那我们就来设计一下我们的界面吧.

           由于我想以后拓展成为公用软件,那我就要设计一个登陆页面,但这个页面暂时没有数据功能。但依然能达到我们登陆的效果,设计思路当然和传统的一样。设计之前简单介绍一下android有哪几种布局方式:

           不同的布局根据不同的屏幕适应性也是很重要的。android屏幕常用的有3种屏幕尺寸,这里我也就说一种160的。

           desity=160 分辨率:320px * 533px 平均是3个点两个分辨率  状态栏 25px 25px  竖屏 320px * 508px

           1,表格布局 tablelayout(自适应度中,和web里面的tabel一样的 行 和 列必须是对齐的)

           2 , 线性布局 linearlayout(以行为线布局,自适应高)

           3 , 相对布局 Relativelayout(根据margin属性进行相对布局,适应度也是比较高的)

           4 , 绝对布局 absolutelayout(根据直接定义绝对路径坐标来设置 ,layout_x/y 来适应屏幕尺寸)

           5 , 框架布局 Framelayout

           再来说一下drawable-*的3个目录是干什么用的,存放了3中不同图标的文件, hdpi:72*72 ; mdpi:48*48 ; ldpi:36 *36 这些尺寸自己设置好,在路径中对于的图片大小也是不一样的,比如我们在任务栏看到的,和在应用版面上看到的是不同尺寸的道理是一样的。

           接下来就是设计UI我了2中方式(linearlayout , absolutelayout)实现了如图所示的布局:

           具体实现大家参考代码吧

           有两个窗体 一个是Mian.xml 另一个是 mylist.xml

          

          界面设计好了,接下来是做登陆的代码了,在建立项目的时候选项:Create Activty 入口点Activityclass名 。我们看一下androidManifest.xml里面的具体内容

          在ZisousoftminiActivity里面书写代码内容:

          全文代码:

         

    package Zisou.Soft.mini;
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Intent;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;

    publicclass ZisousoftminiActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //调用main.xml layout窗体
    setContentView(R.layout.main);
    //目前就不用用户名和密码 等待以后拓展SQLite数据
    final String str_username ="";
    final String str_pwd ="";
    //控件定义方法findViewById
    final EditText Et_username = (EditText)findViewById(R.id.editText1);
    final EditText Et_pwd = (EditText)findViewById(R.id.editText2);

    Button bt_login
    = (Button)findViewById(R.id.button1);
    //通过setOnClickListener来监听并注册OnClickListener时间方法
    bt_login.setOnClickListener(new Button.OnClickListener() {
    publicvoid onClick(View v) {
    if(str_username.equals(Et_username.getText().toString().trim())==true)
    {
    if(str_pwd.equals(Et_pwd.getText().toString().trim())==true)
    {
    final ProgressDialog progressDialog = ProgressDialog.show(ZisousoftminiActivity.this, "登陆中...", "请稍等,正在登陆...");
    final Handler handler =new Handler();

    final Runnable callback =new Runnable() {
    publicvoid run() {
    //回调处理
    progressDialog.dismiss();//关闭对话窗口
    Intent intent =new Intent(ZisousoftminiActivity.this, mylist.class);//利用Intent创建一个窗口活动程序的动作
    startActivity(intent);//切换该窗口mylist
    }
    };
    //声明一个线程并处理回调
    Thread thread =new Thread() {
    @Override
    publicvoid run() {
    try {
    Thread.sleep(
    5000);
    }
    catch (InterruptedException e) {
    e.printStackTrace();
    }
    handler.post(callback);
    }
    };
    thread.start();
    }
    else
    {
    Toast.makeText( ZisousoftminiActivity.
    this , "密码有误", Toast.LENGTH_SHORT).show();
    }
    }
    else
    {
    Toast.makeText( ZisousoftminiActivity.
    this , "用户名错误", Toast.LENGTH_SHORT).show();
    }
    }
    });

    }
    }

                代码中我们看到了这样一段 setContentView(R.layout.main); 打开程序入口点的Activity窗体 , 通过setOnClickListener来监听并注册OnClickListener时间方法,使我们能书写点击按钮之后的具体方法。其中声明了 ProgressDialog类 会话窗口类 android SDK给我提供了5种类型,PopupWindosw 、Dialog 、AlertDialog 、ProgressDialog 、Toast 等我们用到了两种。

                ProgressDialog的使用方法:

    final ProgressDialog progressDialog = ProgressDialog.show(ZisousoftminiActivity.this, "登陆中...", "请稍等,正在登陆...");
    final Handler handler =new Handler();

    final Runnable callback =new Runnable() {
    publicvoid run() {
    progressDialog.dismiss();
    Intent intent
    =new Intent(ZisousoftminiActivity.this, mylist.class);
    startActivity(intent);
    }
    };

    Thread thread
    =new Thread() {
    @Override
    publicvoid run() {
    try {
    Thread.sleep(
    5000);
    }
    catch (InterruptedException e) {
    e.printStackTrace();
    }
    handler.post(callback);
    }
    };
    thread.start();

                 Toast 的使用方法:

                 要注意的是 ZisousoftminiActivity.this 指在当前的Activity中进行切换

    Toast.makeText( ZisousoftminiActivity.this , "提示内容", Toast.LENGTH_SHORT).show();

                 Intent是android Activity中重要的一个控制类 ,一个是对Action 的处理 一个是对 data to act on 的处理。

                 在ZisousoftminiActivity里面书写代码内容:

    package Zisou.Soft.mini;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.AdapterView.OnItemClickListener;

    publicclass mylist extends Activity {

    private Object[] actobj={
    "个人理财管理", myrmbmanage.class,
    "个人日志", myrizi.class,
    };

    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylist);

    //创建数组
    CharSequence[] list =new CharSequence[actobj.length/2];
    //序列化list
    for(int i =0 ; i <list.length; i++)
    {
    list[i]
    =(String)actobj[i*2];
    }
    //BindListView提取数组出来绑定Text内容值
    ArrayAdapter<CharSequence> adp =new ArrayAdapter<CharSequence>(mylist.this, android.R.layout.simple_list_item_1 ,list);
    ListView lv
    = (ListView)findViewById(R.id.ListView01);
    lv.setAdapter(adp);
    //setOnItemClickListener为每一个Itme设置OnItemClickListener事件
    lv.setOnItemClickListener(new OnItemClickListener() {
    publicvoid onItemClick(AdapterView<?> parent, View view, int position, long id) {
    //创建List动作
    Intent intent =new Intent(mylist.this, (Class<?>)actobj[position *2+1]);
    startActivity(intent);
    }
    });
    }
    }

                 程序写完了跑一下看看是不是我们想要的功能:

                

        

             嗯,看来大体的UI设计工作已经到位了。感觉还是很不错的,下一部分我将会继续努力,写接下来的个人理财管理里面的UI,和功能说明!

             希望和大家一起学习安卓开发和相关应用开发。后面会我会用到一个设计模式来写这个程序。主要是用于数据库访问类库方面的。

          

     
  • 相关阅读:
    打开安装 好的Microsoft Dynamics CRM 4.0 报错误为 Caller does not have enough privilege to set CallerOriginToken to the specified value 的解决办法
    基于 Windows Server 2008 的计算机对 Microsoft Dynamics CRM 4.0 的支持
    Microsoft Dynamics CRM 4.0 如何添加自定义按钮
    Microsoft Dynamics CRM 4.0 Plugin 取值,赋值,查询
    C# 中的 enum(枚举) 类型使用例子
    vue事件的绑定
    表单验证2
    node中模块
    node模块的引入
    node中的读文件
  • 原文地址:https://www.cnblogs.com/zisou/p/Android_02.html
Copyright © 2011-2022 走看看