android底部菜单应用

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

这里写图片描述
xml代码

这里写代码片

这里写代码片

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;  
    }         
}  

}

转自:http://www.iteye.com/topic/1116261#2256664

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值