当前位置:   article > 正文

Android Studio-App门户页面设计与开发_基于android studio的app开发

基于android studio的app开发

一、设计目标

  1. 设计一个app的门户框架,能够实现4个tab页面的切换效果。
  2. 能够在任一tab页面中实现列表效果。

二、功能说明

        设计一个类微信界面,主要分为上中下三个部分,通过下方按钮实现“聊天”、“联系人”、“发现”以及“设置”这四个页面的切换,并在“聊天”页面中实现列表功能。

 三、效果展示

        

        

四、技术说明

  • Activity

  • Activity 是 Android 应用程序中的一个基本组件,它提供了一个用户界面。每个 Activity 都有一个布局文件,用于定义其用户界面。Activity 可以通过 Intent 启动其他 Activity,也可以接收其他 Activity 发送的 Intent。
  • XML

  • XML 是一种标记语言,用于描述数据。在 Android 应用程序中,XML 通常用于定义用户界面,用来编写布局文件。
  • Fragment

  • Fragment 是 Android 应用程序中的另一个基本组件,它可以嵌入到 Activity 中。Fragment 可以有自己的布局文件和生命周期,可以在运行时添加、删除或替换。
  • RecyclerView

  • RecyclerView 是 Android 应用程序中的一个高级控件,用于显示大量数据列表。与 ListView 不同,RecyclerView 允许自定义列表项的布局和交互方式,并提供了更好的性能和灵活性。

五、设计流程

  • 主页面布局activity_main1.xml

        主页面布局分为上中下三个部分,顶部由top.xml文件实现,因为需要切换四个页面,所以中间的内容分别包含在fragment1.xml、fragment2.xml、fragment3.xml和fragment4.xml中,底部由buttom.xml文件实现。使用include插入top.xml、中间的fragment.xml以及buttom.xml文件。

        

具体代码:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <include
  7. layout="@layout/top"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content" />
  10. <androidx.fragment.app.FragmentContainerView
  11. android:id="@+id/content"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_weight="1" />
  15. <include
  16. layout="@layout/buttom"
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content" />
  19. </LinearLayout>
  • top.xml

  • content

  • fragment1.xml——聊天界面

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical">
  6. <TextView
  7. android:id="@+id/textView5"
  8. android:layout_width="match_parent"
  9. android:layout_height="140dp"
  10. android:layout_gravity="center"
  11. android:layout_weight="1"
  12. android:gravity="center"
  13. android:text="聊天界面"
  14. android:textSize="40dp" />
  15. <androidx.recyclerview.widget.RecyclerView
  16. android:id="@+id/recyclerview"
  17. android:layout_width="match_parent"
  18. android:layout_height="match_parent"
  19. android:layout_weight="1" />
  20. </LinearLayout>
  • fragment2.xml——联系人界面
  • fragment3.xml及fragment4.xml类似
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <TextView
  6. android:id="@+id/textView6"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:layout_weight="1"
  10. android:textSize="50dp"
  11. android:gravity="center"
  12. android:layout_gravity="center"
  13. android:text="联系人界面" />
  14. </LinearLayout>
  • buttom.xml

 

  • 页面内容Fragment.java

  •  在Fragment.java中,将Fragment.java与布局文件中的fragment.xml进行连接,如Fragment2.java文件(fragment3.xml及fragment4.xml方法相同):

     

  1. package com.example.myapplication1;
  2. import android.os.Bundle;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import androidx.fragment.app.Fragment;
  7. public class Fragment2 extends Fragment {
  8. @Override
  9. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  10. Bundle savedInstanceState) {
  11. // Inflate the layout for this fragment
  12. return inflater.inflate(R.layout.fragment2, container, false);
  13. }
  14. }
  • 在Fragment1中实现列表功能:
  1. package com.example.myapplication1;
  2. import android.os.Bundle;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import androidx.fragment.app.Fragment;
  7. import androidx.recyclerview.widget.LinearLayoutManager;
  8. import androidx.recyclerview.widget.RecyclerView;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. public class Fragment1 extends Fragment {
  12. RecyclerView recyclerView;
  13. Myadapter myadapter;
  14. View view1;
  15. @Override
  16. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  17. Bundle savedInstanceState) {
  18. view1=new View(getContext());
  19. view1= inflater.inflate(R.layout.fragment1, container, false);
  20. recyclerView= view1.findViewById(R.id.recyclerview);
  21. List<String> list=new ArrayList();
  22. for (int i=1;i<10;i++){
  23. list.add("这是第"+i+"行:");
  24. }
  25. myadapter=new Myadapter(list,view1.getContext());
  26. recyclerView.setAdapter(myadapter);
  27. LinearLayoutManager manager=new LinearLayoutManager(view1.getContext());
  28. manager.setOrientation(RecyclerView.VERTICAL);
  29. recyclerView.setLayoutManager(manager);
  30. return view1;
  31. }
  32. }

        代码说明:主要功能是为Fragment绑定一个列表视图RecycleView。通过findViewById()方法获取RecyclerView对象,并将其设置为垂直方向的线性布局。然后创建了一个List<String>对象list,用于存储数据。接着创建一个Myadapter对象,并将其设置为RecyclerView的适配器。

  • Myadapter.java
  • 为RecyclerView提供数据并创建对应的视图项

  1. package com.example.myapplication1;
  2. import android.content.Context;
  3. import android.view.LayoutInflater;
  4. import android.view.View;
  5. import android.view.ViewGroup;
  6. import android.widget.TextView;
  7. import androidx.annotation.NonNull;
  8. import androidx.recyclerview.widget.RecyclerView;
  9. import java.util.List;
  10. public class Myadapter extends RecyclerView.Adapter<Myadapter.Myholder> {
  11. List<String> list1;
  12. Context context1;
  13. // 构造函数,传入数据源和内容
  14. public Myadapter(List list, Context context){
  15. list1=list;
  16. context1=context;
  17. }
  18. // 创建 ViewHolder,即创建 RecyclerView 中 item 的布局
  19. @NonNull
  20. @Override
  21. public Myholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  22. // 加载 item 的布局文件
  23. View view=LayoutInflater.from(context1).inflate(R.layout.item,parent,false);
  24. // 创建 ViewHolder 对象
  25. Myholder myholder=new Myholder(view);
  26. return myholder;
  27. }
  28. // 绑定数据到 ViewHolder 上
  29. public void onBindViewHolder(@NonNull Myholder holder, int position) {
  30. holder.textView.setText(list1.get(position));
  31. }
  32. // 返回数据源的大小
  33. @Override
  34. public int getItemCount() {
  35. return list1.size();
  36. }
  37. // ViewHolder 类,用于保存 item 中的控件对象
  38. class Myholder extends RecyclerView.ViewHolder{
  39. TextView textView;
  40. public Myholder(@NonNull View itemView) {
  41. super(itemView);
  42. // 找到 item 中的 TextView 控件
  43. textView=itemView.findViewById(R.id.textView9);
  44. }
  45. }
  46. }
  • 主函数MainActivity1.java

  • 隐藏界面

  1. private void fragmentHide() {
  2. FragmentTransaction ft=fm.beginTransaction()
  3. .hide(fragment1)
  4. .hide(fragment2)
  5. .hide(fragment3)
  6. .hide(fragment4);
  7. ft.commit();
  8. }
  • 显示当前界面

  1. private void fragmentshow(Fragment fragment){
  2. fragmentHide();
  3. FragmentTransaction ft=fm.beginTransaction()
  4. .show(fragment);
  5. ft.commit();
  6. }
  • 将Fragment文件进行压缩,加入content中

  1. private void innitial() {
  2. FragmentTransaction ft=fm.beginTransaction()
  3. .add(R.id.content,fragment1)
  4. .add(R.id.content,fragment2)
  5. .add(R.id.content,fragment3)
  6. .add(R.id.content,fragment4);
  7. ft.commit();
  8. }
  • 设置监听

  • 可用switch case语句或if else语句执行
  1. @Override
  2. public void onClick(View view) {
  3. if (view.getId() == l1) {
  4. fragmentshow(fragment1);
  5. }
  6. else if (view.getId() == l2) {
  7. fragmentshow(fragment2);
  8. }
  9. else if (view.getId() == l3) {
  10. fragmentshow(fragment3);
  11. }
  12. else if (view.getId() == l4) {
  13. fragmentshow(fragment4);
  14. }
  15. }
  • 主函数完整代码:

  1. package com.example.myapplication1;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import androidx.fragment.app.Fragment;
  4. import androidx.fragment.app.FragmentManager;
  5. import androidx.fragment.app.FragmentTransaction;
  6. import androidx.recyclerview.widget.LinearLayoutManager;
  7. import androidx.recyclerview.widget.RecyclerView;
  8. import android.content.Context;
  9. import android.os.Bundle;
  10. import android.view.View;
  11. import android.widget.LinearLayout;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. public class MainActivity1 extends AppCompatActivity implements View.OnClickListener {
  15. Fragment fragment1,fragment2,fragment3,fragment4;
  16. LinearLayout linearLayout1,linearLayout2,linearLayout3,linearLayout4;
  17. static final int l1=R.id.linearLayout1;
  18. static final int l2=R.id.linearLayout2;
  19. static final int l3=R.id.linearLayout3;
  20. static final int l4=R.id.linearLayout4;
  21. FragmentManager fm;
  22. @Override
  23. protected void onCreate(Bundle savedInstanceState) {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.activity_main1);
  26. linearLayout1=findViewById(R.id.linearLayout1);
  27. linearLayout2=findViewById(R.id.linearLayout2);
  28. linearLayout3=findViewById(R.id.linearLayout3);
  29. linearLayout4=findViewById(R.id.linearLayout4);
  30. fm=getSupportFragmentManager();
  31. fragment1=new Fragment1();
  32. fragment2=new Fragment2();
  33. fragment3=new Fragment3();
  34. fragment4=new Fragment4();
  35. innitial();
  36. fragmentHide();
  37. fragmentshow(fragment1);
  38. linearLayout1.setOnClickListener(this);
  39. linearLayout2.setOnClickListener(this);
  40. linearLayout3.setOnClickListener(this);
  41. linearLayout4.setOnClickListener(this);
  42. }
  43. private void fragmentHide() {
  44. FragmentTransaction ft=fm.beginTransaction()
  45. .hide(fragment1)
  46. .hide(fragment2)
  47. .hide(fragment3)
  48. .hide(fragment4);
  49. ft.commit();
  50. }
  51. private void fragmentshow(Fragment fragment){
  52. fragmentHide();
  53. FragmentTransaction ft=fm.beginTransaction()
  54. .show(fragment);
  55. ft.commit();
  56. }
  57. private void innitial() {
  58. FragmentTransaction ft=fm.beginTransaction()
  59. .add(R.id.content,fragment1)
  60. .add(R.id.content,fragment2)
  61. .add(R.id.content,fragment3)
  62. .add(R.id.content,fragment4);
  63. ft.commit();
  64. }
  65. @Override
  66. public void onClick(View view) {
  67. if (view.getId() == l1) {
  68. fragmentshow(fragment1);
  69. }
  70. else if (view.getId() == l2) {
  71. fragmentshow(fragment2);
  72. }
  73. else if (view.getId() == l3) {
  74. fragmentshow(fragment3);
  75. }
  76. else if (view.getId() == l4) {
  77. fragmentshow(fragment4);
  78. }
  79. }
  80. }

六、总结

        

  • 运行日志

  • 如果运行出错,可以打开Logcat查看日志,进行具体调试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/796286
推荐阅读
相关标签
  

闽ICP备14008679号