Android 封裝BasseActivity
阿新 • • 發佈:2018-11-28
在Android開發中作為四大元件之一的Activity的使用頻率非常高,我們的應用展現給使用者的每一個介面基本上都離不開Activity。在一個專案中會用到多個Activity用於展示不同內容,雖然展示的內用不同,但是通過觀察介面和和程式碼就會發現有些程式碼在幾個Activity基本是類似的,比如一些頭佈局和一些廣播的註冊等。這些程式碼我們就可以抽取出來封裝到一個共同的父類中,具體的實現在之類中實現,這樣就可以方便我們日後維護,也會提高我們的開發效率。例如像下面的這中介面的佈局
BaseActivity
public abstract class BaseActivity extends Activity { protected final String TAG = this.getClass().getSimpleName(); private LinearLayout contentLayout; private TextView title; private Button backButton; private Button moreButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); super.setContentView(R.layout.activity_base); contentLayout = findViewById(R.id.content_layout); backButton = findViewById(R.id.back); backButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onBack(); } }); title = findViewById(R.id.title); moreButton = findViewById(R.id.more); moreButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onMore(); } }); initView(); initData(); } /** * 更多 */ protected void onMore() { } /** * 返回鍵 */ protected void onBack() { } @Override public void setContentView(View view) { contentLayout.addView(view); } @Override public void setContentView(int layoutResID) { View view = View.inflate(this, layoutResID, null); setContentView(view); } /** * 是否全屏顯示 * @param isVisible */ public void showWindowsTitle(boolean isVisible) { if (!isVisible) { requestWindowFeature(Window.FEATURE_NO_TITLE); } } /** * 設定標題 * @param text */ public void setTitle(CharSequence text) { title.setText(text); } /** * 設定標題 * @param resid */ public void setTitle(int resid) { title.setText(resid); } /** * 初始化控制元件 */ public abstract void initView(); /** * 初始化資料 */ public abstract void initData(); /** * 介面跳轉 * @param packageContext * @param cls * @param extras */ public void startActivity(Context packageContext, Class<?> cls, Bundle extras) { Intent intent = new Intent(packageContext, cls); if (extras != null) { intent.putExtras(extras); } startActivity(intent); } }
BaseActivity的佈局檔案
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".BaseActivity"> <RelativeLayout android:id="@+id/header_layout" android:layout_width="match_parent" android:background="#2d72e9" android:layout_height="40dp"> <Button android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:text="@string/string_back" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/string_title" /> <Button android:id="@+id/more" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="@string/string_more" /> </RelativeLayout> <!--內容部分,需要加入子類的佈局--> <LinearLayout android:id="@+id/content_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/header_layout" android:orientation="vertical" />
它的一個子類
public class MainActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void initView() { } @Override public void initData() { } }
子類的佈局檔案
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
對BaseActivity 的封裝它的優勢是顯而易見的。
1.提取公共代,碼便於維護
2.減少編寫程式碼,提高開發效率
這是我對BaseActivity封裝的初步理解,後期有新的發現總結還會持續更新
https://github.com/songdaren123/BaseActivity