小工具知识网

当前位置: 首页 > 行业知识 > Android Studio Kotlin 简单实现微信主界面UI

行业知识

Android Studio Kotlin 简单实现微信主界面UI

2026-11-04 06:24:43 来源:互联网转载

准备编写环境  Y v Y

        操作系统:

                        windows10/11

        Android Studio 属性 :

                        文件版本 2023.2.0.0

                        产品版本 2023.2.0.AI-232.10227.8.2321._BUILD_NUMBER_

        JAVA属性:

                         java version "17.0.10" 2024-01-16 LTS

                        Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)

                        Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)

Android Studio版本不需要跟我的一样,只要检查好JAVA属性(版本)就ok了        

        win+R,打开CMD命令窗口,输入 java -version 查看java版本是否1.17 版本(或者高过)

开始新建项目

        1、选择新建一个项目 New Project,在 Templates 选择到 Phone and Tablet

        (一般这里不用选择,一进来默认就选定了)

        2、找到并选择 Bottom Navigition Views Activity,然后下一步Next。

                

        3、设置项目属性(具体如下),设置完成之后点击 Finish 就可以

      (在新建过程尽量不要动这个窗口,可能建项目的过程有些慢)

                如果想省事的直接复制我的代码成功运行,项目名字尽量要跟我的一样 WeChat

         如果你要坚持要自己名字的,那你注意我的代码出现 wechat 时看看需不需要更改

         SDK如果想用低版本的,比如:我想用Android 10,记得在Minimum SDK下更改版本

        4、以下就是整个项目的全貌,我展开的都是需要经常用的到文件

                

        5、创建一个 Android 模拟器 运行项目的时候要使用                      一、点击Device Manger 在右上角标题  二、点击那个 + 号 三、选择模拟器,一般我选择的是 Pixel 模拟器(这个看个人习惯) 四、点击下一步 ,这个一定要选择 UpsideDownCake,最后点击 Finish

这样Android 模拟器就新建好了,这个项目也就新建好了

准备开始构建项目

                1、找到 res/values/themes.xml (后缀 后面 有个night不要选择),然后进行修改,shift+F10 运行一下

                        @color/white        @color/black    

                                                                                                               

                2、将自己的图标(就是底部导航栏的图标)放到 res/drawable 文件目录下

        (具体路径查询看下方)这些是我在iconmonstr网站下载  下载格式 .PNG

查看res/drawable路径 查看res/drawable路径

                

                3、找到 res/menu/bottom_nav_menu.xml 文件 进行修改

                (这时候运行一下,如果模拟器能显示出来界面,导航栏多了个东西,就差不多可以了,不过导航栏却动不了,这个是正常的,因为还没有设置到它)

                

                4、现在开始设置底部导航栏的跳转,

找到 res/navigation/mobile_navigation.xml  文件修改

                

                 5、找到 MainActivity 进行修改

package com.example.wechatimport android.os.Bundleimport com.google.android.material.bottomnavigation.BottomNavigationViewimport androidx.appcompat.app.AppCompatActivityimport androidx.navigation.findNavControllerimport androidx.navigation.ui.AppBarConfigurationimport androidx.navigation.ui.setupActionBarWithNavControllerimport androidx.navigation.ui.setupWithNavControllerimport com.example.wechat.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() {    private lateinit var binding: ActivityMainBinding    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        binding = ActivityMainBinding.inflate(layoutInflater)        setContentView(binding.root)        val navView: BottomNavigationView = binding.navView        val navController = findNavController(R.id.nav_host_fragment_activity_main)        // Passing each menu ID as a set of Ids because each        // menu should be considered as top level destinations.        val appBarConfiguration = AppBarConfiguration(            setOf(                R.id.navigation_WeChat,                R.id.navigation_Friend,                R.id.navigation_Search,                R.id.navigation_Self            )        )        setupActionBarWithNavController(navController, appBarConfiguration)        navView.setupWithNavController(navController)    }}

          修改完成!直接运行项目(running)

恭喜你完成最最简单的微信主界面UI

这似乎有点粗糙,那么接下来继续完善

(也就是把咖啡上别人的拉花,换成自己的拉花,内核没有什么大的改动)
        主要都是 更改名字 为项目后面 操作流畅 打下基础

        1、找到 res/values/string.xml 文件修改

    WeChat    WeChat    Friend    Search    Self

        2、修改 res/layout 文件夹下的文件

                一、首先新建一个xml文件在 res/layout 目录下 fragment_self.xml

                二、然后编写 fragment_self.xml   

    

        3、修改 ui 文件

 

                一、修改self文件夹下文件名称(主要操作改名)如图

这时候运行一下项目看看是否改名成功,项目运行成功接着往下做

        一般情况下这个Rename Variables只有一个选项直接勾选就可以,只不过因为我们是复制UI下同个文件夹,导致它判断出多个情况

        你可以根据这个顺序更改文件名:

                home - > weichat

                dashboard -> friend

                notifiction - > search

                二、同理将ui下的另外三个文件夹都给改了名字

                三、更改文件中的代码                        

----------------------------------------------------------------------------friendFragment文件::----------------------------------------------------------------------------package com.example.wechat.ui.friendimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport androidx.fragment.app.Fragmentimport androidx.lifecycle.ViewModelProviderimport com.example.wechat.databinding.FragmentFriendBindingclass friendFragment : Fragment() {    private var _binding: FragmentFriendBinding? = null    // This property is only valid between onCreateView and    // onDestroyView.    private val binding get() = _binding!!    override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?    ): View {        val friendViewModel =            ViewModelProvider(this).get(friendViewModel::class.java)        _binding = FragmentFriendBinding.inflate(inflater, container, false)        val root: View = binding.root        val textView: TextView = binding.textFriend        friendViewModel.text.observe(viewLifecycleOwner) {            textView.text = it        }        return root    }    override fun onDestroyView() {        super.onDestroyView()        _binding = null    }}----------------------------------------------------------------------------friendViewModel文件::----------------------------------------------------------------------------package com.example.wechat.ui.friendimport androidx.lifecycle.LiveDataimport androidx.lifecycle.MutableLiveDataimport androidx.lifecycle.ViewModelclass friendViewModel : ViewModel() {    private val _text = MutableLiveData().apply {        value = "This is Friend Fragment"    }    val text: LiveData = _text}---------------------------------------------------------------------------searchFragment文件::---------------------------------------------------------------------------package com.example.wechat.ui.searchimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport androidx.fragment.app.Fragmentimport androidx.lifecycle.ViewModelProviderimport com.example.wechat.databinding.FragmentSearchBindingclass searchFragment : Fragment() {    private var _binding: FragmentSearchBinding? = null    // This property is only valid between onCreateView and    // onDestroyView.    private val binding get() = _binding!!    override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?    ): View {        val searchViewModel =            ViewModelProvider(this).get(searchViewModel::class.java)        _binding = FragmentSearchBinding.inflate(inflater, container, false)        val root: View = binding.root        val textView: TextView = binding.textSearch        searchViewModel.text.observe(viewLifecycleOwner) {            textView.text = it        }        return root    }    override fun onDestroyView() {        super.onDestroyView()        _binding = null    }}---------------------------------------------------------------------------searchViewModel文件::---------------------------------------------------------------------------package com.example.wechat.ui.searchimport androidx.lifecycle.LiveDataimport androidx.lifecycle.MutableLiveDataimport androidx.lifecycle.ViewModelclass searchViewModel : ViewModel() {    private val _text = MutableLiveData().apply {        value = "This is Search Fragment"    }    val text: LiveData = _text}---------------------------------------------------------------------------selfFragment文件::---------------------------------------------------------------------------package com.example.wechat.ui.selfimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport androidx.fragment.app.Fragmentimport androidx.lifecycle.ViewModelProviderimport com.example.wechat.databinding.FragmentSelfBindingclass selfFragment : Fragment() {    private var _binding: FragmentSelfBinding? = null    // This property is only valid between onCreateView and    // onDestroyView.    private val binding get() = _binding!!    override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?    ): View {        val selfViewModel =            ViewModelProvider(this).get(selfViewModel::class.java)        _binding = FragmentSelfBinding.inflate(inflater, container, false)        val root: View = binding.root        val textView: TextView = binding.textSelf        selfViewModel.text.observe(viewLifecycleOwner) {            textView.text = it        }        return root    }    override fun onDestroyView() {        super.onDestroyView()        _binding = null    }}---------------------------------------------------------------------------selfViewModel文件::---------------------------------------------------------------------------package com.example.wechat.ui.selfimport androidx.lifecycle.LiveDataimport androidx.lifecycle.MutableLiveDataimport androidx.lifecycle.ViewModelclass selfViewModel : ViewModel() {    private val _text = MutableLiveData().apply {        value = "This is Self Fragment"    }    val text: LiveData = _text}---------------------------------------------------------------------------wechatFragment文件::---------------------------------------------------------------------------package com.example.wechat.ui.wechatimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport android.widget.TextViewimport androidx.fragment.app.Fragmentimport androidx.lifecycle.ViewModelProviderimport com.example.wechat.databinding.FragmentWechatBindingclass wechatFragment : Fragment() {    private var _binding: FragmentWechatBinding? = null    // This property is only valid between onCreateView and    // onDestroyView.    private val binding get() = _binding!!    override fun onCreateView(        inflater: LayoutInflater,        container: ViewGroup?,        savedInstanceState: Bundle?    ): View {        val wechatViewModel =            ViewModelProvider(this).get(wechatViewModel::class.java)        _binding = FragmentWechatBinding.inflate(inflater, container, false)        val root: View = binding.root        val textView: TextView = binding.textWechat        wechatViewModel.text.observe(viewLifecycleOwner) {            textView.text = it        }        return root    }    override fun onDestroyView() {        super.onDestroyView()        _binding = null    }}---------------------------------------------------------------------------wechathViewModel文件::---------------------------------------------------------------------------package com.example.wechat.ui.wechatimport androidx.lifecycle.LiveDataimport androidx.lifecycle.MutableLiveDataimport androidx.lifecycle.ViewModelclass wechatViewModel : ViewModel() {    private val _text = MutableLiveData().apply {        value = "This is Wechat Fragment"    }    val text: LiveData = _text}

        5、更改 res/layout 文件下文件

                一、更改文件名字

修改前

  

        请根据这个顺序更改文件名(不要到后面会混乱的):

                home - > wechat

                dashboard -> friend

                notifiction - > search

                二、更改文件中的代码

fragment_wechat.xml              android:改成-------        android:-------------------------------------------------------fragment_friend.xml              android:改成-------        android:-------------------------------------------------------fragment_search.xml              android:改成-------        android:

        5、找到 res/navigation/moobile_navigation.xml 文件修改

                

恭喜你完成最简单的微信主界面UI

                                                            

  

上一篇:银行卡余额查询全攻略,轻松掌握你的财务状态!

下一篇:宝塔面板密码丢失后的找回攻略!