返回顶部
首页 > 资讯 > 移动开发 >Android底部菜单简单应用
  • 690
分享到

Android底部菜单简单应用

菜单Android 2022-06-06 04:06:45 690人浏览 八月长安
摘要

在Android中实现菜单功能有多种方法。 Options Menu:用户按下menu Button时显示的菜单。 Context Menu:用户长时间按下屏幕,所显示出来

Android中实现菜单功能有多种方法。
Options Menu:用户按下menu Button时显示的菜单。
Context Menu:用户长时间按下屏幕,所显示出来的菜单也称为上下文菜单。
Submenu:子菜单。
但是有时候这些内置的菜单并不能满足我们功能,这就需要自己自定义一种菜单。接下来我说的这种就是通过TabHost与RadioGroup结合完成的菜单。这也是很常用的一种底部菜单做法。先上图:

Xml代码


<?xml version="1.0" encoding="UTF-8"?> 
<TabHost android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" 
 xmlns:android="Http://schemas.android.com/apk/res/android"> 
  <LinearLayout  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"> 
    <FrameLayout  
      android:id="@android:id/tabcontent"  
      android:layout_width="fill_parent"  
      android:layout_height="0.0dip"  
      android:layout_weight="1.0" /> 
    <TabWidget  
      android:id="@android:id/tabs"  
      android:visibility="Gone"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"  
      android:layout_weight="0.0" /> 
    <RadioGroup  
      android:gravity="center_vertical"  
      android:layout_gravity="bottom"  
      android:orientation="horizontal"  
      android:id="@+id/main_radio"  
      android:background="@drawable/maintab_toolbar_bg"  
      android:layout_width="fill_parent"  
      android:layout_height="wrap_content"> 
      <RadioButton  
        android:id="@+id/radio_button0"  
        android:tag="radio_button0"  
        android:layout_marginTop="2.0dip"  
        android:text="@string/alarm"  
        android:drawableTop="@drawable/icon_1"  
        style="@style/main_tab_bottom" /> 
      <RadioButton  
        android:id="@+id/radio_button1"  
        android:tag="radio_button1"  
        android:layout_marginTop="2.0dip"  
        android:text="@string/message"  
        android:drawableTop="@drawable/icon_2"  
        style="@style/main_tab_bottom" /> 
      <RadioButton  
        android:id="@+id/radio_button2"  
        android:tag="radio_button2"  
        android:layout_marginTop="2.0dip"  
        android:text="@string/photo"  
        android:drawableTop="@drawable/icon_3"  
        style="@style/main_tab_bottom" /> 
      <RadioButton  
        android:id="@+id/radio_button3"  
        android:tag="radio_button3"  
        android:layout_marginTop="2.0dip"  
        android:text="@string/music"  
        android:drawableTop="@drawable/icon_4"  
        style="@style/main_tab_bottom" /> 
      <RadioButton  
        android:id="@+id/radio_button4"  
        android:tag="radio_button4"  
        android:layout_marginTop="2.0dip"  
        android:text="@string/setting"  
        android:drawableTop="@drawable/icon_5"  
        style="@style/main_tab_bottom" /> 
    </RadioGroup> 
  </LinearLayout> 
</TabHost> 

需要注意的是,如果用TabHost这个控件,其中有几个ID是必须这么写的,android:id=”@android:id/tabhost ;android:id=”@android:id/tabcontent” ;android:id=”@android:id/tabs” ;之所以要这么写是因为在TabHost这个类中。需要实例化上述这个ID的控件。看源码

在TabActivity中有么个方法:


@Override 
  public void onContentChanged() { 
    super.onContentChanged(); 
    mTabHost = (TabHost) findViewById(com.android.internal.R.id.tabhost); 
    if (mTabHost == null) { 
      throw new RuntimeException( 
          "Your content must have a TabHost whose id attribute is " + 
          "'android.R.id.tabhost'"); 
    } 
    mTabHost.setup(getLocalActivityManager()); 
  } 
  private void ensureTabHost() { 
    if (mTabHost == null) { 
      this.setContentView(com.android.internal.R.layout.tab_content); 
    } 
  } 

当内容发生改变时它会调用这个方法,来更新列表或者其他视图,而这个方法中需要实例化TabHost,所以必须通过ID为tabhost实例化。

再看看TabHost这个类中


public void setup() { 
   mTabWidget = (TabWidget) findViewById(com.android.internal.R.id.tabs); 
   if (mTabWidget == null) { 
     throw new RuntimeException( 
         "Your TabHost must have a TabWidget whose id attribute is 'android.R.id.tabs'"); 
   } 
   // KeyListener to attach to all tabs. Detects non-navigation keys 
   // and relays them to the tab content. 
   mTabKeyListener = new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
       switch (keyCode) { 
         case KeyEvent.KEYCODE_DPAD_CENTER: 
         case KeyEvent.KEYCODE_DPAD_LEFT: 
         case KeyEvent.KEYCODE_DPAD_RIGHT: 
         case KeyEvent.KEYCODE_DPAD_UP: 
         case KeyEvent.KEYCODE_DPAD_DOWN: 
         case KeyEvent.KEYCODE_ENTER: 
           return false; 
       } 
       mTabContent.requestFocus(View.FOCUS_FORWARD); 
       return mTabContent.dispatchKeyEvent(event); 
     } 
   }; 
   mTabWidget.setTabSelectionListener(new TabWidget.OnTabSelectionChanged() { 
     public void onTabSelectionChanged(int tabIndex, boolean clicked) { 
       setCurrentTab(tabIndex); 
       if (clicked) { 
         mTabContent.requestFocus(View.FOCUS_FORWARD); 
       } 
     } 
   }); 
   mTabContent = (FrameLayout) findViewById(com.android.internal.R.id.tabcontent); 
   if (mTabContent == null) { 
     throw new RuntimeException( 
         "Your TabHost must have a FrameLayout whose id attribute is " 
             + "'android.R.id.tabcontent'"); 
   } 
 } 

这个方法,是在增加选项卡之前由系统调用。在这个方法中需要通过tabs 这个ID实例化一个TabWidget,通过tabcontent这个ID实例化一个FrameLayout,用来放置选项卡内容。所以这两个ID也是固定的。

在上述布局文件中隐藏了系统默认的Widget,取而代之的是带有图片的Button。

看一下主要代码:


package com.iteye.androidtoast; 
import android.app.TabActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.widget.RadioGroup; 
import android.widget.RadioGroup.OnCheckedChangeListener; 
import android.widget.TabHost; 
public class MainActivity extends TabActivity implements OnCheckedChangeListener{ 
   
  private TabHost mHost; 
  private RadioGroup radioderGroup; 
  @Override 
  public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.maintabs); 
    //实例化TabHost 
    mHost=this.getTabHost(); 
    //添加选项卡 
    mHost.addTab(mHost.newTabSpec("ONE").setIndicator("ONE") 
          .setContent(new Intent(this,OneActivity.class))); 
    mHost.addTab(mHost.newTabSpec("TWO").setIndicator("TWO") 
        .setContent(new Intent(this,TwoActivity.class))); 
    mHost.addTab(mHost.newTabSpec("THREE").setIndicator("THREE") 
        .setContent(new Intent(this,ThreeActivity.class))); 
    mHost.addTab(mHost.newTabSpec("FOUR").setIndicator("FOUR") 
        .setContent(new Intent(this,FourActivity.class))); 
    mHost.addTab(mHost.newTabSpec("FIVE").setIndicator("FIVE") 
        .setContent(new Intent(this,FiveActivity.class))); 
    radioderGroup = (RadioGroup) findViewById(R.id.main_radio); 
    radioderGroup.setOnCheckedChangeListener(this); 
  } 
  @Override 
  public void onCheckedChanged(RadioGroup group, int checkedId) { 
    switch(checkedId){ 
    case R.id.radio_button0: 
      mHost.setCurrentTabByTag("ONE"); 
      break; 
    case R.id.radio_button1: 
      mHost.setCurrentTabByTag("TWO"); 
      break; 
    case R.id.radio_button2: 
      mHost.setCurrentTabByTag("THREE"); 
      break; 
    case R.id.radio_button3: 
      mHost.setCurrentTabByTag("FOUR"); 
      break; 
    case R.id.radio_button4: 
      mHost.setCurrentTabByTag("FIVE"); 
      break; 
    }     
  } 
} 
您可能感兴趣的文章:android底部菜单栏实现原理与代码Android左右滑出菜单实例分析android popwindow实现左侧弹出菜单层及PopupWindow主要方法介绍基于Android实现点击某个按钮让菜单选项从按钮周围指定位置弹出Android ListView长按弹出菜单二种实现方式示例Android界面设计(APP设计趋势 左侧隐藏菜单右边显示content)Android开发技巧之我的菜单我做主(自定义菜单)Android仿QQ空间底部菜单示例代码Android底部菜单栏实现的实例代码


--结束END--

本文标题: Android底部菜单简单应用

本文链接: https://lsjlt.com/news/22358.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Android底部菜单简单应用
    在Android中实现菜单功能有多种方法。 Options Menu:用户按下menu Button时显示的菜单。 Context Menu:用户长时间按下屏幕,所显示出来...
    99+
    2022-06-06
    菜单 Android
  • Android仿微信底部菜单栏效果
    前言在市面上,大多数的APP都需要通过底部菜单栏来将程序的功能进行分类整理,通常都是分为3-5个大模块,从而正确有效地引导用户去使用我们的APP。实现底部菜单栏的方法也有很多种。1.仿微信底部菜单栏(ViewPager+ImagerView...
    99+
    2023-05-30
    android 菜单
  • android实现简单底部导航栏
    本文实例为大家分享了android实现底部导航栏的具体代码,供大家参考,具体内容如下 常见的底部导航栏 动态效果 实现步骤 1.底部导航栏样式 我们应该在项目的res文件夹下新建...
    99+
    2024-04-02
  • Android仿微信顶/底部菜单栏效果
    本文要实现仿微信微信底部菜单栏+顶部菜单栏,采用ViewPage来做,每一个page对应一个XML,当手指在ViewPage左右滑动时,就相应显示不同的page(其实就是xml...
    99+
    2022-06-06
    菜单 菜单栏 Android
  • android怎么实现底部菜单栏功能
    在Android中,可以通过使用BottomNavigationView控件来实现底部菜单栏功能。以下是实现底部菜单栏功能的步骤: ...
    99+
    2024-03-11
    android
  • 利用Android怎么实现一个底部菜单栏
    利用Android怎么实现一个底部菜单栏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天我们封装一个底部的菜单栏,这个大多数的应用都会用到,因此我们来自定义,...
    99+
    2023-05-31
    android roi
  • android底部菜单栏实现原理与代码
    上一个项目已经做完了,这周基本上没事,所以整理了下以前的项目,想把一些通用的部分封装起来,这样以后遇到相似的项目就不用重复发明轮子了,也节省了开发效率。今天把demo贴出来一是...
    99+
    2022-06-06
    菜单 菜单栏 Android
  • Android自定义控件实现底部菜单(上)
    今天我们封装一个底部的菜单栏,这个大多数的应用都会用到,因此我们来自定义,方便以后项目的使用。 该控件的实现将分上下篇来介绍,先来看一个菜单栏的子控件–MenuItemM,这个...
    99+
    2022-06-06
    菜单 Android
  • Android自定义控件实现底部菜单(下)
    在app中经常会用到底部菜单的控件,每次都需要写好多代码,今天我们用到了前几篇博客里的控件来进一步封装底部菜单。先看效果图: 主要包括以下功能: 1 设置icon以及点击之...
    99+
    2022-06-06
    菜单 Android
  • Android仿QQ空间底部菜单示例代码
    之前曾经在网上看到Android仿QQ空间底部菜单的Demo,发现这个Demo有很多Bug,布局用了很多神秘数字。于是研究了一下QQ空间底部菜单的实现,自己写了一个,供大家参考...
    99+
    2022-06-06
    菜单 示例 qq空间 Android
  • Android如何实现底部缓慢弹出菜单
    这篇文章主要介绍了Android如何实现底部缓慢弹出菜单,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。项目要求要做一个从底部缓慢弹出一个Button Menu 开始编码: M...
    99+
    2023-05-30
    android
  • Android ViewFlipper简单应用
    Android ViewFlipper 简单应用,废话不多说,直接看代码 activity_guide.xml <?xml version="1.0" enc...
    99+
    2022-06-06
    Android
  • 简单实现Android弹出菜单效果
    本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下 功能描述:用户单击按钮弹出菜单。当用户选择一个菜单项,会触发MenuItemClick事件并...
    99+
    2022-06-06
    菜单 Android
  • Android实现360手机助手底部的动画菜单
    首先来看下我们实现的效果和360效果的对比: 360手机助手效果演示 本库实现的效果(Icon来自360手机助手,侵删) xml布局文件 注:为了美观,讲每个Butto...
    99+
    2022-06-06
    360手机助手 菜单 360手机 手机 动画 Android
  • Android PopupWindow实现右侧、左侧和底部弹出菜单
    本教程为大家分享了Android PopupWindow弹出菜单的具体代码,供大家参考,具体内容如下 项目代码:http://xiazai.jb51.net/20161...
    99+
    2022-06-06
    菜单 弹出菜单 popupwindow Android
  • Android仿UC底部菜单栏实现原理与代码
    相关的链接: Android 底部菜单栏实现 最近刚看完ViewPager,就想到做这样一个Demo,当然也参考了高手们的实例里边的网格菜单,开始我打算用自定义的imgBtn,...
    99+
    2022-06-06
    菜单 uc 菜单栏 Android
  • 在Android项目中实现底部菜单栏的方法
    在Android项目中实现底部菜单栏的方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。效果图:主要包括以下功能: 1 设置icon以及点击之后的icon 2 ...
    99+
    2023-05-31
    android roi 目中
  • Android开发中怎么实现一个底部菜单栏
    Android开发中怎么实现一个底部菜单栏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Android中实现菜单功能有多种方法。 Options Menu:用户按下men...
    99+
    2023-05-31
    android roi
  • Android菜单操作之创建并响应菜单
    上一篇《学习理解Android菜单Menu操作》简单介绍了一下Android的菜单,今天让我们看一下如何通过代码创建和响应最常用的选项菜单(options menu)。 一、创...
    99+
    2022-06-06
    Android
  • Android中怎么利用Activity从底部弹出菜单或窗口
    这篇文章给大家介绍Android中怎么利用Activity从底部弹出菜单或窗口,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一步:设计要弹出窗口的xml布局:<xml version="1....
    99+
    2023-05-30
    android activity
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作