Maison  >  Article  >  Java  >  Comment implémenter TabLayout avec des icônes sous Android ?

Comment implémenter TabLayout avec des icônes sous Android ?

王林
王林avant
2023-08-25 17:53:041093parcourir

TabLayout avec des icônes est devenu un composant d'interface utilisateur populaire dans le développement Android. Il simplifie la navigation au sein de l'application en fournissant des onglets disposés horizontalement. Chaque onglet représente une catégorie ou une fonctionnalité différente et peut être amélioré visuellement en ajoutant des icônes. La combinaison d'icônes et d'étiquettes permet aux utilisateurs de comprendre plus facilement le but de chaque onglet.

En sélectionnant un onglet, le contenu correspondant sera affiché. Cela se fait généralement dans ViewPager. Pour implémenter un TabLayout avec des icônes, vous devez créer la mise en page nécessaire et gérer les fragments ou activités pour le contenu de chaque onglet. Cela implique également de personnaliser l’apparence en fonction du design de l’application. Cette solution de navigation améliore non seulement l'expérience utilisateur, mais améliore également la convivialité de l'application en fournissant une interface conviviale et visuellement attrayante.

Disposition des onglets

TabLayout est un composant d'interface utilisateur du framework Android qui offre aux utilisateurs un moyen convivial de travailler avec des onglets disposés horizontalement. Cette fonctionnalité polyvalente est souvent utilisée pour organiser efficacement et permettre une navigation transparente entre plusieurs écrans ou sections d'une application. Chaque étiquette représente une catégorie ou une fonctionnalité différente, et les utilisateurs peuvent facilement changer en appuyant simplement sur l'étiquette correspondante.

TabLayout est un composant couramment utilisé avec ViewPager. ViewPager est responsable de la gestion du contenu lié à chaque onglet. Cette combinaison permet une navigation transparente entre différents fragments ou activités en fonction de l'onglet sélectionné. De plus, TabLayout propose diverses options de personnalisation telles que l'ajout d'icônes, la définition d'étiquettes de texte et l'application de styles. Ces caractéristiques le rendent adaptable et polyvalent pour répondre à une variété de conceptions et d'exigences d'applications.

Méthode

Sous Android, il existe différentes manières d'implémenter TabLayout, nous examinerons quelques manières courantes de l'implémenter :

  • Méthode 1 : Utilisation d'une vue personnalisée d'un élément d'onglet

  • Méthode 2 : Utiliser les paramètres TabLayout par défaut avec des icônes

Méthode 1 : Utiliser la vue personnalisée comme élément d'onglet

Une façon de fusionner TabLayout avec des icônes dans Android consiste à utiliser une vue personnalisée pour chaque élément d'onglet. Cette méthode nécessite la conception d'un fichier de mise en page XML unique pour l'élément d'onglet, qui comprend un ImageView pour l'icône et un TextView pour le titre. Dans votre activité ou fragment, vous pouvez configurer un TabLayout à côté d'un ViewPager, puis créer une vue d'onglet personnalisée pour chaque onglet individuel.

Des vues personnalisées pour chaque onglet permettent une récupération facile. Dans cette vue, vous pouvez trouver les composants ImageView et TextView, personnaliser l'icône et le titre selon vos besoins. En utilisant une vue personnalisée, les utilisateurs ont un meilleur contrôle sur l'apparence et la disposition des éléments d'onglet dans un TabLayout, leur permettant d'afficher de manière transparente les icônes qui correspondent aux titres.

Algorithme

  • Un fichier de mise en page XML de l'activité ou du fragment principal doit être créé, comprenant TabLayout et ViewPager.

  • De plus, un fichier de mise en page XML distinct doit être créé pour l'élément d'onglet personnalisé, qui contient un ImageView et un TextView pour afficher respectivement l'icône et le titre.
  • Pour obtenir la référence de TabLayout et ViewPager en activité ou en fragment, leurs identifiants respectifs doivent être utilisés

  • ViewPager doit utiliser l'adaptateur approprié pour gérer le contenu de l'onglet

  • Afin de connecter TabLayout à ViewPager, vous pouvez utiliser la méthode setupWithViewPager()
  • Utilisez une boucle pour parcourir chaque onglet du TabLayout. Pour chaque onglet, récupérez son objet Tab et personnalisez sa vue à l'aide de la méthode setCustomView().

  • Dans cette vue personnalisée, recherchez ImageView et TextView en utilisant leurs identifiants respectifs.

  • Définissez les informations pertinentes sur l'icône et le titre pour chaque onglet en appelant des méthodes telles que setImageResource() et setText() sur ImageView et TextView

  • Répétez les étapes de manière itérative pour tous les onglets afin de configurer leurs vues personnalisées avec les icônes et les titres souhaités selon vos besoins. Des options de personnalisation sont disponibles pour ajuster l'apparence et le comportement du TabLayout à des exigences spécifiques.

  • De plus, d'autres fonctionnalités peuvent être intégrées, telles que la réponse aux événements de sélection d'onglets ou la mise à jour du contenu dans ViewPager en fonction des modifications d'onglets.

Exemple

// activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="match_parent"
   tools:context=".MainActivity">

   <com.google.android.material.tabs.TabLayout
      android:id="@+id/tab_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      app:tabGravity="fill"
      app:tabMode="fixed"
      app:tabIndicatorHeight="0dp" />

   <androidx.viewpager2.widget.ViewPager2
      android:id="@+id/view_pager"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_above="@id/tab_layout" />

</RelativeLayout>

//MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;

import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class MainActivity extends AppCompatActivity {

   private static final String[] tabTitles = {"Tab 1", "Tab 2", "Tab 3"};
   private static final int[] tabIcons = {R.drawable.ic_tab1, R.drawable.ic_tab2, R.drawable.ic_tab3};

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      TabLayout tabLayout = findViewById(R.id.tab_layout);
      ViewPager2 viewPager = findViewById(R.id.view_pager);
      viewPager.setAdapter(new ViewPagerAdapter(this));

      new TabLayoutMediator(tabLayout, viewPager, (tab, position) -> {
         tab.setIcon(tabIcons[position]);
         tab.setText(tabTitles[position]);
      }).attach();
   }
}

// ViewPagerAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class ViewPagerAdapter extends RecyclerView.Adapter<ViewPagerAdapter.ViewHolder> {

   private final Context context;

   public ViewPagerAdapter(Context context) {
      this.context = context;
   }

   @NonNull
   @Override
   public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
      View view = LayoutInflater.from(context).inflate(R.layout.item_view_pager, parent, false);
      return new ViewHolder(view);
   }

   @Override
   public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
      holder.textView.setText("Page " + (position + 1));
   }

   @Override
   public int getItemCount() {
      return 3; // Change this value based on the number of tabs
   }

   public static class ViewHolder extends RecyclerView.ViewHolder {
      TextView textView;

      public ViewHolder(View itemView) {
         super(itemView);
         textView = itemView.findViewById(R.id.textView);
      }
   }
}
ic_tab1.png, ic_tab2.png, ic_tab3.png in res/drawable

// item_view_pager.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:gravity="center"
   android:orientation="vertical">

   <TextView
      android:id="@+id/textView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:textAppearanceLarge" />

</LinearLayout>

Sortie

Comment implémenter TabLayout avec des icônes sous Android ?

Méthode 2 : utiliser les paramètres TabLayout par défaut avec des icônes

Une autre façon d'implémenter un TabLayout avec des icônes dans Android consiste à exploiter les paramètres TabLayout par défaut, qui prennent en charge l'inclusion d'icônes. Cette approche élimine le besoin de créer des vues personnalisées car elle permet d'attribuer des icônes directement à chaque onglet.

Après avoir configuré TabLayout avec ViewPager, vous pouvez facilement parcourir chaque onglet et spécifier la ressource d'icône requise à l'aide de la méthode setIcon().

En tirant parti de cette approche, vous pouvez profiter de la fonctionnalité intégrée de TabLayout pour gérer la sélection et le style des onglets tout en simplifiant la mise en œuvre. Cette approche simple simplifie l'association d'icônes avec des onglets dans un TabLayout, aidant ainsi à obtenir la représentation visuelle souhaitée sans modifications supplémentaires.

算法

  • 需要为主 Activity 或片段创建 XML 布局文件。这包括合并 TabLayout 和 ViewPager 组件。

  • 首先,在您的活动或片段中获取对TabLayout和ViewPager的引用。

  • 接下来,使用适当的适配器设置ViewPager来处理选项卡的内容。使用setupWithViewPager()方法将TabLayout与ViewPager连接起来

  • 然后,迭代 TabLayout 中的每个选项卡并使用 getTabAt() 方法检索它们各自的 Tab 对象。

  • 如果 Tab 对象不为 null,则可以通过使用 setIcon() 设置图标来自定义其外观。

  • 此外,根据您对TabLayout的期望外观和行为进行任何必要的调整

  • 最后,处理可能需要的任何附加功能,例如响应选项卡选择电子事件或根据选项卡更改更新 ViewPager 中的内容。

程序

// activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="match_parent"
   tools:context=".MainActivity">

   <com.google.android.material.tabs.TabLayout
      android:id="@+id/tab_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_alignParentBottom="true"
      app:tabGravity="fill"
      app:tabMode="fixed"
      app:tabIndicatorHeight="0dp" />

   <androidx.viewpager2.widget.ViewPager2
      android:id="@+id/view_pager"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:layout_above="@id/tab_layout" />

</RelativeLayout>

// MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

import android.os.Bundle;

import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class MainActivity extends AppCompatActivity {

   private static final int[] tabIcons = {
         R.drawable.ic_tab1,
         R.drawable.ic_tab2,
         R.drawable.ic_tab3
   };

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      TabLayout tabLayout = findViewById(R.id.tab_layout);
      ViewPager2 viewPager = findViewById(R.id.view_pager);
      viewPager.setAdapter(new ViewPagerAdapter(this));

      TabLayoutMediator mediator = new TabLayoutMediator(tabLayout, viewPager,
            (tab, position) -> tab.setIcon(tabIcons[position])
      );
      mediator.attach();
   }
}

// ViewPagerAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class ViewPagerAdapter extends RecyclerView.Adapter<
ViewPagerAdapter.ViewHolder> {

   private final Context context;

   public ViewPagerAdapter(Context context) {
      this.context = context;
   }

   @NonNull
   @Override
   public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
      View view = LayoutInflater.from(context).inflate(R.layout.item_view_pager, parent, false);
      return new ViewHolder(view);
   }

   @Override
   public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
      holder.textView.setText("Page " + (position + 1));
   }

   @Override
   public int getItemCount() {
      return 3; // Change this value based on the number of tabs
   }

   public static class ViewHolder extends RecyclerView.ViewHolder {
      TextView textView;

      public ViewHolder(View itemView) {
         super(itemView);
         textView = itemView.findViewById(R.id.textView);
      }
   }
}

ic_tab1.png, ic_tab2.png, ic_tab3.png in res/drawable

// item_view_pager.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:gravity="center"
   android:orientation="vertical">

   <TextView
      android:id="@+id/textView"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:textAppearance="?android:textAppearanceLarge" />

</LinearLayout>

输出

Comment implémenter TabLayout avec des icônes sous Android ?

结论

总之,TabLayout 与图标的合并可以通过两种主要方法来实现:利用选项卡项的自定义视图或使用默认的 TabLayout 设置。自定义视图方法通过为每个选项卡项创建不同的 XML 布局文件来提供更大的灵活性和个性化。相反,默认设置通过直接将图标分配给各个选项卡来简化流程。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer