您的位置:首页 > 移动开发

android app 框架之BaseActivity

2016-08-17 18:59 211 查看
为什么要设计BaseActivity?

所有的框架设计,都是为了解决一些问题,提高效率。

设计BaseActivity的目的如下

1 是减少重复的工作。如每个Activity都要弹出Toast,弹出Dialog;可以每次都写一次,有人说,我直接copy就完了,有什么难的。但是,如果有十个界面都调用了loading的dialog,coding的时候不知不觉。但是,在修改的时候呢,即使修改一个很小的东西,那也得改十次。天生软件员,就是为了拯救这类麻烦。

2 统一的编码风格。所谓的维护软件完整性,一个app最好是有一个统一的风格,字符大小,字体,背景颜色等保持相对统一。

现在就说这两个原因吧。

下面以共有的Toolbar为例。几乎所有的Activity都需要显示返回键和title。

那么如何通过设计BaseActivity轻松搞定。

代码:

BaseActivity.java

MainActivity.java

activity_main.xml

frg_base.xml:

AndroidManifest.xml

frg_base.xml

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/toolbar_height"
android:background="?attr/colorPrimary"
android:minHeight="0dp"
android:paddingEnd="9dp"
app:navigationIcon="@mipmap/actionbar_back">
</android.support.v7.widget.Toolbar>

<FrameLayout
android:id="@+id/layout_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</FrameLayout>
</LinearLayout>


BaseActivity.java

public class BaseActivity extends AppCompatActivity {

private LinearLayout rootlayout;
private FrameLayout frameLayout;
protected Toolbar mToolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public void setContentView(@LayoutRes int layoutResID) {
rootlayout = (LinearLayout) getLayoutInflater().inflate(R.layout.activity_base,null);
mToolbar = (Toolbar) rootlayout.findViewById(R.id.my_toolbar);
frameLayout = (FrameLayout) rootlayout.findViewById(R.id.layout_container);
// 将传入的layout加载到activity_base的content_frame里面
getLayoutInflater().inflate(layoutResID, frameLayout, true);
super.setContentView(rootlayout);

setUpActionBar();

}

/**
* toolbar的设置
*/
public void setUpActionBar() {
setSupportActionBar(mToolbar);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
}
}


引用BaseActivity

MainActivity.java

public class MainActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initListener();
initValues();
}


后面还有一些公共的属性,和方法,可以自己慢慢完善。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: