Android入门实践简单小项目:健康饮食

一、学习来源:

1.b站链接:Android基础项目开发–饮食搭配app
2.学习资源打包:https://pan.baidu.com/s/1uqQW8mM5AiHUkwRxEzS7lQ 提取码: 54vs
(侵删)

二、app功能展示及对应代码:

1.项目结构展示:
Android入门实践简单小项目:健康饮食_第1张图片
Android入门实践简单小项目:健康饮食_第2张图片

2.初始界面三个按钮
Android入门实践简单小项目:健康饮食_第3张图片
对应HomeMenuActivity代码:

package com.animee.health;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import com.animee.health.about.AboutActivity;
import com.animee.health.food_grid.FoodGridActivity;
import com.animee.health.food_list.InfoListActivity;
//初始界面
public class HomeMenuActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_menu);
    }

    public void onClick(View view) {//对按钮设置监听点击事件
        Intent intent = new Intent();
        switch (view.getId()){
            case R.id.home_btn1:
                intent.setClass(HomeMenuActivity.this, InfoListActivity.class);
                break;
            case R.id.home_btn2:
                intent.setClass(HomeMenuActivity.this, FoodGridActivity.class);
                break;
            case R.id.home_btn3:
                intent.setClass(HomeMenuActivity.this, AboutActivity.class);
                break;
        }
        startActivity(intent);
    }
}

对应的activity_home_menu布局文件:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/home_page"
    tools:context=".HomeMenuActivity"
    android:orientation="vertical"
    android:padding="20dp">
    <Button
        android:id="@+id/home_btn1"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="@mipmap/btn_food_list"
        android:layout_marginTop="180dp"
        android:onClick="onClick"/>
    <Button
        android:id="@+id/home_btn2"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="@mipmap/btn_food_nutriction"
        android:layout_marginTop="40dp"
        android:onClick="onClick"/>
    <Button
        android:id="@+id/home_btn3"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:background="@mipmap/btn_food_about"
        android:layout_marginTop="40dp"
        android:onClick="onClick"/>
LinearLayout>

3.食物搭配表界面:
Android入门实践简单小项目:健康饮食_第4张图片
对应的InfoListActivity:

package com.animee.health.food_list;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;

import com.animee.health.R;
import com.animee.health.bean.FoodBean;
import com.animee.health.bean.FoodUtils;
import com.animee.health.food_grid.FoodDescActivity;

import java.util.ArrayList;
import java.util.List;
//让整个Activity实现OnClickListener接口
public class InfoListActivity extends AppCompatActivity implements View.OnClickListener {
    EditText searchEt;
    ImageView searchIv,flushIv;
    ListView showLv;

    //ListView内部数据源
    List<FoodBean> mDatas;
    List<FoodBean> allFoodList;
    private InfoListAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_info_list);

        //1.查找控件
        initView();
        //2.找到ListView对应的数据源
        mDatas = new ArrayList<>();
        allFoodList = FoodUtils.getAllFooList();
        mDatas.addAll(allFoodList);
        //3.创建适配器 BaseAdapter的子类
        adapter = new InfoListAdapter(this,mDatas);
        //4.设置适配器
        showLv.setAdapter(adapter);
        //设置单项点击监听事件
        setListener();
    }

    private void setListener() {
        showLv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                FoodBean foodBean = mDatas.get(position);
                Intent intent = new Intent(InfoListActivity.this, FoodDescActivity.class);
                intent.putExtra("food",foodBean);
                startActivity(intent);
            }
        });
    }

    private void initView() {
        searchEt = findViewById(R.id.info_et_search);
        searchIv = findViewById(R.id.info_iv_search);
        flushIv = findViewById(R.id.info_iv_flush);
        showLv = findViewById(R.id.infolist_lv);
        searchIv.setOnClickListener(this);//添加搜索点击事件监听
        flushIv.setOnClickListener(this);//添加刷新点击事件监听
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.info_iv_flush://刷新点击
                searchEt.setText("   ");
                mDatas.clear();
                mDatas.addAll(allFoodList);
                adapter.notifyDataSetChanged();
                break;
            case R.id.info_iv_search://搜索点击
                //1.获取输入内容,判断不为空
                    String msg = searchEt.getText().toString().trim();//获取输入信息
                if (TextUtils.isEmpty(msg)) {//是空则不搜索
                    Toast.makeText(this,"输入内容不能为空",Toast.LENGTH_SHORT).show();
                    return;
                }
                //2.判断所有食物列表的标题是否包含输入内容,如果包含,就添加到小集合中
                List<FoodBean> list = new ArrayList<>();
                for (int i = 0; i < allFoodList.size() ; i++) {
                    String title = allFoodList.get(i).getTitle();
                    if (title.contains(msg)) {
                        list.add(allFoodList.get(i));
                    }
                }
                mDatas.clear();//清空listview的适配器数据源内容
                mDatas.addAll(list);//添加新的数据源
                adapter.notifyDataSetChanged();//提示适配器更新
                break;
        }
    }
}

对应的activity_info_list布局文件:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".food_list.InfoListActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:padding="10dp"
        android:background="@mipmap/search_background">
        <ImageView
            android:id="@+id/info_iv_flush"
            android:src="@mipmap/clear_btn"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <ImageView
            android:id="@+id/info_iv_search"
            android:src="@mipmap/search_btn"
            android:layout_toLeftOf="@id/info_iv_flush"
            android:layout_centerVertical="true"
            android:layout_marginRight="20dp"
            android:layout_marginLeft="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <EditText
            android:id="@+id/info_et_search"
            android:layout_toLeftOf="@id/info_iv_search"
            android:paddingLeft="20dp"
            android:textColor="@color/white"
            android:background="@drawable/info_et_bg"
            android:layout_centerVertical="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    RelativeLayout>

    <ListView
        android:id="@+id/infolist_lv"
        android:divider="@color/dividerColor"
        android:dividerHeight="1dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    ListView>
LinearLayout>

ListView对应的InfoListAdapter适配器:

package com.animee.health.food_list;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.animee.health.R;
import com.animee.health.bean.FoodBean;

import java.util.List;

public class InfoListAdapter extends BaseAdapter {
    Context context;
    List<FoodBean> mDatas;

    public InfoListAdapter(Context context, List<FoodBean> mDatas) {
        this.context = context;
        this.mDatas = mDatas;
    }
//决定了ListView列表展示的行数
    @Override
    public int getCount() {
        return mDatas.size();
    }
//返回指定位置对应的数据
    @Override
    public Object getItem(int position) {
        return mDatas.get(position);
    }
//返回指定位置所对应的id
    @Override
    public long getItemId(int position) {
        return position;
    }
//返回指定位置所对应的view
//将已经滑动出去的列表项复用优化
    @Override
    public View getView(int i, View convertView, ViewGroup viewGroup) {
        //对包含了控件的类进行声明
        ViewHolder holder = null;
        if (convertView == null){//第一次创建,没有复用的
            //将布局转化为view对象
            convertView = LayoutInflater.from(context).inflate(R.layout.item_infolist_lv,null);
            //初始化holder
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        }else{//如果内存已经有滑动出去的ListView
            holder = (ViewHolder)convertView.getTag();
        }
        //加载控件当中的显示
        //获取集合指定位置的数据
        FoodBean foodBean = mDatas.get(i);
        holder.titleTv.setText(foodBean.getTitle());
        holder.notTv.setText("不可匹配:"+foodBean.getNotmatch());
        holder.iv.setImageResource(foodBean.getPicId());
        return convertView;
    }
    //view所有的类进行封装
    class ViewHolder{
        ImageView iv;
        TextView titleTv,notTv;
        public ViewHolder(View view){
            iv = view.findViewById(R.id.item_info_iv);
            titleTv = view.findViewById(R.id.item_info_tv_title);
            notTv = view.findViewById(R.id.item_info_tv_notmatch);
        }
    }
}

另外:在食物搭配表界面,点击listview选项后会呈现该食物的详细信息,例如,点击猪肉:
Android入门实践简单小项目:健康饮食_第5张图片
对应的FoodDescActivity:

package com.animee.health.food_grid;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.animee.health.R;
import com.animee.health.bean.FoodBean;

public class FoodDescActivity extends AppCompatActivity {
    TextView titleTv1,titleTv2,descTv,notTv;
    ImageView backIv,bigPicIv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_desc);
        initView();
        //接收上一级页面传来的数据
        Intent intent = getIntent();
        FoodBean foodBean = (FoodBean) intent.getSerializableExtra("food");
        //设置显示控件
        titleTv1.setText(foodBean.getTitle());
        titleTv2.setText(foodBean.getTitle());
        descTv.setText(foodBean.getDesc());
        notTv.setText(foodBean.getNotmatch());
        bigPicIv.setImageResource(foodBean.getPicId());
    }

    private void initView() {
        titleTv1 = findViewById(R.id.fooddesc_tv_title);
        titleTv2 = findViewById(R.id.fooddesc_tv_title2);
        descTv = findViewById(R.id.fooddesc_tv_desc);
        notTv = findViewById(R.id.food_tv_not);
        backIv = findViewById(R.id.fooddesc_iv_back);
        bigPicIv = findViewById(R.id.fooddesc_iv_bigpic);

        backIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();//销毁当前的activity
            }
        });
    }
}

对应的activity_food_desc布局文件:

package com.animee.health.food_grid;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.animee.health.R;
import com.animee.health.bean.FoodBean;

public class FoodDescActivity extends AppCompatActivity {
    TextView titleTv1,titleTv2,descTv,notTv;
    ImageView backIv,bigPicIv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_desc);
        initView();
        //接收上一级页面传来的数据
        Intent intent = getIntent();
        FoodBean foodBean = (FoodBean) intent.getSerializableExtra("food");
        //设置显示控件
        titleTv1.setText(foodBean.getTitle());
        titleTv2.setText(foodBean.getTitle());
        descTv.setText(foodBean.getDesc());
        notTv.setText(foodBean.getNotmatch());
        bigPicIv.setImageResource(foodBean.getPicId());
    }

    private void initView() {
        titleTv1 = findViewById(R.id.fooddesc_tv_title);
        titleTv2 = findViewById(R.id.fooddesc_tv_title2);
        descTv = findViewById(R.id.fooddesc_tv_desc);
        notTv = findViewById(R.id.food_tv_not);
        backIv = findViewById(R.id.fooddesc_iv_back);
        bigPicIv = findViewById(R.id.fooddesc_iv_bigpic);

        backIv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();//销毁当前的activity
            }
        });
    }
}

对应的每种食物FoodBean类:

package com.animee.health.bean;

import java.io.Serializable;

public class FoodBean implements Serializable {
    //Serializable接口是启用其序列化功能的接口。
    //实现java.io.Serializable 接口的类是可序列化的。
    // 没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化。
    private String title;
    private String notmatch;
    private String desc;
    private int picId;

    public FoodBean(String title, String notmatch, String desc, int picId) {
        this.title = title;
        this.notmatch = notmatch;
        this.desc = desc;
        this.picId = picId;
    }
    public FoodBean(){

    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getNotmatch() {
        return notmatch;
    }

    public void setNotmatch(String notmatch) {
        this.notmatch = notmatch;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    public int getPicId() {
        return picId;
    }

    public void setPicId(int picId) {
        this.picId = picId;
    }
}

初始化食物对应信息的FoodUtils类:

package com.animee.health.bean;

import com.animee.health.R;

import java.util.ArrayList;
import java.util.List;

public class FoodUtils {
    private static final String[] food = { "猪肉", "猪肝", "猪血", "羊肉", "牛肉", "牛肝", "鹅肉", "兔肉", "狗肉",
            "鸭肉", "鸡肉", "驴肉", "鸡蛋", "鲤鱼", "黄鱼", "虾", "虾皮", "螃蟹", "蛤", "鳖肉",
            "田螺", "大蒜", "葱", "萝卜", "芹菜", "韭菜", "菠菜", "莴笋", "竹笋", "西红柿", "洋葱",
            "醋", "茶", "豆浆", "红糖", "蜂蜜", "牛奶", "白酒", "啤酒" };
    private static final String[] food1 = { "黄莲", "荞麦 雀肉 豆芽", "何首乌 地黄 黄豆 海带", "醋 红豆 半夏 南瓜",
            "橄榄 板粟 韭菜 ", "鲇鱼 鳗鱼 柿子", "狗肉 鲤鱼 柑橘", "鲤鱼 绿豆", "鳖", "鲤鱼", "金针菇",
            "豆浆 兔肉", "甘草 麦冬", "荞麦面 ", "富含维生素C的食物", "红枣 黄豆",
            "梨 柿子 茄子 花生仁 石榴 香瓜 芹菜 蜂蜜 西红柿", "芹菜 ", "鸭肉", "香瓜 木耳 牛肉 蚕豆 玉米",
            "地黄 何首乌 白术", "枣", "橘子 木耳", "黄瓜 蚬、蛤、蟹", "牛肉", "豆腐 鳝鱼 黄瓜", "蜂蜜",
            "糖浆", "白酒", "蜂蜜", "胡萝卜", "酒", "蜂蜜", "竹笋", "皮蛋", "豆腐 韭菜",
            "钙片果汁  药物 韭菜 柠檬", "胡萝卜 核桃 啤酒 红薯", "海鲜" };
    private static final int[] resId = { R.mipmap.pork, R.mipmap.pigliver, R.mipmap.pigblood,
            R.mipmap.lamb, R.mipmap.beef, R.mipmap.beefliver,
            R.mipmap.goose, R.mipmap.rabbit, R.mipmap.dog,
            R.mipmap.duck, R.mipmap.chicken, R.mipmap.donkey,
            R.mipmap.egg, R.mipmap.carp, R.mipmap.yellowfish,
            R.mipmap.shrimp, R.mipmap.shrimp2, R.mipmap.crab,
            R.mipmap.clam, R.mipmap.turtle, R.mipmap.riversnail,
            R.mipmap.garlic, R.mipmap.onion, R.mipmap.radish,
            R.mipmap.celery, R.mipmap.leek, R.mipmap.spinach,
            R.mipmap.lettuce, R.mipmap.bamboo, R.mipmap.tomato,
            R.mipmap.foreignonion, R.mipmap.vinegar, R.mipmap.tea,
            R.mipmap.beanmilk, R.mipmap.brownsuger, R.mipmap.honey,
            R.mipmap.milk, R.mipmap.whitespirit, R.mipmap.beer };
    private static final String [] foodjianjie={"猪肉是目前人们餐桌上最常见的肉类食物之一,猪瘦肉中富含铁,容易被人体吸收,能预防贫血。猪肉味甘咸,性平,有补虚、滋阴、养血、润燥的功效。"
            ,"猪肝味甘、苦,性温,归肝经。猪肝富含多种营养素,是预防缺血性贫血的首选食品,猪肝中的铁容易被人体吸收,是理想的补肝、明目、养血的食品。"
            ,"猪血味甘、苦,性温,有解毒清肠、补血美容的功效。猪血富含维生素B2、维生素C、蛋白质、铁、磷、钙、尼克酸等营养成分。",
            "羊肉味甘、性温,具有补虚劳,祛寒冷,温补气血;益肾气,补形衰,开胃健力的功效。用于气血不足、腹部冷痛、体虚怕冷、腰膝酸痛、面黄肌瘦、血气两亏等一切虚状均有补益效果,最适宜冬季食用。",
            "牛肉有补中益气,滋养脾胃,强健筋骨,化痰息风,止渴止涎之功效。牛肉富含蛋白质,而脂肪少,氨基酸组成比猪肉更接近人体需要,能提高机体抗病能力。",
            "养血,补肝,明目。牛肝中铁质丰富,是补血食品中最常用的食物。"
            ,"鹅肉含有人体生长发育所必需的各种氨基酸,其组成接近人体所需氨基酸的比例,从生物学价值上来看,鹅肉是是理想的高蛋白、低脂肪、低胆固醇的营养健康食品,其亚麻酸含量超过其它肉类。鹅肉性平、味甘,具有益气补虚,和胃止渴的功效。",
            "兔肉质地细嫩,味道鲜美,营养丰富,与猪牛、羊肉相比较,兔肉营养成分独特,具有高铁、高钙、高磷脂和低脂肪、低胆固醇等特点,并且具有很高的消化率(可达85%),食后极易被消化吸收。",
            "狗肉温补脾胃、补肾助阳、壮力气、补血脉。狗肉不仅蛋白质含量高,而且蛋白质质量极佳,尤以球蛋白比例大,对增强机体抗病力和细胞活力及器官功能有明显作用。",
            "富含蛋白质、脂肪、铁、钾、糖等多种营养成分。其饱和脂肪酸的含量比猪肉、牛肉、羊肉少得多,脂肪酸熔点低,易于消化。所含胆固醇比鱼还要低一些。《本草纲目》记载:鸭肉主大补虚劳,最消毒热,利小便,除水肿,消胀满,利脏腑,退疮肿,定惊痫。",
            "鸡肉含丰富蛋白质,种类多,其含量比猪、牛、羊肉都高,而脂肪含量比其它肉类低,且多为不饱和脂肪酸,营养价值高,消化率高,很容易被人体吸收利用,有增强体力、强壮身体的作用。",
            "驴肉富含蛋白质,而且含有动物胶、骨胶原、钙、硫等成分,其中含有的高级不饱和脂肪酸,尤其是亚油酸、亚麻酸,对动脉硬化、冠心病、高血压有着良好的保健作用。中医认为:驴肉性味甘凉,有补气养血、滋阴壮阳、安神去烦功效。",
            "鸡蛋被认为是营养丰富的食品,含有蛋白质、脂肪、卵黄素、卵磷脂、维生素和铁、钙、钾等人体所需要的矿物质。鸡蛋味甘、性平,具有养心安神、补血、滋阴润燥的功效。",
            "鲤鱼的蛋白质不但含量高,而且质量也佳,人体消化吸收率可达96%,并能供给人体必需的氨基酸、矿物质、维生素A和维生素D。鲤鱼味甘、性平,具有健脾开胃、消水肿、利小便的作用。",
            "黄鱼含有丰富的蛋白质、微量元素和维生素,对人体有很好的补益作用。中医认为,黄鱼有和胃止血、益肾补虚、健脾开胃、安神止痢、益气填精之功效,对贫血、失眠、头晕、食欲不振及妇女产后体虚有良好疗效。",
            "虾营养极为丰富,含蛋白质是鱼、蛋、奶的几倍到几十倍;还含有丰富的钾、碘、镁、磷等矿物质及维生素A、氨茶碱等成分。",
            "虾皮中含有丰富的蛋白质和矿物质,尤其是钙的含量极为丰富,是缺钙者补钙的较佳途径之一。",
            "螃蟹含有丰富的蛋白质及钙、磷、铁等微量元素,对身体有很好的滋补作用。中医学认为螃蟹性寒、味咸,有清热、散血结、续断伤、理经脉和滋阴等功用;其壳可清热解毒、破淤清积止痛。",
            "肉味鲜美、营养丰富,蛋白质含量高,氨基酸的种类组成及配比合理; 脂肪含量低,不饱和脂肪酸较高,易被人体消化吸收。蛤味咸、性寒,有滋阴、利水、化痰、软坚的功效。",
            "鳖肉偏于滋阴补肾、补虚。是久病体弱,消瘦无力等人群的食疗佳品。鳖味咸、性平,具有滋阴凉血、平肝益气、散结软坚、消淤等功效。",
            "含蛋白质、脂肪、碳水化合物、钙、磷、铁、硫胺素、核黄素、尼克酸、维生素。田螺味咸、性寒,有清热利水、除湿解读的功效。",
            "大蒜含有丰富的营养成分,尤其是具有独特生物活性的蒜素等含硫化合物及硒蛋白等功能成分,这些物质具有显著的医用和食用价值。中医理论认为,大蒜生者辛热、熟者甘温,可除寒湿、怯阴邪、下气暖中、消谷化积、破恶血、攻冷积。",
            "葱的主要营养成分是蛋白质、糖类、维生素A原(主要在绿色葱叶中含有)、食物纤维以及磷、铁、镁等矿物质等。中医记载:葱能发汗解表,散寒通阳,解毒散凝。主治风寒感冒轻症,痈肿疮毒,痢疾脉微,寒凝腹痛,小便不利等病症。",
            "萝卜含有丰富的碳水化合物、纤维素、维生素C及钙、磷、钾、铁等矿物质,营养丰富;萝卜还有促进新陈代谢,增进食欲的作用,对于治疗消化不良、胃脘胀满、咳嗽多痰、胸闷气喘、伤风感冒有一定的疗效。",
            "芹菜含有蛋白质、脂肪、碳水化合物、纤维素、维生素、矿物质等营养成分。其中,维生素B、P的含量较多。矿物质元素钙、磷、铁的含量更是高于一般绿色蔬菜。",
            "韭菜性温,味辛,具有补肾起阳作用,且含有大量维生素和粗纤维,能增进胃肠蠕动,治疗便秘。",
            "菠菜含水量高(90%~93%),而热量低,是镁、铁、钾和维生素A的优质来源;也是钙和维生素C的上等来源。所含的磷、锌、叶酸和维生素B6也较为丰富。菠菜中含有的维生素C能够提高铁的吸收率,并促进铁与造血的叶酸共同作用,有效地预防贫血症。",
            "莴苣含蛋白质、脂粉、碳水化合物、钙、磷、铁、胡萝卜素、及维生素B、维生素C、尤其含烟酸较多。莴苣味道清新且略带苦味,可刺激消化酶分泌,增进食欲。其乳状浆液,可增强胃液、消化腺的分泌和胆汁的分泌,从而促进消化。",
            "具有滋阴凉血、和中润肠、清热化痰、解渴除烦、清热益气、利隔爽胃、利尿通便、解毒透疹、养肝明目、消食的功效,还可开胃健脾,宽肠利膈,通肠排便,开膈豁痰,消油腻,解酒毒。",
            "番茄富含维生素C,其含有的番茄红素有利尿和抑制细菌生长的作用,是优良的抗氧化剂,多吃番茄具有抗衰老作用,使皮肤保持白皙。西红柿味酸微甘、性平,具有生津止渴,健胃消食,凉血平肝,清热解毒,降低血压之功效。",
            "洋葱所含的微量元素硒是一种很强的抗氧化剂,能清除体内的自由基,增强细胞的活力和代谢能力,具有抗衰老的功效。",
            "醋可以开胃,促进唾液和胃液的分泌,帮助消化吸收,使食欲旺盛,消食化积。醋还有很好的抑菌和杀菌作用,能有效预防肠道疾病、流行性感冒和呼吸疾病。",
            "茶叶内含化合物500种左右,有些是人体必需的营养成分。如维生素类、蛋白质、氨基酸、类脂类、糖类及矿物质元素等,对人体有较高营养价值。有些是对人体有保健和药用价值的成分,如茶多酚、咖啡碱、脂多糖等,常喝茶有利于人体健康。",
            "豆浆含有丰富的植物蛋白,磷脂,维生素B1、B2,烟酸和铁、钙等矿物质,尤其是钙的含量,虽不及豆腐高,但比其他任何乳类都丰富。豆浆是防治高血脂、高血压、动脉硬化等疾病的理想食品。",
            "红糖中所含有的葡萄糖、果糖等多种单糖和多糖类能量物质,为人体提供能量。",
            "蜂蜜含有70%以上的转化糖,能够被人体肠壁细胞直接吸收利用,没有必要经人体消化,经常服用蜂蜜,能帮助消化。",
            "牛奶的营养成分很高,牛奶中的矿物质种类也非常丰富,除了我们所熟知的钙以外,磷、铁、锌、铜、锰、钼的含量都很多。牛奶是人体钙的最佳来源,而且钙磷比例非常适当,利于钙的吸收。牛奶中含组成人体蛋白质的氨基酸有20种,其中有8种是人体本身不能合成的,为必需氨基酸,牛奶是人类最理想的天然食品。",
            "白酒主要由水乙醇和少量微量元素组成。夜晚服用少量的白酒,可平缓的促进血液循环,起到催眠作用。饮少量白酒可刺激胃液分泌与唾液分泌,因而起到健胃和止疼痛、利小便及驱虫的作用。白酒味苦、甘、辛,性温,有毒,入心、肝、肺、胃经。",
            "啤酒营养丰富,其中含有丰富的氨基酸,是原料大麦含有的蛋白质经过酶的作用分解而产生的。且啤酒中还含有多种维生素。适量饮啤酒有强心、利尿、健胃的功效。"};


    //数据源生成
    public static List<FoodBean> getAllFooList(){
        List<FoodBean> list = new ArrayList<>();
        for (int i = 0; i < food.length; i++) {
            FoodBean bean = new FoodBean(food[i],food1[i],foodjianjie[i],resId[i]);
            list.add(bean);
        }
        return list;
    }
}

4.食物营养表界面:
Android入门实践简单小项目:健康饮食_第6张图片
对应的FoodGridActivity:

package com.animee.health.food_grid;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

import com.animee.health.R;
import com.animee.health.bean.FoodBean;
import com.animee.health.bean.FoodUtils;
import com.animee.health.food_list.InfoListActivity;

import java.util.List;

public class FoodGridActivity extends AppCompatActivity {
    GridView gv;
    List<FoodBean> mDatas;
    private FoodGridAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_food_grid);
        gv = findViewById(R.id.food_grid_gv);
        //找数据源
        mDatas = FoodUtils.getAllFooList();
        //创建适配器对象
        adapter = new FoodGridAdapter(this,mDatas);
        //设置适配器
        gv.setAdapter(adapter);
        //设置单项点击监听事件
        setListener();
    }
    private void setListener() {
        gv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                FoodBean foodBean = mDatas.get(position);
                Intent intent = new Intent(FoodGridActivity.this, FoodDescActivity.class);
                intent.putExtra("food",foodBean);
                startActivity(intent);
            }
        });
    }
}

对应的activity_food_grid布局文件:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".food_grid.FoodGridActivity">
    <RelativeLayout
        android:id="@+id/food_grid_layout"
        android:background="@mipmap/search_background"
        android:layout_width="match_parent"
        android:layout_height="60dp">
        <TextView
            android:layout_centerInParent="true"
            android:text="健康饮食"
            android:textSize="20dp"
            android:textStyle="bold"
            android:textColor="@color/white"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    RelativeLayout>

    <GridView
        android:id="@+id/food_grid_gv"
        android:numColumns="2"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    GridView>
LinearLayout>

注意:点击食物营养表的listview选项,和食物搭配表点击效果一样,会呈现该食物的详细信息

5.关于本软件界面:
Android入门实践简单小项目:健康饮食_第7张图片
对应的AboutActivity文件:

package com.animee.health.about;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.animee.health.R;

import java.util.ArrayList;
import java.util.List;

public class AboutActivity extends AppCompatActivity implements View.OnClickListener {
    ViewPager aboutVp;
    TextView shareTv;
    LinearLayout pointLayout;
    List<View> viewList;//ViewPager的数据源
    int[] picIds = {R.mipmap.ab1,R.mipmap.ab2,R.mipmap.ab3,R.mipmap.ab4,R.mipmap.ab5};//图片存放数组
    private AboutAdapter adapter;
    List<ImageView> pointList;//存放显示器小点点的集合

    //定时切换页面,实现自动播放,
    Handler handler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            if (msg.what == 1) {
                //接收到消息之后,要使viewPager页面向下滑动一页
                int currentItem = aboutVp.getCurrentItem();
                aboutVp.setCurrentItem(currentItem+1);
                handler.sendEmptyMessageDelayed(1,4000);
            }
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_about);
        aboutVp = findViewById(R.id.about_vp);
        shareTv = findViewById(R.id.about_tv_share);
        pointLayout = findViewById(R.id.about_layout_point);
        shareTv.setOnClickListener(this);
        viewList = new ArrayList<>();
        pointList = new ArrayList<>();

        //初始化ViewPager的页面信息
        for (int i = 0; i < picIds.length; i++) {
            View view = LayoutInflater.from(this).inflate(R.layout.item_aboutvp,null);
            ImageView iv = view.findViewById(R.id.item_aboutvp_iv);
            //显示内容
            iv.setImageResource(picIds[i]);
            //放进集合当中
            viewList.add(view);

            //创建指示器内容
            ImageView pointIv = new ImageView(this);
            //在代码中设置控件的宽高和外边距等属性
            LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                    LinearLayout.LayoutParams.WRAP_CONTENT);
            lp.setMargins(0,0,20,0);
            //将布局参数设置给ImageView
            pointIv.setLayoutParams(lp);
            pointIv.setImageResource(R.mipmap.a2);
            pointList.add(pointIv);//添加到集合当中便于统一管理
            pointLayout.addView(pointIv);//添加到布局当中显示出来
        }
        pointList.get(0).setImageResource(R.mipmap.a3);//设置第一个小圆点为选中状态

        //创建适配器对象
        adapter = new AboutAdapter(viewList);
        //设置适配器
        aboutVp.setAdapter(adapter);
        //发送切换页面消息,自己发送消息自己接收
        handler.sendEmptyMessageDelayed(1,4000);
        //设置viewPager页面监听器
        setVPListener();
    }

    private void setVPListener() {
        //设置viewPager页面监听器
        aboutVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            //页面发生滚动时,自动调用的方法,一般不用
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            //表示正被选中的
            @Override
            public void onPageSelected(int position) {
                for (int i = 0; i < pointList.size(); i++) {
                    pointList.get(i).setImageResource(R.mipmap.a2);//所有的改成白色
                }
                //选中的改成红色
                pointList.get(position%pointList.size()).setImageResource(R.mipmap.a3);
            }

            //表示滚动的状态
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }

    @Override
    //分享按钮的监听事件
    public void onClick(View view) {
        //调用系统自带的分享功能,固定格式
        //隐式Intent
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        String msg = "健康饮食非常重要,了解饮食让你变得更健康,快来下载健康饮食app";
        intent.putExtra(Intent.EXTRA_TEXT,msg);
        startActivity(Intent.createChooser(intent,"健康饮食分享"));
     }
}

对应的activity_about布局文件:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".about.AboutActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/about_vp"
        android:layout_width="match_parent"
        android:layout_height="230dp">
    androidx.viewpager.widget.ViewPager>

    <LinearLayout
        android:id="@+id/about_layout_point"
        android:orientation="horizontal"
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    LinearLayout>

    <TextView
        android:id="@+id/about_version"
        android:text="当前版本:1.0"
        android:drawableLeft="@mipmap/icon_door"
        android:gravity="center_vertical"
        android:textSize="18sp"
        android:textStyle="bold"
        android:drawablePadding="20dp"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:background="#000000"
        android:layout_width="match_parent"
        android:layout_height="1dp"/>

    <TextView
        android:id="@+id/about_tv_tel"
        android:text="联系电话:13803837332"
        android:drawableLeft="@mipmap/icon_phone"
        android:gravity="center_vertical"
        android:textSize="18sp"
        android:textStyle="bold"
        android:drawablePadding="20dp"
        android:layout_marginTop="10dp"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:background="#000000"
        android:layout_width="match_parent"
        android:layout_height="1dp"/>

    <TextView
        android:id="@+id/about_tv_address"
        android:text="公司地址:郑州大学新校区"
        android:drawableLeft="@mipmap/icon_world"
        android:gravity="center_vertical"
        android:textSize="18sp"
        android:textStyle="bold"
        android:drawablePadding="20dp"
        android:layout_marginTop="10dp"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <TextView
        android:background="#000000"
        android:layout_width="match_parent"
        android:layout_height="1dp"/>

    <TextView
        android:id="@+id/about_tv_share"
        android:text="分享软件"
        android:drawableLeft="@mipmap/icon_flash"
        android:gravity="center_vertical"
        android:textSize="18sp"
        android:textStyle="bold"
        android:drawablePadding="20dp"
        android:layout_marginTop="10dp"
        android:padding="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
LinearLayout>

你可能感兴趣的:(Android,android,studio,android)