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

自定义UI框架中:

/***************************************************** * 再调用时,重写函数 * */protected void prepare() {// do nothing or you override it}/***************************************************** * 再调用时,重写函数 * */protected View getTop() {// do nothing or you override itreturn 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);}

调用控件实现功能:

@Overrideprotected 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);}@Overrideprotected String getTabItemId(int position) {Log.i(TAG, "getTabItemId");return mItems.get(position).getTitle();//鑾峰彇褰撳墠ID}@Overrideprotected Intent getTabItemIntent(int position) {Log.i(TAG, "getTabItemIntent");return mItems.get(position).getIntent();}@Overrideprotected 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 shadowsetContentView(R.layout.ui_tabhost);Log.i(TAG, "------------------this is TabActivity-----------");mLayoutflater = getLayoutInflater();mTabHost = getTabHost();//Returns the TabHost the activity is using to host its tabsmTabWidget = getTabWidget();//Returns the TabWidget the activity is using to draw the actual tabs.prepare();initTabSpec();}

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


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


更多相关文章

  1. C语言函数的递归(上)
  2. android 动态注册 广播
  3. Android(安卓)native 内存泄露检测
  4. Android(安卓)-- Context
  5. Android遇到的问题解决方法
  6. android 多线程实现方式、并发与同步学习总结
  7. SQlite数据库(4)---DAO(data access object)数据访问对象
  8. webView中js调用android方法一调用程序就退出是怎么回事
  9. Android(安卓)2.2关闭所有Activity完全退出程序方法

随机推荐

  1. Android中监听语言变化的两种方式
  2. android opengl floatbuffer
  3. Android实现横竖屏、全屏的几种方式
  4. Android Audio代码分析1 - AudioTrack使
  5. Android(安卓)-- 图片异步上传到PHP服务
  6. Android上使用Google Maps最最简单的例子
  7. android常用的设计模式总结 一
  8. 关于android的ListView优化
  9. Android能否在子线程中更新UI呢?
  10. Android 利用AutoCompleteTextView实现模