SlideShare a Scribd company logo
Android development
patterns and tips
Ting Cheng
USING LAZY LOADING AND
AVOIDING REPLICATION
• <include />
• <merge />
• <ViewStub />
<merge />
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg" />
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Save"
android:textColor="@android:color/white"
android:textSize="32sp"
android:gravity="center"
android:layout_gravity="bottom"
android:background="#90000000"
android:textAppearance="?android:attr/textAppearanceLarge" />
</FrameLayout>
Android development patterns and tips
Android development patterns and tips
<ViewStub />
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="username"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10"
android:inputType="textPersonName" >
</EditText>
</LinearLayout>
<ViewStub
android:id="@+id/main2_company"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/company" />
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="company"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
Android development patterns and tips
public class Main extends Activity {
private final static String TAG = "Main";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
ViewStub view = (ViewStub) findViewById(R.id.main2_company);
view.inflate();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
Android development patterns and tips
• ViewStub 只能 inflate 一次。
• ViewStub 是用來 inflate layout view,而不是
View。
Logger
• public static boolean isLoggable (String tag, int level)
• setprop log.tag.<YOUR_LOG_TAG> <LEVEL>
• VERBOSE, DEBUG, INFO, WARN, ERROR,
ASSERT, or SUPPRESS
DEMO
The Model-View-Presenter
pattern
差異
• MVC
• View 可以與 Model 直接互動。
• Controller 是基於行為,並且可被多個 View 共享。
• MVP
• View 不直接與 Model 互動。
• Presenter 和 View 互動是通過 interface 來互動,方便進行單元測
試。
• 通常 View 和 Presenter 是一對一的,但複雜 View 可能有多個
Presenter 來處理邏輯。
四要素
• View - 負責顯示 UI 元素,與用戶進行互動。
• View Interface - 需要 View 實現的界面,用來和
Presenter 互動,降低耦合,方便進行單元測試。
• Model - 資料的操作,或者功能的細節。
• Presenter - 作為 View 和 Model 的互動,處理與
用戶的互動邏輯。
DEMO

More Related Content

PPT
Flash ria usability 刘轩飞
PPT
Flash RIA Usability
PDF
2014南部創新應用工具研討會 快速開發行動 app
PDF
20070329 Java Programing Tips
PPTX
PPTX
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
PDF
Java class loading tips and tricks - Java Colombo Meetup, January, 2014
PPT
Java: Class Design Examples
Flash ria usability 刘轩飞
Flash RIA Usability
2014南部創新應用工具研討會 快速開發行動 app
20070329 Java Programing Tips
JavaOne - 10 Tips for Java EE 7 with PrimeFaces
Java class loading tips and tricks - Java Colombo Meetup, January, 2014
Java: Class Design Examples
Ad

Android development patterns and tips

  • 2. USING LAZY LOADING AND AVOIDING REPLICATION • <include /> • <merge /> • <ViewStub />
  • 4. <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/bg" /> <TextView android:id="@+id/textView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Save" android:textColor="@android:color/white" android:textSize="32sp" android:gravity="center" android:layout_gravity="bottom" android:background="#90000000" android:textAppearance="?android:attr/textAppearanceLarge" /> </FrameLayout>
  • 8. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="username" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:inputType="textPersonName" > </EditText> </LinearLayout> <ViewStub android:id="@+id/main2_company" android:layout_width="match_parent" android:layout_height="wrap_content" layout="@layout/company" /> </LinearLayout>
  • 9. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="company" android:textAppearance="?android:attr/textAppearanceLarge" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" > <requestFocus /> </EditText> </LinearLayout>
  • 11. public class Main extends Activity { private final static String TAG = "Main"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); ViewStub view = (ViewStub) findViewById(R.id.main2_company); view.inflate(); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } }
  • 13. • ViewStub 只能 inflate 一次。 • ViewStub 是用來 inflate layout view,而不是 View。
  • 14. Logger • public static boolean isLoggable (String tag, int level) • setprop log.tag.<YOUR_LOG_TAG> <LEVEL> • VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT, or SUPPRESS
  • 15. DEMO
  • 17. 差異 • MVC • View 可以與 Model 直接互動。 • Controller 是基於行為,並且可被多個 View 共享。 • MVP • View 不直接與 Model 互動。 • Presenter 和 View 互動是通過 interface 來互動,方便進行單元測 試。 • 通常 View 和 Presenter 是一對一的,但複雜 View 可能有多個 Presenter 來處理邏輯。
  • 18. 四要素 • View - 負責顯示 UI 元素,與用戶進行互動。 • View Interface - 需要 View 實現的界面,用來和 Presenter 互動,降低耦合,方便進行單元測試。 • Model - 資料的操作,或者功能的細節。 • Presenter - 作為 View 和 Model 的互動,處理與 用戶的互動邏輯。
  • 19. DEMO