`
androidtoast
  • 浏览: 211875 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
38befa0e-3f74-3314-92d9-475c7fc3c19b
Android学习——入门...
浏览量:125337
社区版块
存档分类
最新评论

android底部菜单应用

阅读更多

在android中实现菜单功能有多种方法。

Options Menu:用户按下menu Button时显示的菜单。

Context Menu:用户长时间按下屏幕,所显示出来的菜单也称为上下文菜单。

Submenu:子菜单。

但是有时候这些内置的菜单并不能满足我们功能,这就需要自己自定义一种菜单。接下来我说的这种就是通过TabHost与RadioGroup结合完成的菜单。这也是很常用的一种底部菜单做法。先上图:

 



 

首先看布局文件:

 

 

<?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());   
   } 

 

 

 当内容发生改变时它会调用这个方法,来更新列表或者其他视图,而这个方法中需要实例化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{   
    /** Called when the activity is first created. */  
    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;   
        }          
    }   
}  

 

 

 这个应该没有什么好难理解的。OK该睡了。有什么问题留言!

 

  • 大小: 247 KB
分享到:
评论

相关推荐

    Android 底部菜单.zip

    下面我们将深入探讨Android底部菜单的设计原则、实现方式以及可能涉及的关键技术。 1. **设计规范**: - 底部菜单通常包含3到5个主要操作,每个图标和对应的标签清晰地表示了其功能。 - 图标应简洁且易于识别,...

    Android底部菜单栏

    这个“Android底部菜单栏”教程是为初学者设计的,旨在帮助他们理解如何在Android应用中实现这一功能。我们将主要探讨TabHost组件,它是Android早期版本中用来实现标签页式导航的一种方式。 首先,我们需要了解底部...

    android底部菜单中间部分凸起

    总结来说,"android底部菜单中间部分凸起"是通过自定义样式和选中事件监听来实现的,而"微信底部带数目显示菜单"则是通过自定义菜单项视图或者使用BadgeView来完成的。这两个特性都是为了提升用户体验,提供清晰的...

    android底部凸起导航菜单

    本示例中的“android底部凸起导航菜单”是利用`FrameLayout`来实现的,它具有类似`RadioGroup`的交互效果,即点击某个选项时会显示高亮状态,提供清晰的用户反馈。 `FrameLayout`是Android的一种布局容器,它允许子...

    Android底部菜单和侧滑菜单的综合应用

    里面有引导页和登录页面供大家参考。Android底部菜单和侧滑菜单的综合应用,大家不下载的可以去看源码http://blog.csdn.net/u012600997/article/details/50686472

    Android Studio 底部自定义菜单

    消息数提醒通常需要与应用的数据模型相结合,当有新消息时,通过`BadgeView`或者在底部菜单图标上添加一个小红点来显示未读消息的数量。 3. 使用第三方库:还有一些第三方库,如`BottomBar`和`Material Design ...

    android 底部菜单实现

    在Android应用开发中,底部菜单(Bottom Navigation)是一种常见的用户界面元素,用于提供在多个主要功能之间快速切换的途径。这种设计模式遵循Material Design规范,旨在提高用户体验,让用户能够轻松地访问应用...

    android activitygroup底部菜单

    标题“android activitygroup底部菜单”指的是在Android应用中,使用ActivityGroup来实现底部菜单的功能。底部菜单通常由几个图标按钮组成,点击不同的按钮可以切换到相应的功能页面,而不会每次都完全退出当前...

    android底部菜单栏

    总的来说,创建Android底部菜单栏涉及到布局设计、菜单资源定义、事件监听以及可能的样式定制。开发者需要对Android的UI组件和生命周期有深入理解,才能构建出用户体验良好的底部导航功能。通过不断实践和优化,我们...

    Android - 底部菜单架构设计及封装实现

    在Android应用开发中,底部菜单(Bottom Navigation)是常见的用户界面元素,用于提供主要功能间的快速切换。本文将深入探讨如何进行底部菜单的架构设计以及封装实现,参考自...

    Android 底部菜单

    在Android应用开发中,底部菜单(Bottom Navigation)是一种常见的用户界面元素,用于提供主要功能间的快速切换。这种设计模式在Android Material Design规范中被广泛推荐,可以提高用户体验,使用户能够轻松地在...

    Android自定义底部菜单

    在Android的应用中,经常会见到底部菜单.而在企业级的Android应用中,也存在同样的需求,但与微信这些大众软件的区别在于企业级的Android应用由于UI页面很多,每个页面都需要有底部菜单,而且每个页面的底部菜单按钮...

    Android 底部菜单栏(RadioGroup+Fragment)美化

    在Android应用开发中,底部菜单栏(通常称为TabBar或BottomNavigationView)是用户界面不可或缺的一部分,它为用户提供了一种在不同功能模块之间切换的方式。本文将深入探讨如何使用RadioGroup结合Fragment来实现...

    Android--底部菜单栏实现

    总之,创建一个Android底部菜单栏需要理解`BottomNavigationView`的工作原理,以及如何结合`MenuItem`和`Fragment`来响应用户的交互。同时,掌握好Android布局管理、事件监听和数据绑定等基本概念也是必不可少的。...

    android 自定义仿微信底部菜单栏

    通过以上步骤,我们可以成功地创建一个仿微信底部菜单栏,不仅提供了基本的导航功能,还实现了字体显示隐藏和菜单项的动态缩放,极大地提升了应用的交互性和美观性。在开发过程中,不断优化和迭代,将使这个底部菜单...

    Android底部菜单栏 仿微博效果

    在Android应用开发中,创建一...总的来说,通过TabHost实现的Android底部菜单栏仿微博效果是一种基础方法,适用于学习和简单的应用。然而,为了提供更现代的用户体验,开发者应当考虑使用Android官方推荐的组件和技术。

    Android 底部菜单.zip项目安卓应用源码下载

    在Android应用开发中,底部菜单(Bottom Navigation)是一种常见的交互元素,它位于屏幕的底部,通常包含三到五个图标,每个图标对应一个主要的功能模块。这种设计使得用户可以方便地在不同页面之间切换,提高了用户...

    android 底部菜单栏 TabHost

    在Android应用开发中,底部菜单栏(Bottom Navigation Bar)是一种常见的用户界面元素,它提供了一种方便用户在多个主要功能之间切换的方式。本资源聚焦于使用`TabHost`组件来实现这种底部菜单栏功能。`TabHost`是...

    Android 使用RadioGroup实现底部菜单栏

    在Android应用开发中,创建一个底部菜单栏是十分常见的需求,它可以帮助用户在多个功能之间进行切换。本篇文章将深入探讨如何使用`RadioGroup`组件来实现这样的底部导航菜单栏。 `RadioGroup`是Android SDK提供的一...

Global site tag (gtag.js) - Google Analytics