f90f4ed19c
Change-Id: Ia5317f5ead8ac9810c893576596bd3a80f6ecbdb
88 lines
3.2 KiB
Plaintext
88 lines
3.2 KiB
Plaintext
page.title=Remaining Backward Compatible
|
|
trainingnavtop=true
|
|
previous.title=Storing and Searching for Data
|
|
previous.link=search.html
|
|
|
|
@jd:body
|
|
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
<h2>This lesson teaches you to</h2>
|
|
|
|
<ul>
|
|
<li><a href="{@docRoot}training/search/backward-compat.html#set-sdk">Set Minimum
|
|
and Target API levels</a></li>
|
|
|
|
<li><a href="{@docRoot}training/search/backward-compat.html#provide-sd">Provide the Search
|
|
Dialog for Older Devices</a></li>
|
|
|
|
<li><a href="{@docRoot}training/search/backward-compat.html#check-ver">Check the Android Build
|
|
Version at Runtime</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<p>The {@link android.widget.SearchView} and action bar are only available on Android 3.0 and
|
|
later. To support older platforms, you can fall back to the search dialog. The search dialog is a
|
|
system provided UI that overlays on top of your application when invoked.</p>
|
|
|
|
<h2 id="set-sdk">Set Minimum and Target API levels</h2>
|
|
|
|
<p>To setup the search dialog, first declare in your manifest that you want to support older
|
|
devices, but want to target Android 3.0 or later versions. When you do this, your application
|
|
automatically uses the action bar on Android 3.0 or later and uses the traditional menu system on
|
|
older devices:</p>
|
|
<pre>
|
|
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />
|
|
|
|
<application>
|
|
...
|
|
</pre>
|
|
|
|
<h2 id="provide-sd">Provide the Search Dialog for Older Devices</h2>
|
|
|
|
<p>To invoke the search dialog on older devices, call {@link
|
|
android.app.Activity#onSearchRequested onSearchRequested()} whenever a user selects the search
|
|
menu item from the options menu. Because Android 3.0 and higher devices show the
|
|
{@link android.widget.SearchView} in the action bar (as demonstrated in the first lesson), only versions
|
|
older than 3.0 call {@link android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} when the
|
|
user selects the search menu item.
|
|
</p>
|
|
<pre>
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case R.id.search:
|
|
onSearchRequested();
|
|
return true;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
</pre>
|
|
|
|
<h2 id="check-ver">Check the Android Build Version at Runtime</h2>
|
|
|
|
<p>At runtime, check the device version to make sure an unsupported use of {@link
|
|
android.widget.SearchView} does not occur on older devices. In our example code, this happens in
|
|
the {@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()} method:</p>
|
|
<pre>
|
|
@Override
|
|
public boolean onCreateOptionsMenu(Menu menu) {
|
|
|
|
MenuInflater inflater = getMenuInflater();
|
|
inflater.inflate(R.menu.options_menu, menu);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
|
SearchManager searchManager =
|
|
(SearchManager) getSystemService(Context.SEARCH_SERVICE);
|
|
SearchView searchView =
|
|
(SearchView) menu.findItem(R.id.search).getActionView();
|
|
searchView.setSearchableInfo(
|
|
searchManager.getSearchableInfo(getComponentName()));
|
|
searchView.setIconifiedByDefault(false);
|
|
}
|
|
return true;
|
|
}
|
|
</pre>
|