功能说明

开发一个类似微信的主页面框架,UI布局为上中下结构,包含4个tab界面:

  1. 页面顶部为页面标题

  1. 页面底部为导航栏

  1. 页面中部为内容展示界面

开发技术

layout xml,控件,监听,fragment

设计流程及代码详解

创建项目

  1. 选择File->New->New Project

  1. 空项目

  1. 项目设置

选择java项目

UI界面

该UI界面由多个xml布局页面组成:

  • 顶部标题栏 : app的标题,即"微信",标题居中显示

  • 中间内容界面 : 共"微信""通讯录""发现""我"四个界面,分别显示不同内容

  • 底部导航栏 : 一共四个图标,分别控制中间内容界面

顶部标题栏

由于页面顶部就只有微信两个字,所以使用线性布局

在Design界面将TextView拖到下面

在Code界面按照下图设置

标题栏toplayout.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"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1"android:text="微信"android:layout_gravity="center"android:gravity="center"android:textSize="35dp"/>
</LinearLayout>

底部导航栏

按照上述方式创建底部导航栏,页面布局同样选择LinearLayout

对于底部的导航栏,应该由四个部分组成,水平排列,而这四个部分又分别由两个部分组成——图标和文字。

然后将该部分复制4个并重命名

复制后发现只有第一个图标展示,其他的图标全部都在一条线上,所以要对四个部分的代码进行如下图更改

其中layout_weight="1"指的是四个控件平分父控件空间

之后再在每一个TextView中添加文字居中的属性,并且更改每一个部分的图片和文字,即可达到以下效果

底部bottomlayout.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"android:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:id="@+id/layout1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"app:srcCompat="@android:drawable/sym_action_chat" /><TextViewandroid:id="@+id/textView1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="微信" /></LinearLayout><LinearLayoutandroid:id="@+id/layout2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView2"android:layout_width="match_parent"android:layout_height="wrap_content"app:srcCompat="@android:drawable/ic_menu_myplaces" /><TextViewandroid:id="@+id/textView2"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="通讯录" /></LinearLayout><LinearLayoutandroid:id="@+id/layout3"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView3"android:layout_width="match_parent"android:layout_height="wrap_content"app:srcCompat="@android:drawable/ic_menu_share" /><TextViewandroid:id="@+id/textView3"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="发现" /></LinearLayout><LinearLayoutandroid:id="@+id/layout4"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1"android:orientation="vertical"><ImageViewandroid:id="@+id/imageView4"android:layout_width="match_parent"android:layout_height="wrap_content"app:srcCompat="@android:drawable/ic_menu_search" /><TextViewandroid:id="@+id/textView4"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="我" /></LinearLayout>
</LinearLayout>

页面整合

由于中间的部分是会随着下面图标的点击变动的,所以后面再设置,我们先把顶部、中部和底部进行页面定位整合.

按照上面的方式创建mainlayout界面,仍然选择的是linearlayout,但是由于上中下三个部分在该页面是垂直分布,所以和上面不同的是要在最大的Linearlayout标签中添加:

然后将前面设置的顶部和底部添加到mainlayout中

但是如果这样设置,那么三个界面将会贴在一起,所以可以设置layout_weight

(这里不太确定,感觉这样设置有点奇怪,但是最后界面展现是正确的)

最后界面展现如下:

mainlayout.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"android:orientation="vertical"><includelayout="@layout/toplayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="1" /><FrameLayoutandroid:id="@+id/content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="200"></FrameLayout><includelayout="@layout/bottomlayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_weight="2" /></LinearLayout>

还有要在启动项MainActivity中修改为mainlayout

中间界面切换

创建Fragment(blank)

删除其他方法,只留下onCreateView方法

由于共有四个界面的切换,所以一共要创建4个Fragment,创建后项目结构如下:

然后在MainActivity中将四个Fragment和导航栏中的四个创建联系,使用findViewbyId()对应导航栏中四个部分的id

linearLayout1=findViewById(R.id.layout1);
linearLayout2=findViewById(R.id.layout2);
linearLayout3=findViewById(R.id.layout3);
linearLayout4=findViewById(R.id.layout4);

新建init()函数用于Fragment页面初始化

public void initial(){transaction=manager.beginTransaction().add(R.id.content,fragment1).add(R.id.content,fragment2).add(R.id.content,fragment3).add(R.id.content,fragment4).commit();
}

由于每一次点击图标后,页面展现的是隐藏当前的界面,展示点击图标对应的界面

新建showfragment展示界面

private void showfragment(Fragment fragment) {transaction=manager.beginTransaction().show(fragment).commit();
}

新建fragmentHide隐藏界面

public void fragmentHide(){transaction=manager.beginTransaction().hide(fragment1).hide(fragment2).hide(fragment3).hide(fragment4).commit();
}

设置监听程序,完成点击图标时触发事件,并使用switch完成点击不同的图标展现不同的界面

public void onClick(View view){fragmentHide();switch (view.getId()){case R.id.layout1:showfragment(fragment1);break;case R.id.layout2:showfragment(fragment2);break;case R.id.layout3:showfragment(fragment3);break;case R.id.layout4:showfragment(fragment4);break;}
}

并在主方法中添加如下代码

linearLayout1.setOnClickListener(this);
linearLayout2.setOnClickListener(this);
linearLayout3.setOnClickListener(this);
linearLayout4.setOnClickListener(this);

在中间界面即fragment_1,fragment_2,fragment_3,fragment_4中设置每个界面设置不同的内容

最后在打开App的开始界面应该是显示聊天界面,所以在主方法后添加如下代码:

initial();
fragmentHide();
showfragment(fragment1);

还可以修改App的名字,是在value目录中的strings.xml文件中修改

MainActivity.java

package com.example.homeworkapplication;import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity implements View.OnClickListener{Fragment fragment1,fragment2,fragment3,fragment4;  //声明为父类int transaction;FragmentManager manager;LinearLayout linearLayout1,linearLayout2,linearLayout3,linearLayout4;int i;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mainlayout);linearLayout1=findViewById(R.id.layout1);linearLayout2=findViewById(R.id.layout2);linearLayout3=findViewById(R.id.layout3);linearLayout4=findViewById(R.id.layout4);manager=getSupportFragmentManager();fragment1=new Fragment1();fragment2=new Fragment2();fragment3=new Fragment3();fragment4=new Fragment4();initial();fragmentHide();showfragment(fragment1);linearLayout1.setOnClickListener(this);linearLayout2.setOnClickListener(this);linearLayout3.setOnClickListener(this);linearLayout4.setOnClickListener(this);}public void initial(){transaction=manager.beginTransaction().add(R.id.content,fragment1).add(R.id.content,fragment2).add(R.id.content,fragment3).add(R.id.content,fragment4).commit();}public void onClick(View view){fragmentHide();switch (view.getId()){case R.id.layout1:showfragment(fragment1);break;case R.id.layout2:showfragment(fragment2);break;case R.id.layout3:showfragment(fragment3);break;case R.id.layout4:showfragment(fragment4);break;}}private void showfragment(Fragment fragment) {transaction=manager.beginTransaction().show(fragment).commit();}public void fragmentHide(){transaction=manager.beginTransaction().hide(fragment1).hide(fragment2).hide(fragment3).hide(fragment4).commit();}}

运行结果

源码开源地址

点击查看源码

安卓开发——UI界面开发相关推荐

  1. Android开发-UI界面--类微信页面设计

    Android开发-UI界面–类微信页面设计 一.功能说明 设计一个类似微信的主页面框架,UI布局为上中下结构,包含了四个tag页面 二.开发技术 ​ 本次用到了layout.xml.控件.监听.fr ...

  2. 【UI界面开发】基本组件概述

    文章目录 摘要 基本交互方式 基本交互内容 指针信号 按键信号 摘要 UI界面开发离不开各种UI组件的组合以及相互配合,实现需求.而各种各样的UI组件都有它们的共同特点. 本文将总结UI组件的基本特点 ...

  3. MFC识别XBox游戏手柄,并进行UI界面开发

    一.效果展示 直接上效果图: 二.利用XInput实现获取XBox游戏手柄数据 在网上搜寻了很久,发现方法可以对游戏手柄进行测试,但是MFC版本以及完全版的很少有比较完全的资料,因此作为新手的我,正在 ...

  4. 游戏开发UI界面设计需要注意什么?

    棋牌游戏能否在市场中得到玩家的欢迎主要取决于棋牌游戏产品的玩法,界面风格,以及运行环境.特别是在棋牌游戏开发完成运营初期,UI界面更是棋牌平台是否能吸引更多玩家的关键因素之一. 因此,棋牌游戏开发UI ...

  5. QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    智能家居物联 UI 界面开发 项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面.项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让 ...

  6. 安卓登录注册界面开发(附源码)

    源码下载和博客访问:安卓登录注册界面开发(附源码) 前言 最近找安卓登录注册界面,找了好久也没找到比较满意的设计,最后想想其实登录和注册两个界面也不复杂,干脆花点时间自己弄. 界面预览 最后的效果如下 ...

  7. iOS开发-登录界面开发(6)Toast-Swift的使用-Swfit4.1_Xcode9.3.1

    iOS开发-登录界面开发(6)Toast-Swift的使用-Swfit4.1_Xcode9.3.1 先看一下效果: 1.前面我们做了登录界面的UI,实现了网络请求,如果用户输入了错误的VIP号码,应该 ...

  8. Python - PyQT5开发UI界面 - 环境搭建

    没有做过UI界面的都会把UI的制作想象的很神秘,我在刚开始的时候也是感觉异常神秘.很复杂.并且无从下手,不过在真正的做出来一个界面后,发现也并没有想象中的那么难,而且做出来可视化的东西所带来的成就感是 ...

  9. Android移动应用开发UI界面练习

    目录 例题分析 代码实现 实际效果 例题分析 参考百词斩app,打开界面如下,大致画一下UI界面的结构. 代码实现 <?xml version="1.0" encoding= ...

最新文章

  1. hdu3068 . 最长回文
  2. CF1009F-Dominant Indices【长链剖分】
  3. 嵌入式linux面试题解析(四)——逻辑推理一
  4. 专题导读:大数据支撑的智能应用
  5. python redis list_Python操作redis实例小结【String、Hash、List、Set等】
  6. MR案例:输出/输入SequenceFile
  7. CentOS系统简介
  8. 中国移动宽带服务器上的光信号,中国移动光猫设置方法(常见故障及解决方法)...
  9. 学术论文写作之引言(Introduction)怎么写
  10. 千兆网线水晶头的接法
  11. 【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | /art/dex2oat/dex2oat.cc#Dex2oat 函数源码 )
  12. python 空集_Python——集(set)
  13. javascript小技巧
  14. java用代码实现星期菜谱_基于JAVA的菜谱大全接口调用代码实例
  15. hive的环境搭建,以及简单使用-01
  16. unity大量较高尺寸的序列帧图片出包画面马赛克问题
  17. 腾讯2021暑期C++天美工作室游戏开发实习面试题面经
  18. [已解决]Object c,报错Expected method body
  19. iOS 所需英语词汇整理
  20. 计算机操作系统学习笔记 第二章、进程与线程

热门文章

  1. linux桌面套件,archlinux Gnome桌面美化之安装Moka主题套件
  2. springboot做系统所需的软硬件环境_最新Spring Boot实战文档推荐:项目搭建+配置+SSM整合...
  3. 如何计算两点之间的距离
  4. 使用java生成PDF并保存到本地服务器中
  5. 评职时,专利到底能加多少分?文科也可以申请专利吗?
  6. painter X Sumi-e(黑墨笔)画笔
  7. 关于Vue3+ts父组件调用子组件方法
  8. 10人分4组,有几种分法
  9. jquery 文件上传插件_10个jQuery文件上传插件
  10. Linux内存管理子系统——mmap内存映射原理分析(dax文件系统的mmap)