类微信界面实现(一)

作业目标:

  设计一个app门户框架,实现3~4个tab切换效果,并在任一tab页中实现列表效果

技术说明:

  activity,xml,fragment,recycleview

关键代码解析:

UI布局

基础界面框架:

  0.主显示界面:main.xml

 

 

  1:顶端"微信"显示:.res/layout/top.xml

 

  2.中部内容显示:.res/layout/tab1.xml~tab4.xml(点击底部按钮显示不同的中部内容)

 

  3.底端按钮选择:.res/layout/botton.xml

 

ps:

  在创建.xml文件时,Component Tree(组件树)中会出现 ConstraintLayout ,并且无法删除 (可忽略)

                                          

 

 解决办法:

*右击选择 Convert view

*选择所需-->Apply 

*选中组件,点击图标可更改样式

 

 

一:顶端:

 *将textView控件拖到LinearLayout控件中

 

 *在Code界面设置相关属性:文字内容,大小,颜色,位置,背景

*在设置完以上属性后可以发现,布局出现了问题,并没有如我们预想的那样,黑底白字的"微信"UI位于顶端

 *回到Design界面,拖动布局修改,在拖动的过程中又出现了问题:只可以修改宽,而高拖不动,观察发现textView的layout_weight(权重)设置为"1",而该控件又是"vertical",且只包含textView这一个控件,从而导致其强制铺满

解决办法:将layout_weight清除

    或 将layout的layout_wight设置为match_parent,layout_height设置为warp_content

*改正后发现"微信字样不居中

 ViewGroup.LayoutParams

 *查阅资料,发现可能是字体溢出问题导致无法自适应

  故而将TextView控件的layout_height设置为warp_content

  重新设置相关代码:

  在TextView模块设置文字内容,位置,颜色,大小

  在LinearLayout模块设置背景

 

 成功.

 二:中部

lab1.xml:

*拖入相关控件LinearLayout{textView}

 *设置textView控件属性:文字内容,大小,位置

 

 *复制粘贴,得到其它tap

 三.底部

*拖入相关控件(先完成一个,后续复制粘贴)

 *设置相关属性

 *复制粘贴修改参数

此时我们会发现,其间距不是等宽的,此时,我们采用设置权重(layout_weight)的方法来使其占比相同

layout_weight

   -->选中LinearLayout(V)

   -->在搜索框内输入"w",找到layout_wight,将其设置为"1"

   -->依次点击LineLayout,界面会停留,直接输入即可

也可以在代码中直接修改:

 

 !!!突然发现自己控件使用错误
是ImageButtons,而不是ImageView,修改该控件即可,此外还对TextView的布局进行了修改
修改后,如下:
 
03.10.13:在进行后续"按钮点击响应"操作的时候发现,这里可以是ImageView.
使用setOnClickListener来监听不同控件,以达到响应的目的.(在第二部分:UI交互)

 

 

 

 

四.主界面

include

*拖入相关控件

FrameLayout

*通过include使用编写好的布局

此时发现bottom.xml布局没有出现----->占比问题

故而接下来设置权重(layout_wight)

 *设置权重

 

 UI交互:

一:tab切换效果

目标:

  点击底部的图案,在中部响应对应的提示信息

  1.监听点击

  2.响应点击

  3.局部跳转

效果展示:

  

实现:

1.创建Fragment管理屏幕中部界面以达到局部响应的目的:

  在该目录下创建4个Fragment文件:Fragment1,Fragment2,Fragment3,Fragment4分别对应tab1,tab2,tab3,tab4

  (在创建Fragment文件时,其会自动生成对应的.xml文件,我们需要将其删除,并将参数(如下图红框中所示)设置成我们之前所编辑的tab.xml响应界面)

 2.点击响应功能实现

  *声明变量

  FragmentManager:管理Fragment,以及FragmentTransaction

   *主函数

     将各个Fragment实例化

     调用对应函数

     当不做任何操作时,默认展示第一个tab

 

  *初始化控件:

    此处我选择将linearlayout控件(其包含其他控件)作为我们的点击按钮监听,所以仅将其通过findViewById方法调用,传入资源id,连接对应的view,进行后续处理

 

  *添加Fragment:

    通过.add()的方法添加各个Fragment

    将所有的tab.xml加入到主界面

    因为此操作是以事务[FragmentTransaction]的形式,所以在完成操作后,需要注意事务的提交.commit();

  *初始化按钮(linearLayout)

    .setOnClickListener()达到监听点击-->响应点击的目的

    此处调用了我所编写的onClick()响应函数:

 

  *隐藏tab

    此处我们选择先全部隐藏,再根据监听的点击目标选择展示出对应的tab

  *点击响应

  判断点击响应对应view的资源id,给展示函数传入对应参数

 

  ps:关于此函数的实现:

    一开始我采用的是switch-case的语法,但是会报出以下错误:case语句后面必须是常量.是版本问题,所以此处改为if语句实现

 

  *tab展示

    在接收对应参数后展示对应的tab内容

    因为此操作是以事务[FragmentTransaction]的形式,所以在完成操作后,需要注意事务的提交.commit();

 3.具体过程:

  当我们点击目标控件范围内任何位置时,initBotton()中的.setOnClickListener函数监听到了该次点击,由于在initLinearLayout()中,我们通过findViewById方法调用,传入资源id,连接了对应的view.所以setOnClickListener函数将该view传入了onClick()中,onClick接收了对应的view,通过.getId()将其id与各个控件的id进行比对,当匹配成功后,调用showFragment()展示对应Fragment中的内容

 二:列表效果

目标:

  点击"通讯录",显示联系人列表.

  1.设计每行UI布局

  2.配置配适器

  3.实例化显示

效果展示:

  

 

 

实现:

  一:布局

    1.调整布局,加入recyclerview控件:

  

     2.为列表的每一行设定显示效果(格式)

 

二:配置:

   1:Adapter配适器设置
     *变量声明:

 
    *重写构造函数,传入数据:

     *设定每一行视图

       编写自己的holder[RecyclerView.ViewHolder]函数,为列表中的每一行数据设置静态格式,动态数据

       此处我选择将之前设定的item.xml(每行的显示UI设定)中的TextView控件作为传入数据的显示

 

 

 ps:注意继承问题

 

      *绑定具体数据:

        重写RecyclerView.Adapter类的onBindViewHolder()方法

 

      *构建ViewHolder,返回每一行的布局

 


      *返回列表中元素数量:

          

 

    2.显示

      ("通讯录"tab2.xml所对应的Fragment2中设定)

       *变量声明

     *获取RecyclerView对象

       *初始化数据

 

      *实例化Myadpter

       

 

 

 源码:

    https://github.com/TIANQIISGOOD/AS_weixin

 

        

      

        

 

posted @ 2023-10-08 09:42  44556677  阅读(63)  评论(0)    收藏  举报