標籤:android
【該項目實訓是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 ;@Overrideprotected 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(){@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}//菜單點擊@Overridepublic 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);}@Overrideprotected void onResume() {super.onResume();if(app.userInfo!=null){setTitle("百米購["+app.userInfo.getUserName()+"]");}}/*退出時,情況購物車中的資料*/@Overrideprotected 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>
結束,下一篇,說明主介面中的三個子介面是如果實現的。
Android基礎知識【項目實訓】【4】