导航标签在移动设备上非常常见,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 p_w_picpathFragment;
public ListenB(ImageFragment imf) {
super();
p_w_picpathFragment=imf;
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
//选择是事件
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
ft.add(R.id.daohang, p_w_picpathFragment, null);
}
//选择别的tab时的动作。移除当前Fragment
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
ft.remove(p_w_picpathFragment);
}
}
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.p_w_picpath, container, false);
return ll;
}
}
另外还需要另个xml文件。分别是每个Tab页显示的内容。第一个显示文本,第二个显示图片,再次不再给出具体额代码。注意:入口Activity界面布局文件中。最外层的Layout要加一个Id属性。
运行结果:
转载于:https://blog.51cto.com/shaotao/1293161