13-6-3 android 自定义tabhost在底部与框架函数的讲解2

继上一篇文章,问什么在自定义UI的时候会出现下面情况。

自定义UI框架中:

	/*****************************************************
	 * 再调用时,重写函数
	 * */
	protected void prepare() {
		// do nothing or you override it
	}

	/*****************************************************
	 * 再调用时,重写函数
	 * */
	protected View getTop() {
		// do nothing or you override it
		return null;
	}
	
	protected int getTabCount() {
		return mTabHost.getTabWidget().getTabCount();
	}

	/** TabItem函数功能*****************************************/
	abstract protected void setTabItemTextView(TextView textView, int position);

	abstract protected String getTabItemId(int position);
	
	abstract protected Intent getTabItemIntent(int position);

	abstract protected int getTabItemCount();	
	
	protected void setCurrentTab(int index) {
		mTabHost.setCurrentTab(index);
	}
	
	protected void focusCurrentTab(int index) {
		mTabWidget.focusCurrentTab(index);
	}

调用控件实现功能:

	@Override
	protected void setTabItemTextView(TextView textView, int position) {
		Log.i(TAG, "setTabItemTextView");
		textView.setPadding(3, 3, 3, 3);
		textView.setText(mItems.get(position).getTitle());
		textView.setBackgroundResource(mItems.get(position).getBg());
		textView.setCompoundDrawablesWithIntrinsicBounds(0, mItems.get(position).getIcon(), 0, 0);
		
	}
	
	@Override
	protected String getTabItemId(int position) {
		Log.i(TAG, "getTabItemId");
		return mItems.get(position).getTitle();	//鑾峰彇褰撳墠ID
	}


	@Override
	protected Intent getTabItemIntent(int position) {
		Log.i(TAG, "getTabItemIntent");
		return mItems.get(position).getIntent();
	}

	@Override
	protected int getTabItemCount() {
		Log.i(TAG, "getTabItemCount");
		return mItems.size();
	}

1 重写与重载的区别

重载:

(1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

重载Overloading是一个类中多态性的一种表现。

(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。


重写:

(1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

方法重写又称方法覆盖。

(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

(3)子类函数的访问修饰权限不能少于父类的;

引用:http://www.cnblogs.com/bluestorm/archive/2012/03/01/2376236.html

2 运行过程

下面是我截取的一段log:

06-03 03:02:21.667: I/TabActivity(335): ------------------this is TabActivity-----------
06-03 03:02:21.667: I/MainActivity(335): prepare--
06-03 03:02:21.707: I/TabActivity(335): initTabSpec
06-03 03:02:21.707: I/MainActivity(335): getTabItemCount
06-03 03:02:21.727: I/MainActivity(335): setTabItemTextView
06-03 03:02:21.777: I/MainActivity(335): getTabItemId
06-03 03:02:21.787: I/MainActivity(335): getTabItemIntent
06-03 03:02:21.888: I/MainActivity(335): setTabItemTextView
06-03 03:02:21.897: I/MainActivity(335): getTabItemId
06-03 03:02:21.897: I/MainActivity(335): getTabItemIntent
06-03 03:02:21.917: I/MainActivity(335): setTabItemTextView
06-03 03:02:21.987: I/MainActivity(335): getTabItemId
06-03 03:02:21.987: I/MainActivity(335): getTabItemIntent
06-03 03:02:22.007: I/MainActivity(335): setTabItemTextView
06-03 03:02:22.038: I/MainActivity(335): getTabItemId
06-03 03:02:22.038: I/MainActivity(335): getTabItemIntent
06-03 03:02:22.051: I/MainActivity(335): ---------this is MainAcitvity--------

可见,我们在public class MainActivity extends TabHostActivity 其中MainActivity继承了TabhostActivity类,那么马上跳转到MainActivity类中执行当前的构造函数

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// set theme because we do not want the shadow
		setContentView(R.layout.ui_tabhost);
		Log.i(TAG, "------------------this is TabActivity-----------");
		mLayoutflater = getLayoutInflater();
		mTabHost = getTabHost();	//Returns the TabHost the activity is using to host its tabs
		mTabWidget = getTabWidget();//Returns the TabWidget the activity is using to draw the actual tabs.
		
		
		prepare();
		initTabSpec();
	}

因为在编译时已经对其内部方法进行了重写,那么当前的方法都是重写后的方法。那么每次使用的时候框架代码我们就可以封装起来,不再修改。我们需要修改的也就是重写的方法,这样我们对自定义UI的控制更加灵活。


以上我们在不改变框架代码的情况下,通过重写框架代码的方法实现UI的自定义。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值