Android基础知识【项目实训】【4】

【该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材】

【项目题目】:校园订餐App设计

综合案例

【目标】

主界面的功能确实比较复杂,因此上一篇知识说的周边内容。现在开始说这个界面的代码和布局文件。

1、先看一下项目的组织结构吧,要不然不好说他们的关系:

(1)db包中的都是跟 数据库相关的

(2)eatall中放的都是activity或者fragment

(3)entity中放的实体类

(4)util中放的是工具类

2、主界面activity类是MainActivity,注意它继承的是ActivityGroup,因为还没用使用Fragment

/**
 * 百米购的主界面,内含一个TabHost,作为主导航使用
 * @author Administrator
 */
public class MainActivity extends ActivityGroup  {
	TabHost tabHost;
	GridView gv;
	String mainMenus[]={"百米美食","百米餐馆","推荐美食","我的最爱",
			"健康跟踪","美食心得","查看菜系","我的账单",
			"提前预定","系统帮助","百米设置","注册信息"};
	int mainMenuIcons[]=new int[12];
	List<Map<String,Object>> menuData ;//Tab3中主菜单的 数据
	EatApp app ;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tabHost=(TabHost) findViewById(R.id.mainTabHost);
		//初始化导航界面
		initTabHost();
		app=(EatApp) getApplication();
	}
	//
	private void initTabHost() {
		tabHost.setup();//使用TabHost控件时,必须加入该程序
		tabHost.setup(getLocalActivityManager());
		TabSpec tab1=tabHost.newTabSpec("t1");
		tab1.setIndicator("促销打折",getResources().getDrawable(R.drawable.logo_s)	);
		Intent intent1=new Intent(MainActivity.this,DiscountFoodActivity.class);
		tab1.setContent(intent1);

		TabSpec tab2=tabHost.newTabSpec("t2");
		tab2.setIndicator("我的账单",getResources().getDrawable(R.drawable.logo_s)	);
		Intent intent2=new Intent(MainActivity.this,AccountActivity.class);
		tab2.setContent(intent2);

		TabSpec tab3=tabHost.newTabSpec("t3");
		tab3.setIndicator("百米购",getResources().getDrawable(R.drawable.logo_s)	);
		tab3.setContent(R.id.main_tabMainFace);

		tabHost.addTab(tab1);
		tabHost.addTab(tab2);
		tabHost.addTab(tab3);
		//初始化Tab3的主导航页面
		gv=(GridView) findViewById(R.id.main_tabMainFace_gv);
		initGridView();
	}
	//对Tag3中的主导航GridView进行初始化
	private void initGridView() {
		for (int i = 0; i <mainMenuIcons.length; i++) {
			mainMenuIcons[i]=R.drawable.mainmenu_01+i;
		}
		menuData=new ArrayList<Map<String,Object>>();
		for (int i = 0; i < mainMenus.length; i++) {
			Map<String,Object>item =new HashMap<String,Object>();
			item.put("menuImg", mainMenuIcons[i]);
			item.put("menuTitle", mainMenus[i]);
			menuData.add(item);
		}

		SimpleAdapter sa =new SimpleAdapter(
				this,
				menuData,
				R.layout.mainmenulist_item,
				new String[]{"menuImg","menuTitle"},
				new int[]{R.id.mainMenu_item_img,R.id.mainMenu_item_title}
				);
		gv.setAdapter(sa);
		gv.setOnItemClickListener(new OnItemClickListener(){
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {

			}}
		);
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	//菜单点击
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		Intent intent=null ;
		switch(item.getItemId()){
		case R.id.menu_shopcat:	//查看购物车菜单
			intent =new Intent(MainActivity.this,ShopcartActivity.class);
			break;
		case R.id.menu_info:	//查看个人信息
			Log.i("Msg", app.userInfo+" 登录信息");
			if(app.userInfo!=null){
				intent =new Intent(MainActivity.this,UserinfoActivity.class);
			}else{
				new LoginDialog(this);
			}
			break;
		case R.id.menu_setting:	//系统设置菜单

			break;
		case R.id.menu_exit:	//系统推出菜单
			MainActivity.this.finish();
			break;
		}
		if(intent!=null)
			startActivity(intent);
		return super.onOptionsItemSelected(item);
	}
	@Override
	protected void onResume() {
		super.onResume();
		if(app.userInfo!=null){
			setTitle("百米购["+app.userInfo.getUserName()+"]");
		}
	}
	/*退出时,情况购物车中的数据*/
	@Override
	protected void onDestroy() {
		super.onDestroy();
		EatApp app=(EatApp) getApplication();
		app.orderItems.clear();
		app.userInfo=null;
		finish();
	}
}

此处对几个方法的功能,进一步说明:

(1)

TabHost tabHost;

这个是底部的Tab导航要用的。

(2)下面这几个是 第三个Tab中要用的内容

GridView gv;
	String mainMenus[]={"百米美食","百米餐馆","推荐美食","我的最爱",
			"健康跟踪","美食心得","查看菜系","我的账单",
			"提前预定","系统帮助","百米设置","注册信息"};
	int mainMenuIcons[]=new int[12];
	List<Map<String,Object>> menuData ;//Tab3中主菜单的 数据

(3)

EatApp app ;

这是自定义的一个Application类,目的是让不同的Activity可以共用一部分数据【后面还有说明的】

(4)代码中涉及到很多其他的Activity和类,先说明一下

<span style="background-color: rgb(153, 255, 153);">DiscountFoodActivity.class  :这个地方是 打折促销的 Activity界面</span>
<span style="background-color: rgb(153, 255, 153);">AccountActivity.class    :这个是账单信息Activity界面</span>
<span style="background-color: rgb(153, 255, 153);">ShopcartActivity.class :  查看购物车菜单被点击,前往购物车Activity界面</span>
<pre name="code" class="java"><span style="background-color: rgb(153, 255, 153);">UserinfoActivity.class  :用户信息Activity界面</span>
<span style="background-color: rgb(153, 255, 153);">new LoginDialog(this)  : 有一个自定义的对话框界面,实现用户登录</span>

3、主界面的布局文件是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <TabHost
        android:id="@+id/mainTabHost"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
            <FrameLayout
                android:id="@android:id/tabcontent"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1" >
				<LinearLayout
				    android:id="@+id/main_tabMainFace"
				    android:layout_width="match_parent"
				    android:layout_height="match_parent"
				    android:orientation="vertical"
				    >
				    <GridView android:id="@+id/main_tabMainFace_gv"
				        android:layout_width="match_parent"
				        android:layout_height="match_parent"
				        android:numColumns="4"
				        android:padding="8dp"
				        android:gravity="center_horizontal"
				        ></GridView>
				</LinearLayout>
            </FrameLayout>
            <TabWidget
                android:id="@android:id/tabs"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" >
            </TabWidget>
        </LinearLayout>
    </TabHost>

</RelativeLayout>

注意将TabWidget放在下面,以实现标签导航在下的方式。

4、上面用到一个GridView,它的元素采用的布局文件是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
     >
    <ImageView
        android:id="@+id/mainMenu_item_img"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:scaleType="centerCrop"
        />
	<TextView
	    android:id="@+id/mainMenu_item_title"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:textSize="16sp"
	    android:layout_marginTop="5dp"
	    android:text="菜单名"
	    />
</LinearLayout>

结束,下一篇,说明主界面中的三个子界面是如果实现的。

时间: 2024-08-02 15:12:17

Android基础知识【项目实训】【4】的相关文章

Android基础知识【项目实训】【1】

[该项目实训是Android基础知识的一个综合练习] [项目题目]:校园订餐App设计 综合案例 [设计目标] 1.必要功能 ?快餐店浏览,与订餐 ?今天订餐活动查询与订餐,特价饭菜预定 ?分类订餐查询,预定 ?常定饭菜  预定 ?健康餐推荐 ?定时预定,提前预定 ?订单查看, ?餐馆与饭菜打分,评价 ?用户注册与登录 2.扩展选择功能 ?快速拨打电话 ?饮食跟踪,热量估算 ?系统设置 [项目说明] 该项目为实际应用项目的单机 简化版本,只需要完成Android平台App的设计与开发工作. Ap

Android基础知识【项目实训】【2】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 因为项目只涉及基础知识,因此项目中所用数据并不联网,都读取单机数据库.(即将该项目中所用数据,如菜品信息.店铺信息等存入数据库)用户在第一次打开该项目时,会在用户手机上创建这些数据库,并插入测试数据. 1.先制作一个欢迎界面,欢迎的同时,准备数据库 欢迎界面Activity对应

Android基础知识【项目实训】【3】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 欢迎界面过后,应该显示app的主界面了,根据[UI设计指导]中的规划,主界面采用上下两级标签导航.这部分是app开发中比较麻烦的一块. 1.先来看一下,最终的效果吧,这样做起来比较有底: 默认显示的主界面,下部是主导航,上面是二级导航,默认打开的是"促销打折"这一版面

Android基础知识【项目实训】【5】

[该项目实训是Android基础知识的一个综合练习,特别提示:项目中会用到一些图片素材,都是随意整理的,稍后会上传一个资源,包含该事项项目的基本功能,也含有图片素材] [项目题目]:校园订餐App设计 综合案例 [目标] 主界面中包含两个二级子界面,分别是活动界面和账单界面,下面介绍它们的实现代码和布局文件. 1.下面这个是 活动界面的Activity代码,因为这个界面加载时需要 读取数据库中数据了,所有功能的实现上会涉及到 db那个包中一些类. 注意这个Activity也是继承 Activit

BeagleBone Black项目实训手册(大学霸内部资料)

BeagleBone Black项目实训手册(大学霸内部资料) 介绍:本教程是<BeagleBone Black快速入门教程>的后续教程.本教程以项目操作为主,讲解LED项目.声音项目.传感器项目以及显示项目,并对Beaglebone Black的GPIO.PWM以及I2C等特殊的接口进行详细讲解. 试读下载地址:http://pan.baidu.com/s/1eQozxnG BeagleBone Black项目实训手册 目  录 第1章  准备开始 1 1.1  启动你的Beaglebone

【CC2530入门教程-增强版】基础技能综合实训案例(基础版)-终端源码

[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-终端源码 广东职业技术学院 欧浩源 一.关于硬件电路 关于这个综合实训案例,具体需求详见<[CC2530入门教程-增强版]基础技能综合实训案例(基础版)-题目需求>. 我自己实在"全国职业院校技能大赛--物联网技术应用赛项"的Zigbee模块上实现的.该模块的电路应该和TI公司官方评估板的推荐电路差不多,我想现在市面上很多开发板也是参考这样的电路设计,只要您使用的开发板上有LED灯.按键输入.串口输出和一路A/

Android基础整合项目之节日群发助手(一)

Android基础整合项目(一) 之节日群发助手part 1 --转载请注明出处:coder-pig 本节引言: Android入门系列已经写了大半了,学习了这么多理论知识,不练下手怎么行呢? 在实际的开发中我们会遇到更多的问题,同时也能加固我们的基础知识!鉴于 笔者的水平有限,该项目,面对的是初学者,各位大牛路过不喜勿喷!好吧说下第一个 练手项目吧,前几天中秋节今天又是教师节,各种祝福短信满天飞,手打再群发,条条 短信一个样,没意思!直接用别人弄好的短信群发,别人又不知道你是谁,起码加个: 亲

android基础知识

1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求. Ÿ 目前主流的3G技术标准有三种: WCDMA:全球80%以上的3G网络都是采用此种制式.中国联通运营.186 CDMA2000:目前日韩及北美使用较多.中国电信运营. 189 TD-SCDMA

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简