Many of the individual on-screen components that we see in an Android application are provided by the android:widget package. It provides dozens of classes and interfaces for creating and using such objects. The system also allows us to extend the base android.view.View class to create custom widgets of our own.
The Android Widget package provides us with a wide variety of purpose-built components such as text views, date pickers, rating bars, and all kinds of other familiar UI elements. In addition, many widgets have associated interfaces such as the list adapters that we saw in the previous chapter.
It is worth making the distinction here, between Widgets, which are descended from the base View class, and AppWidgets, which are mini applications that can be embedded into an activity.
Many widgets can have images, sounds, and other media connected to them and these, along with most other properties, can be set and changed with static XML files or dynamically with Java code...