Android Studio实现仿微信APP门户界面详解及源码

作者:一个丧乐的野指针 时间:2022-06-29 20:08:52 

前言

你好! 本文章主要介绍如何用Android Studio制作简易的门户界面,主要说明框架的各部分功能与实现过程,结尾处附有源码。

界面分析

注:按钮图标是从阿里矢量图标库获取,保存在drawable文件中调用。

Android Studio实现仿微信APP门户界面详解及源码

首先根据我们的大致规划布局,我们可以先建立三个核心XML文件:
top.xml:


<?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">

<LinearLayout
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:orientation="vertical">

<TextView
           android:id="@+id/textView2"
           android:layout_width="match_parent"
           android:layout_height="60dp"
           android:background="#070707"
           android:gravity="center"
           android:text="奶茶小样"
           android:textAppearance="@style/TextAppearance.AppCompat.Body2"
           android:textColor="#F8F5F5"
           android:textSize="26sp"
           android:textStyle="bold"
           android:typeface="monospace" />
   </LinearLayout>
</LinearLayout>

bottom.xml:


<?xml version="1.0" encoding="utf-8"?>
<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="100dp"
   android:background="#0B0B0B"
   android:baselineAligned="false"
   android:gravity="center|center_horizontal">

<LinearLayout
       android:id="@+id/bottom_zhenzhu_bar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center|center_horizontal"
       android:orientation="vertical">

<ImageButton
           android:id="@+id/bottom_zhenzhu_image"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:background="@color/black"
           android:clickable="false"
           android:contentDescription="@string/app_name"
           android:src="@drawable/zhenzhu" />
       <!--            tools:srcCompat="@drawable/Zhengzhou" />-->

<TextView
           android:id="@+id/bottom_zhenzhu_text"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:text="珍珠"
           android:textColor="#FBFBFB"
           android:textSize="24sp" />
   </LinearLayout>

<LinearLayout
       android:id="@+id/bottom_chadong_bar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:orientation="vertical">

<ImageButton
           android:id="@+id/bottom_chadong_image"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:background="@color/black"
           android:clickable="false"
           android:contentDescription="@string/app_name"
           android:src="@drawable/milktea1"
           tools:srcCompat="@drawable/milktea1" />

<TextView
           android:id="@+id/bottom_chadong_text"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:text="茶冻"
           android:textColor="#FBFAFA"
           android:textSize="24sp" />
   </LinearLayout>

<LinearLayout
       android:id="@+id/bottom_naigai_bar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:orientation="vertical">

<ImageButton
           android:id="@+id/bottom_naigai_image"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:background="@color/black"
           android:clickable="false"
           android:contentDescription="@string/app_name"
           android:src="@drawable/milktea2"
           tools:srcCompat="@drawable/milktea2" />

<TextView
           android:id="@+id/bottom_naigai_text"
           android:layout_width="wrap_content"
           android:layout_height="match_parent"
           android:layout_weight="1"
           android:gravity="center"
           android:text="奶盖"
           android:textColor="#FBF8F8"
           android:textSize="24sp" />
   </LinearLayout>

<LinearLayout
       android:id="@+id/bottom_buding_bar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_weight="1"
       android:gravity="center"
       android:orientation="vertical">

<ImageButton
           android:id="@+id/bottom_buding_image"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:background="@color/black"
           android:clickable="false"
           android:contentDescription="@string/app_name"
           android:src="@drawable/milktea3"
           tools:srcCompat="@drawable/milktea3" />

<TextView
           android:id="@+id/bottom_buding_text"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_weight="1"
           android:text="布丁"
           android:textColor="#FAF8F8"
           android:textSize="24sp" />
   </LinearLayout>

</LinearLayout>

lactivity_main.xml:


<?xml version="1.0" encoding="utf-8"?>
<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:id="@+id/linearLayout"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:clickable="true"
   android:orientation="vertical"
   tools:context=".MainActivity">

<include
       layout="@layout/top"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

<FrameLayout
       android:id="@+id/id_content"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_weight="1">

</FrameLayout>

<include
       layout="@layout/bottom"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />

</LinearLayout>

注意:在top.xml和bottom.xml文件写好后,将其插入到lactivity_main.xml文件的头尾位置,并在中间加入FrameLayout来设置之后的Fragment文件切换。

界面动态实现代码

目录结构:

Android Studio实现仿微信APP门户界面详解及源码

MainActivity:
建立相关变量:


private Fragment zhenzhuFragment=new zhenzhuFragment();
   private Fragment naigaiFragment=new naigaiFragment();
   private Fragment budingFragment=new budingFragment();
   private Fragment chadongFragment=new chadongFragment();

private FragmentManager fragmentManager;
   private LinearLayout mTzhenzhu,mTchadong,mTnaigai,mTbuding;
   private ImageButton mTmgZhenZhu;
   private ImageButton mTmgChaDong;
   private ImageButton mTmgNaiGai;
   private ImageButton mTmgBuDing;

private TextView text_zhenzhu;
   private TextView text_chadong;
   private TextView text_naigai;
   private TextView text_buding;

主要函数方法:

Android Studio实现仿微信APP门户界面详解及源码

OnCreate: 利用我们在XML文件中定义的View的id属性来获取相应的View对象,并且加上View.OnClickListener接口,使下方生成的OnClick()方法自动匹配相应,同时在此函数中我们有添加了相应的 * 。
initFragment:
我们为了实现界面切换,需定义Fragment文件,因为我们的转换界面有4种,故我们总共需要5个fragment文件。
wechatFragemt:


public class wechatFragment extends Fragment {

public wechatFragment() {
       // Required empty public constructor
   }
 @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
       // Inflate the layout for this fragment
       return inflater.inflate(R.layout.fragment_wechat, container, false);
   }
}

其余四个文件大致上与此文件相似,但其中的onCreateView函数应根据我们自己配置的XML文件而有所不同,例如:
budingFragment:


public class budingFragment extends Fragment {
   public budingFragment(){

}
   @Override
   public View onCreateView( LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
       return inflater.inflate(R.layout.buding_fragment_wechat,container,false);
   }
}

我们可以看到,此函数的返回值是根据XML文件而作出改变,如果忽视,界面转换将会失败。
initFragment函数主要作用就是向之前的lacitivity_main.xml文件中的Fragment部分添加我们要做切换的代码。

showfagment: 我们在此函数中通过调用索引值来设置相应的界面效果代码,例如Fragment界面展示、图片的改变、字体的设置。(由于我选择的按钮图片颜色过于鲜艳,故无法实现点击时的亮暗转换,为了体现按钮被点击,我设置了当点击按钮时字体颜色会发生变化作为替代)

hideFragment:顾名思义,此函数是为了隐藏Fragment,配合showFragment函数只显示我们目前需要显示的Fragment。

onClick:前面在介绍OnCreate函数时说过,是由View.OnClickListener接口生成,设置我们的点击过程,并且此函数调用showFragment,完全控制我们制作的界面转换流程。

静态界面实现

目录结构:

Android Studio实现仿微信APP门户界面详解及源码

三个核心文件在前面已经介绍过,在此不做过多解释,如果不清楚可翻到上面去查看。根据上述创建5个Fragment文件,我们应对应生成5个Fragment的XML文件来设计界面效果。

fragment_wechat:
此文件是由上述的的Fragment的java文件自动生成,故其余四个文件可参考该文件进行配置。


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
   android:gravity="center"
   android:orientation="vertical"
   tools:context=".wechatFragment">

<!-- TODO: Update blank fragment layout -->
   <TextView
       android:id="@+id/textView"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:gravity="center"
       android:text="这是微信聊天界面"
       android:textSize="48sp" />

</LinearLayout>

在此提醒,像我前面写的Fragment的java文件因与对应的XML文件联系起来,我们的XML文件也应与Fragment的java文件联系起来。
以buding_fragment_wechat为例:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
   android:orientation="vertical"
   tools:context=".budingFragment">
<!--    tools:context=".wechatFragment"-->

<!-- TODO: Update blank fragment layout -->
   <TextView
       android:id="@+id/textView2"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layout_weight="1"
       android:gravity="center"
       android:text="这是布丁界面"
       android:textSize="48sp" />

</LinearLayout>

调用context属性与其JAVA文件联系。

来源:https://blog.csdn.net/m0_46436852/article/details/120652299

标签:Android,微信,实例
0
投稿

猜你喜欢

  • C#面向对象设计的七大原则

    2021-10-21 04:15:49
  • java利用多线程和Socket实现猜拳游戏

    2022-10-03 08:03:30
  • 浅谈JVM之使用JFR解决内存泄露

    2022-10-19 01:55:30
  • SpringCloud高可用配置中心Config详解

    2023-11-17 11:25:00
  • Linux下Java开发环境搭建以及第一个HelloWorld

    2023-11-06 01:09:57
  • ElasticSearch学习之ES Mapping实战示例

    2023-11-25 06:12:25
  • 解决Java API不能远程访问HBase的问题

    2023-11-27 04:17:48
  • Flutter图片与文件选择器使用实例

    2023-07-17 09:11:12
  • Java项目中获取路径的绝对路径问题和相对路径问题

    2023-07-09 13:25:01
  • Go&java算法之最大数示例详解

    2023-10-30 08:54:56
  • Java语言实现Blowfish加密算法完整代码分享

    2023-11-02 21:30:07
  • Springboot actuator生产就绪功能实现解析

    2021-07-23 12:57:06
  • Spring mvc服务端数据校验实现流程详解

    2023-02-06 16:37:14
  • java初学者必须理解这几个问题

    2023-04-07 14:22:36
  • Java 内置Http Server构建web应用案例详解

    2023-11-20 22:29:53
  • Java8 Comparator: 列表排序的深入讲解

    2022-12-11 08:30:01
  • Java sha1散列算法原理及代码实例

    2021-06-28 05:50:22
  • java中Memcached的使用实例(包括与Spring整合)

    2021-11-28 13:29:06
  • Java 如何实现一个http服务器

    2022-03-27 05:40:04
  • SpringBoot持久化层操作支持技巧

    2023-11-24 06:40:32
  • asp之家 软件编程 m.aspxhome.com