Android -- ActionBar(导航标签)

导航标签在移动设备上非常常见,2.x及以前的版本中,Activity的导航标签都是使用TabHost及TabWidget实现的,在4.0以后,使用ActionBar代替。


ActionBar 会自动适配不同屏幕分辨率的系统,这就解决了不同分辨率的适配问题。

下面通过一个例子看ActionBar的使用。

示例1:使用ActionBar实现Activity的导航标签


入口Activity:MainActivity.java

public class MainActivity extends Activity {
    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        actionBar.setDisplayHomeAsUpEnabled(true);
        TextFragment tf = new TextFragment();
        Tab tab1 = actionBar.newTab();
        tab1.setText("导航一");
        tab1.setIcon(R.drawable.ic_launcher);
        tab1.setTabListener(new ListenA(tf));
        actionBar.addTab(tab1);
                                                                                                                                                  
                                                                                                                                                         
        ImageFragment imf=new ImageFragment();
        Tab tab2 = actionBar.newTab();
        tab2.setText("导航2");
        tab2.setIcon(R.drawable.ic_launcher);
        tab2.setTabListener(new ListenB(imf));
        actionBar.addTab(tab2);
    }
    //点击屏幕抬起时隐藏ActionBar
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        ActionBar actionBar=getActionBar();
        switch (event.getAction()) {
        case MotionEvent.ACTION_UP:
            if (actionBar.isShowing()) {
                actionBar.hide();
            }else {
                actionBar.show();
            }
            break;
        default:
            break;
        }
        return true;
    }
    //第二个Fragment的监听
    class ListenB implements ActionBar.TabListener {
        private ImageFragment imageFragment;
        public ListenB(ImageFragment imf) {
            super();
            imageFragment=imf;
        }
        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
                                                                                                                                                      
        }
        //选择是事件
        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            ft.add(R.id.daohang, imageFragment, null);
        }
        //选择别的tab时的动作。移除当前Fragment
        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            ft.remove(imageFragment);
        }
    }
    class ListenA implements ActionBar.TabListener {
        private TextFragment textFragment;
        public ListenA(TextFragment textFragment) {
            super();
            this.textFragment = textFragment;
        }
        @Override
        public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
            // TODO Auto-generated method stub
        }
        @Override
        public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
        arg1.add(R.id.daohang, textFragment, null);
        }
        @Override
        public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
            arg1.remove(textFragment);
        }
    }
}



第一个导航页:TextFragment.java


public class TextFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View ll=inflater.inflate(R.layout.text, container, false);
                                                                                                                      
        return ll;
    }
}

第二个导航页:ImageFragment.java

public class ImageFragment extends Fragment{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View ll=inflater.inflate(R.layout.image, container, false);
        return ll;
    }
}

另外还需要另个xml文件。分别是每个Tab页显示的内容。第一个显示文本,第二个显示图片,再次不再给出具体额代码。注意:入口Activity界面布局文件中。最外层的Layout要加一个Id属性。


运行结果:



你可能感兴趣的:(android,Actionbar, ,Tab导航)