> 文档中心 > HarmonyOS开发——我的通讯录

HarmonyOS开发——我的通讯录

概述:

        本次项目是我这个学期鸿蒙应用开发的结课作业。是根据平时所学内容以及自己手机上面的通讯录做出来的demo。

开发工具

        DevEco Studio

APP图标如下:

功能介绍:

        1. 具有显示联系人列表、添加联系人信息、删除联系人、修改联系人信息等功能;

        2.储存联系人信息时并未使用数据库,而是通过使用配置文件写入输入的数据,并进行读取或修改;

        3.还具有修改底部状态栏配色的功能。

实现功能的说明:

        1.在编辑时,只有输入姓名,才会出现确认按钮:实现这一操作,只需要检查姓名输入框中的内容是否为空,如果是空,则将该组件隐藏,如果不是空则将该组件设置为可见。

        2.实现底部配色主题得切换:将底部得配色归纳成四种Rgb配色,统一得存放在BottomBarColor.java文件中,使其保持static/final,并且编写相应得static函数操作。当用户选择了某个主题配色并点击“应用”按钮后,会调用设置相应得颜色,即可达到切换配色得目的。

项目文件结构图:

主要程序代码:

ability_main.xml:

                           

 ability_edit.xml:

                                                        

ability_config.xml:

                

MainAbilitySlice.java

package com.tdtxdcxm.telmanagesys.slice;import com.tdtxdcxm.telmanagesys.PeopleInfoConfig;import com.tdtxdcxm.telmanagesys.ResourceTable;import com.tdtxdcxm.telmanagesys.configcolor.BottomBarColor;import com.tdtxdcxm.telmanagesys.itemdata.PeopleItem;import com.tdtxdcxm.telmanagesys.provider.PeopleItemProvider;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.agp.colors.RgbColor;import ohos.agp.components.*;import ohos.agp.components.element.Element;import ohos.agp.components.element.ShapeElement;import ohos.agp.render.ColorMatrix;import ohos.agp.utils.Color;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.ToastDialog;import java.util.ArrayList;import java.util.List;public class MainAbilitySlice extends AbilitySlice {    private int idbut = -1;    private int i = 0;    private DirectionalLayout search_top_sublayout;    private TextField search_tfd;    private Button search_but;    private DirectionalLayout edit_top_sublayout;    private Button edit_deletebut,edit_resetbut,edit_okbut;    private DirectionalLayout config_top_sublayout;    private Button config_deletebut,config_resetbut,config_okbut;    private DirectionalLayout people_listcontainer_sublayout;    private ListContainer people_listcontainer;    private List list = new ArrayList();    private DirectionalLayout edit_area_rootdl;    private Text edit_nametext;    private Button edit_addtel_but,edit_addemail_but,edit_addwork_but,edit_addaddress_but;    private TextField edit_nametfd,edit_teltfd,edit_emailtfd,edit_worktfd,edit_addresstfd;    private DirectionalLayout config_area_rootdl;    private RadioContainer config_radioContainer;    private RadioButton bottombar_default,bottombar_dark,bottombar_light,bottombar_simple;    private DirectionalLayout main_rootdl_ddl1;    private DirectionalLayout main_rootdl_ddl2;    private DirectionalLayout main_rootdl_ddl3;    private Button ddl3_butpeople,ddl3_butedit,ddl3_butconfig;    public void initAndLoadSearch(DirectionalLayout ddl1){ ddl1.removeAllComponents(); search_top_sublayout = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_search_topsublayout,null,false); search_tfd = (TextField) search_top_sublayout.findComponentById(ResourceTable.Id_search_tfd); search_but = (Button) search_top_sublayout.findComponentById(ResourceTable.Id_search_but); /**/ ddl1.addComponent(search_top_sublayout);    }    public void initAndLoadEditTop(DirectionalLayout ddl1){ ddl1.removeAllComponents(); edit_top_sublayout = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_edit_topsublayout,null,false); edit_deletebut = (Button) edit_top_sublayout.findComponentById(ResourceTable.Id_edit_deletebut); edit_resetbut = (Button) edit_top_sublayout.findComponentById(ResourceTable.Id_edit_resetbut); edit_okbut = (Button) edit_top_sublayout.findComponentById(ResourceTable.Id_edit_okbut); edit_okbut.setVisibility(Component.HIDE); /**/ ddl1.addComponent(edit_top_sublayout);    }    public void initAndLoadConfigTop(DirectionalLayout ddl1){ ddl1.removeAllComponents(); config_top_sublayout = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_config_topsublayout,null,false); config_resetbut = (Button) config_top_sublayout.findComponentById(ResourceTable.Id_config_resetbut); config_okbut = (Button) config_top_sublayout.findComponentById(ResourceTable.Id_config_okbut); /**/ ddl1.addComponent(config_top_sublayout);    }    public void toastShow(String s){ ToastDialog toastDialog = new ToastDialog(this.getContext()); toastDialog.setText(s); toastDialog.setTransparent(true); toastDialog.setDuration(500); toastDialog.setAlignment(LayoutAlignment.CENTER); toastDialog.show();    }    public void installListContainer(DirectionalLayout ddl2){ System.out.println("开始装载listcontainer!!"); ddl2.removeAllComponents(); people_listcontainer_sublayout = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_people_listcontainerlayout,null,false); people_listcontainer = (ListContainer) people_listcontainer_sublayout.findComponentById(ResourceTable.Id_people_listcontainer); ddl2.addComponent(people_listcontainer_sublayout);    }    public void initListContainer(){ System.out.println("开始读出数据!"); PeopleInfoConfig.readData(this.getContext(),list); PeopleItemProvider peopleItemProvider = new PeopleItemProvider(list,this); people_listcontainer.setItemProvider(peopleItemProvider); people_listcontainer.setItemClickedListener(new ListContainer.ItemClickedListener() {     @Override     public void onItemClicked(ListContainer listContainer, Component component, int i, long l) {  Text item_text = (Text) component.findComponentById(ResourceTable.Id_item_text);  if(item_text.getText().equals("请添加联系人") == false){      Intent intent = new Intent();      intent.setParam("姓名",item_text.getText());      present(new PersonDetailSlice(),intent);  }  else{      toastShow("通讯录无联系人信息!");  }     } }); people_listcontainer.setItemLongClickedListener(new ListContainer.ItemLongClickedListener() {     @Override     public boolean onItemLongClicked(ListContainer listContainer, Component component, int i, long l) {  Text item_text = (Text) component.findComponentById(ResourceTable.Id_item_text);  item_text.setTextColor(Color.RED);  PeopleInfoConfig.deleteData(MainAbilitySlice.this.getContext(),item_text.getText());  PeopleInfoConfig.readData(MainAbilitySlice.this.getContext(),list);  peopleItemProvider.notifyDataChanged();  return true;     } });    }    public void installEditArea(DirectionalLayout ddl2){ ddl2.removeAllComponents(); edit_area_rootdl = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_edit,null,false); edit_nametext = (Text) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_nametext); edit_addtel_but = (Button) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_addtel_but); edit_addemail_but = (Button) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_addemail_but); edit_addwork_but = (Button) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_addwork_but); edit_addaddress_but = (Button) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_addaddress_but); edit_nametfd = (TextField) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_nametfd); edit_teltfd = (TextField) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_teltfd); edit_emailtfd = (TextField) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_emailtfd); edit_worktfd = (TextField) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_worktfd); edit_addresstfd = (TextField) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_addresstfd); /**/ /*"+edit_area_rootdl.getChildCount());  edit_area_rootdl.addComponent(edit_telanother_rootdl,i+1);  edit_addtel_but.setText("-");  edit_addtel_but.setTextColor(Color.RED);     } }); edit_addemail_but.setClickedListener(new Component.ClickedListener() {     @Override     public void onClick(Component component) {  if(edit_addemail_but.getText().equals("-")){      DirectionalLayout edit_emailanother_rootdl = (DirectionalLayout) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_emailanother_rootdl);      edit_area_rootdl.removeComponent(edit_emailanother_rootdl);      edit_addemail_but.setText("+");      edit_addemail_but.setTextColor(Color.GREEN);      return;  }  DirectionalLayout edit_email_dlyt = (DirectionalLayout) findComponentById(ResourceTable.Id_edit_email_dlyt);  DirectionalLayout edit_emailanother_rootdl = (DirectionalLayout) LayoutScatter.getInstance(MainAbilitySlice.this).parse(ResourceTable.Layout_ability_edit_emailsublayout,null,false);  int i = edit_area_rootdl.getChildIndex(edit_email_dlyt);  System.out.println("edit_area_rootdl.getChildCount()-->"+edit_area_rootdl.getChildCount());  edit_area_rootdl.addComponent(edit_emailanother_rootdl,i+1);  edit_addemail_but.setText("-");  edit_addemail_but.setTextColor(Color.RED);     } }); edit_addwork_but.setClickedListener(new Component.ClickedListener() {     @Override     public void onClick(Component component) {  if(edit_addwork_but.getText().equals("-")){      DirectionalLayout edit_workanother_rootdl = (DirectionalLayout) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_workanother_rootdl);      edit_area_rootdl.removeComponent(edit_workanother_rootdl);      edit_addwork_but.setText("+");      edit_addwork_but.setTextColor(Color.GREEN);      return;  }  DirectionalLayout edit_work_dlyt = (DirectionalLayout) findComponentById(ResourceTable.Id_edit_work_dlyt);  DirectionalLayout edit_workanother_rootdl = (DirectionalLayout) LayoutScatter.getInstance(MainAbilitySlice.this).parse(ResourceTable.Layout_ability_edit_worksublayout,null,false);  int i = edit_area_rootdl.getChildIndex(edit_work_dlyt);  System.out.println("edit_area_rootdl.getChildCount()-->"+edit_area_rootdl.getChildCount());  edit_area_rootdl.addComponent(edit_workanother_rootdl,i+1);  edit_addwork_but.setText("-");  edit_addwork_but.setTextColor(Color.RED);     } }); edit_addaddress_but.setClickedListener(new Component.ClickedListener() {     @Override     public void onClick(Component component) {  if(edit_addaddress_but.getText().equals("-")){      DirectionalLayout edit_addressanother_rootdl = (DirectionalLayout) edit_area_rootdl.findComponentById(ResourceTable.Id_edit_addressanother_rootdl);      edit_area_rootdl.removeComponent(edit_addressanother_rootdl);      edit_addaddress_but.setText("+");      edit_addaddress_but.setTextColor(Color.GREEN);      return;  }  DirectionalLayout edit_address_dlyt = (DirectionalLayout) findComponentById(ResourceTable.Id_edit_address_dlyt);  DirectionalLayout edit_addressanother_rootdl = (DirectionalLayout) LayoutScatter.getInstance(MainAbilitySlice.this).parse(ResourceTable.Layout_ability_edit_addresssublayout,null,false);  int i = edit_area_rootdl.getChildIndex(edit_address_dlyt);  System.out.println("edit_area_rootdl.getChildCount()-->"+edit_area_rootdl.getChildCount());  edit_area_rootdl.addComponent(edit_addressanother_rootdl,i+1);  edit_addaddress_but.setText("-");  edit_addaddress_but.setTextColor(Color.RED);     } }); /*****************************给四个添加按钮设置监听器****************************************>*/ ddl2.addComponent(edit_area_rootdl);    }    public void installConfigArea(DirectionalLayout ddl2){ ddl2.removeAllComponents(); config_area_rootdl = (DirectionalLayout) LayoutScatter.getInstance(this).parse(ResourceTable.Layout_ability_config,null,false); config_radioContainer = (RadioContainer) config_area_rootdl.findComponentById(ResourceTable.Id_config_radioContainer); bottombar_default = (RadioButton) config_area_rootdl.findComponentById(ResourceTable.Id_bottombar_default); bottombar_dark = (RadioButton) config_area_rootdl.findComponentById(ResourceTable.Id_bottombar_dark); bottombar_light = (RadioButton) config_area_rootdl.findComponentById(ResourceTable.Id_bottombar_light); bottombar_simple = (RadioButton) config_area_rootdl.findComponentById(ResourceTable.Id_bottombar_simple); config_radioContainer.mark(MainAbilitySlice.this.i); config_radioContainer.setMarkChangedListener(new RadioContainer.CheckedStateChangedListener() {     @Override     public void onCheckedChanged(RadioContainer radioContainer, int i) {  switch (i){      case 0:   toastShow("选择:"+bottombar_default.getText());   MainAbilitySlice.this.i = i;   break;      case 1:   toastShow("选择:"+bottombar_dark.getText());   MainAbilitySlice.this.i = i;   break;      case 2:   toastShow("选择:"+bottombar_light.getText());   MainAbilitySlice.this.i = i;   break;      case 3:   toastShow("选择:"+bottombar_simple.getText());   MainAbilitySlice.this.i = i;   break;      default:   break;  }     } }); ddl2.addComponent(config_area_rootdl);    }    public void initMASliceComponents(){ main_rootdl_ddl1 = (DirectionalLayout) findComponentById(ResourceTable.Id_main_rootdl_ddl1); main_rootdl_ddl2 = (DirectionalLayout) findComponentById(ResourceTable.Id_main_rootdl_ddl2); main_rootdl_ddl3 = (DirectionalLayout) findComponentById(ResourceTable.Id_main_rootdl_ddl3); ddl3_butpeople = (Button) findComponentById(ResourceTable.Id_ddl3_butpeople); main_rootdl_ddl3.setBackground(BottomBarColor.defaultShapeElement()); ddl3_butpeople.getBackgroundElement().setColorMatrix(new ColorMatrix(BottomBarColor.onclickfloats)); idbut = ResourceTable.Id_ddl3_butpeople; ddl3_butedit = (Button) findComponentById(ResourceTable.Id_ddl3_butedit); ddl3_butconfig = (Button) findComponentById(ResourceTable.Id_ddl3_butconfig); /**/    }    @Override    public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); System.out.println("开始了-----》》》》》》"); initMASliceComponents(); initAndLoadSearch(main_rootdl_ddl1); installListContainer(main_rootdl_ddl2); initListContainer();    }    @Override    protected void onInactive() { super.onInactive();    }    @Override    public void onActive() { super.onActive();    }    @Override    public void onForeground(Intent intent) { super.onForeground(intent);    }    @Override    protected void onBackground() { super.onBackground();    }    @Override    protected void onStop() { super.onStop();    }}

项目运行截图:

主页面:

添加人员页面:

修改信息页面:

修改底部状态栏页面:

总结:

        本次项目demo是我根据老师平时上课讲解以及借鉴了网上大佬的文章完成的,这次项目实战算是对自己学习一个学期之后的总结,从中我学到了很多。但是也有很多不足,比如当时希望能做出一个很耐看的界面,后面也只是草草了 事。理想和现实的差距,往往体现在能力的不足和人的惰性身上,也希望以后能够精益求精,对任何事情都能交出完美的答卷。