Android 1.6: A Blast from the Past
Introduction
Android 1.6, also known as “Donut,” was released in September 2009. It marked a significant step in the evolution of Android, introducing several key features, including:
- CDMA Support
- Improved Camera Features
- Text-to-Speech Engine
- Search Suggestions
While Android 1.6 has long been superseded by newer versions, understanding its fundamentals can provide valuable context for understanding modern Android development practices.
Fragments: A Building Block for Flexible UI Design
Introduction
Fragments are reusable UI components introduced in Android 3.0 (Honeycomb). They offer a modular approach to building user interfaces, allowing developers to create flexible layouts that adapt well to different screen sizes and orientations.
Benefits of Fragments
- Modular Design: Break down complex UIs into smaller, manageable units.
- Flexibility: Combine and rearrange fragments to create diverse layouts.
- Reusability: Reuse fragments across different activities and applications.
- Adaptability: Dynamically add, remove, and replace fragments based on user interaction or device configuration.
TabHost: Navigating with Tabs
Introduction
TabHost is a UI element used to present content in a tabbed format. It allows users to switch between different sections of an application by selecting the corresponding tab.
Implementation
To implement a TabHost, you need to:
- Create a
TabHost
instance in your layout file. - Add
TabSpec
instances to the TabHost, each representing a tab. - Set the content view for each tab using
setContent
orsetView
.
Combining Fragments and TabHost
Integrating Fragments into TabHost
To create a tabbed interface using fragments, follow these steps:
- Create a
FragmentActivity
as your base activity. - Add a
TabHost
to your layout file. - Within each
TabSpec
, instantiate a newFragment
and add it to the activity’s layout. - Use the
FragmentManager
to manage the fragments, including adding, removing, and replacing them as needed.
Code Example: Simple Tabbed Activity with Fragments
Layout File (activity_main.xml)
<?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"> <TabHost android:id="@+id/tabHost" android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <FrameLayout android:id="@+id/tabcontent" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1"> </FrameLayout> </LinearLayout> </TabHost> </LinearLayout>
Activity File (MainActivity.java)
import android.app.Activity; import android.os.Bundle; import android.widget.TabHost; import android.widget.TabHost.TabSpec; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TabHost tabHost = (TabHost) findViewById(R.id.tabHost); tabHost.setup(); // Create TabSpec for the first tab TabSpec tabSpec1 = tabHost.newTabSpec("tab1"); tabSpec1.setContent(R.id.tabcontent); // Placeholder, will be replaced by fragment tabSpec1.setIndicator("Tab 1"); // Create TabSpec for the second tab TabSpec tabSpec2 = tabHost.newTabSpec("tab2"); tabSpec2.setContent(R.id.tabcontent); // Placeholder, will be replaced by fragment tabSpec2.setIndicator("Tab 2"); // Add the tabs to the TabHost tabHost.addTab(tabSpec1); tabHost.addTab(tabSpec2); } }
Fragment File (MyFragment.java)
import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MyFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_my, container, false); // Set the text in the TextView TextView textView = (TextView) view.findViewById(R.id.textView); textView.setText("This is Fragment Content"); return view; } }
Output:
When running this code, the app will display two tabs: “Tab 1” and “Tab 2.” Each tab will display the text “This is Fragment Content,” indicating that the fragment is successfully loaded and displayed within the corresponding tab.
Conclusion
While Android 1.6 and TabHost may seem like relics of the past, understanding these concepts provides a foundation for comprehending modern Android development practices. Fragments offer a powerful and flexible approach to UI design, while TabHost allows for easy navigation between different sections of an application.