`

ActivityGroup组件工具导航栏(7)

阅读更多

       美团,qq,都有自己的工具导航栏,它的功能类似前面几章讲过的标签,但是在实际应用中很少用标签TabHost,操作使用较困难,所以一般不会作为实现界面分页框架的首选,使用最多的是ActivityGroup与GridView相结合方式。

例如:

 

 

     为什么要用分页框架呢?我们之前学的每一个Activity都是采用屏幕独占的方式运行,使用ActivityGroup就可以使多个Activity运行在一个屏幕上,而且每一个Activty继续独立工作,这样的模式就大大提高了系统流畅度,不信可以去测测这样的模式与之前模式页面切换的使用时间。

 

     安卓中专门提供import android.app.ActivityGroup;类来控制Activity

首先编写其中显示之一的Activity主布局函数:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ImageView 
		android:layout_width="fill_parent"
		android:layout_height="wrap_content" 
		android:src="@drawable/tab1" />
</LinearLayout>

 

Activity只要显示图片Layout即可:

public class MyActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_my);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.my, menu);
		return true;
	}

}

 定义ActivityGroup用于管理:

public class MyActivityGroupDemo extends ActivityGroup {
	private GridView gridviewToolbar; // 工具菜单栏
	private MenuImageAdapter menu = null; // 图片适配器
	private LinearLayout content = null; // 填充内容
	private int menu_img[] = new int[] { R.drawable.menu_main,
			R.drawable.menu_news, R.drawable.menu_sms, R.drawable.menu_more,
			R.drawable.menu_exit }; // 填充的图片的资源
	private int width = 0; // 求出平均的宽度
	private int height = 0; // 求出平均的高度,定位显示
	private Intent intent = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.requestWindowFeature(Window.FEATURE_NO_TITLE); // 取消标题
		super.setContentView(R.layout.main);
		this.gridviewToolbar = (GridView) super.findViewById(R.id.gridView1);
		this.content = (LinearLayout) super.findViewById(R.id.content);

		// 定义工具栏的一些信息显示
		this.gridviewToolbar.setNumColumns(this.menu_img.length); // 求出可以保存的个数
		this.gridviewToolbar.setSelector(new ColorDrawable(Color.TRANSPARENT));
		this.gridviewToolbar.setGravity(Gravity.CENTER);
		this.gridviewToolbar.setVerticalSpacing(0);

		this.width = super.getWindowManager().getDefaultDisplay().getWidth()
				/ this.menu_img.length;
		this.height = super.getWindowManager().getDefaultDisplay().getHeight() / 8;

		this.menu = new MenuImageAdapter(this, this.menu_img, this.width,
				this.height, R.drawable.menu_selected);
		this.gridviewToolbar.setAdapter(this.menu);//定义适配器类
		this.switchActivity(0); // 第一个被选中
		this.gridviewToolbar
				.setOnItemClickListener(new OnItemClickListenerImpl());
	}

	private class OnItemClickListenerImpl implements OnItemClickListener {

		@Override
		public void onItemClick(AdapterView<?> parent, View view, int position,
				long id) {
			MyActivityGroupDemo.this.switchActivity(position);
		}
	}

	private void switchActivity(int id) { // 切换选中的操作
		this.menu.setFocus(id); // 设置选中图片的背景
		this.content.removeAllViews(); // 删除所有的内容
		switch (id) {
		case 0:
			this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);
			break;
		case 1:
			this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);
			break;
		case 2:
			this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);
			break;
		case 3:
			this.intent = new Intent(MyActivityGroupDemo.this, MyActivity.class);
			break;
		case 4:
			this.exitDialog() ;
			return;
		}
		this.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
		Window subActivity = super.getLocalActivityManager().startActivity(
				"subActivity", this.intent);
		this.content.addView(subActivity.getDecorView(),
				LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
	}

	private void exitDialog() {
		Dialog dialog = new AlertDialog.Builder(this).setIcon(R.drawable.pic_m)
				.setTitle("程序退出? ").setMessage("您确定要退出本程序吗?")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						MyActivityGroupDemo.this.finish() ;
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						MyActivityGroupDemo.this.switchActivity(0);
					}
				}).create();

		dialog.show();
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if(keyCode == KeyEvent.KEYCODE_BACK) {
			this.exitDialog() ;
		}
		return false ;
	}
	
}

 

主布局函数为:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" 
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<RelativeLayout 
		xmlns:android="http://schemas.android.com/apk/res/android"
		android:layout_width="fill_parent"
		android:layout_height="fill_parent">
		<LinearLayout 
			xmlns:android="http://schemas.android.com/apk/res/android"
			android:id="@+id/content"
			android:orientation="vertical" 
			android:layout_width="fill_parent"
			android:layout_height="fill_parent">
		</LinearLayout>
		<GridView
			android:id="@+id/gridviewbar" 
			android:layout_width="fill_parent"
			android:layout_height="wrap_content"
			android:layout_alignParentBottom="true"
			android:fadingEdgeLength="5px"
			android:fadingEdge="vertical"/>
	</RelativeLayout>
</LinearLayout>

 

然后是适配器设置:

public class MenuImageAdapter extends BaseAdapter{

	private Context context=null;//传递上下文文本
	private ImageView[] menumag;//保存显示标签图片
	private int imageselected;//保存记录选中图片标签索引位置
	public MenuImageAdapter(Context context,int image[],int weight,int height,int imageselected){
		
		this.context=context;
		this.imageselected=imageselected;
		this.menumag=new ImageView[image.length];
		for(int x=0;x<image.length;x++){
			this.menumag[x]=new ImageView(this.context);
			this.menumag[x].setLayoutParams(new GridView.LayoutParams(weight,height));//布局参数
			this.menumag[x].setAdjustViewBounds(false);//不调整边界
			this.menumag[x].setPadding(3, 3, 3, 3);
			this.menumag[x].setImageResource(image[x]);
			
			
		}
		
	}
	public int getCount() {
		// TODO Auto-generated method stub
		return this.menumag.length;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return this.menumag[position];
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ImageView imgView = null ;
		if(convertView == null) {
			imgView = this.menumag[position] ; 
		} else {
			imgView = (ImageView) convertView ;
		}
		return imgView;
	}

	public void setFocus(int selId) {	// 设置选中的显示
		for (int x = 0; x < this.menumag.length; x++) {
			if (x != selId) {	// 没有选中的
				this.menumag[x].setBackgroundResource(0) ;	// 不设置背景图片
			}
		}
		this.menumag[selId].setBackgroundResource(this.imageselected) ;
	}
}

 

接下来记得配置AndroidMainfest Actvity信息,这里为了方便起见,只设置了一个Activity,读者可以自行设置

<activity
			android:name="MyActivity" />

 

实现效果如下:




 
 

 

 

  • 大小: 3.8 KB
  • 大小: 42.7 KB
  • 大小: 25.9 KB
0
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics