Figure 8-5. The same application, scrolled to the bottom of the grid
Fields: Now with 35% Less Typing!
The AutoCompleteTextView
is sort of a hybrid between the EditText
(field) and the Spinner
. With auto-completion, as the user types, the text is treated as a prefix filter, comparing the entered text as a prefix against a list of candidates. Matches are shown in a selection list that, like with Spinner
, folds down from the field. The user can either type out an entry (e.g., something not in the list) or choose an entry from the list to be the value of the field.
AutoCompleteTextView
subclasses EditText
, so you can configure all the standard look-and-feel aspects, such as font face and color.
In addition, AutoCompleteTextView
has a android:completionThreshold
property, to indicate the minimum number of characters a user must enter before the list filtering begins.
You can give AutoCompleteTextView
an adapter containing the list of candidate values via setAdapter()
. However, since the user could type something not in the list, AutoCompleteTextView
does not support selection listeners. Instead, you can register a TextWatcher
, like you can with any EditText
, to be notified when the text changes. These events will occur either because of manual typing or from a selection from the drop-down list.
The following is a familiar-looking XML layout, this time containing an AutoCompleteTextView
(pulled from the Selection/AutoComplete
sample application):
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:id="@+id/selection"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="3"/>
The corresponding Java code is:
public classAutoCompleteDemo extendsActivity
implementsTextWatcher {
TextView selection;
AutoCompleteTextView edit;
String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
@Override
publicvoid onCreate(Bundle icicle) {
super. onCreate(icicle);
setContentView(R.layout.main);
selection = (TextView) findViewById(R.id.selection);
edit = (AutoCompleteTextView) findViewById(R.id.edit);
edit. addTextChangedListener( this);
edit. setAdapter( newArrayAdapter( this,
android.R.layout.simple_dropdown_item_1line, items));
}
publicvoid onTextChanged(CharSequence s, int start, int before,
int count) {
selection. setText(edit. getText());
}
publicvoid beforeTextChanged(CharSequence s, int start,
int count, int after) {
// needed for interface, but not used
}
publicvoid afterTextChanged(Editable s) {
// needed for interface, but not used
}
}
This time, our activity implements TextWatcher
, which means our callbacks are onTextChanged()
and beforeTextChanged()
. In this case, we are only interested in the former, and we update the selection label to match the AutoCompleteTextView
’s current contents.
Figures 8-6, 8-7, and 8-8 show the application results.
Figure 8-6. The AutoCompleteDemo sample application, as initially launched
Figure 8-7. The same application, after a few matching letters were entered, showing the auto-complete drop-down
Figure 8-8. The same application, after the auto-complete value was selected
Galleries, Give or Take the Art
The Gallery
widget is not one ordinarily found in GUI toolkits. It is, in effect, a horizontally-laid-out listbox. One choice follows the next across the horizontal plane, with the currently-selected item highlighted. On an Android device, one rotates through the options through the left and right D-pad buttons.
Compared to the ListView
, the Gallery
takes up less screen space while still showing multiple choices at one time (assuming they are short enough). Compared to the Spinner
, the Gallery
always shows more than one choice at a time.
The quintessential example use for the Gallery
is image preview — given a collection of photos or icons, the Gallery
lets people preview the pictures in the process of choosing one.
Code-wise, the Gallery
works much like a Spinner
or GridView
. In your XML layout, you have a few properties at your disposal:
• android:spacing
controls the number of pixels between entries in the list.
• android:spinnerSelector
controls what is used to indicate a selection — this can either be a reference to a Drawable
(see the resources chapter) or an RGB value in #AARRGGBB
or similar notation.
• android:drawSelectorOnTop
indicates if the selection bar (or Drawable
) should be drawn before (false) or after (true) drawing the selected child — if you choose true
, be sure that your selector has sufficient transparency to show the child through the selector, otherwise users will not be able to read the selection.
CHAPTER 9
Getting Fancy with Lists
The humble ListView
is one of the most important widgets in all of Android, simply because it is used so frequently. Whether choosing a contact to call or an email message to forward or an ebook to read, ListView
widgets are employed in a wide range of activities. Of course, it would be nice if they were more than just plain text.
Читать дальше