Merge "Adding a code sample for how to write a custom action provider." into ics-mr0

This commit is contained in:
Svetoslav Ganov
2011-10-24 12:07:02 -07:00
committed by Android (Google) Code Review
12 changed files with 211 additions and 11 deletions

View File

@@ -816,8 +816,17 @@
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".app.ActionBarActionProviderActivity" <activity android:name=".app.ActionBarSettingsActionProviderActivity"
android:label="@string/action_bar_action_provider" android:label="@string/action_bar_settings_action_provider"
android:enabled="@bool/atLeastIceCreamSandwich">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.SAMPLE_CODE" />
</intent-filter>
</activity>
<activity android:name=".app.ActionBarShareActionProviderActivity"
android:label="@string/action_bar_share_action_provider"
android:enabled="@bool/atLeastIceCreamSandwich"> android:enabled="@bool/atLeastIceCreamSandwich">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View File

@@ -22,7 +22,10 @@ that illustrate the use of various Android APIs. It includes samples of:
<li><a <li><a
href="src/com/example/android/apis/preference/PreferencesFromCode.html">Switch Preference</a></li> href="src/com/example/android/apis/preference/PreferencesFromCode.html">Switch Preference</a></li>
<li><a <li><a
href="src/com/example/android/apis/app/ActionBarActionProviderActivity.html">ShareActionProvider href="src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html">Settings Action Provider
</a></li>
<li><a
href="src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html">Share Action Provider
</a></li> </a></li>
<li><a href="src/com/example/android/apis/view/SearchViewActionBar.html">Collapsible action <li><a href="src/com/example/android/apis/view/SearchViewActionBar.html">Collapsible action
view</a></li> view</a></li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:focusable="true"
android:addStatesFromChildren="true"
android:background="?android:attr/actionBarItemBackground"
style="?android:attr/actionButtonStyle">
<ImageButton android:id="@+id/button"
android:background="@drawable/ic_launcher_settings"
android:layout_width="32dip"
android:layout_height="32dip"
android:layout_gravity="center"
android:scaleType="fitCenter"
android:adjustViewBounds="true" />
</LinearLayout>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2011 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item_action_provider_action_bar"
android:showAsAction="ifRoom"
android:title="@string/action_bar_settings"
android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/>
<item android:id="@+id/menu_item_action_provider_overflow"
android:showAsAction="never"
android:title="@string/action_bar_settings"
android:actionProviderClass="com.example.android.apis.app.ActionBarSettingsActionProviderActivity$SettingsActionProvider"/>
</menu>

View File

@@ -731,7 +731,9 @@
<string name="action_bar_mechanics">App/Action Bar/Action Bar Mechanics</string> <string name="action_bar_mechanics">App/Action Bar/Action Bar Mechanics</string>
<string name="action_bar_usage">App/Action Bar/Action Bar Usage</string> <string name="action_bar_usage">App/Action Bar/Action Bar Usage</string>
<string name="action_bar_tabs">App/Action Bar/Action Bar Tabs</string> <string name="action_bar_tabs">App/Action Bar/Action Bar Tabs</string>
<string name="action_bar_action_provider">App/Action Bar/Action Provider</string> <string name="action_bar_settings_action_provider">App/Action Bar/Action Provider/Settings Action Provider</string>
<string name="action_bar_share_action_provider">App/Action Bar/Action Provider/Share Action Provider</string>
<string name="action_bar_settings_action_provider_no_handling">Handling in onOptionsItemSelected avoided</string>
<string name="action_bar_search">Search</string> <string name="action_bar_search">Search</string>
<string name="action_bar_add">Add</string> <string name="action_bar_add">Add</string>
@@ -741,6 +743,7 @@
<string name="action_bar_sort_alpha">Alphabetically</string> <string name="action_bar_sort_alpha">Alphabetically</string>
<string name="action_bar_sort_size">By size</string> <string name="action_bar_sort_size">By size</string>
<string name="action_bar_share_with">Share with...</string> <string name="action_bar_share_with">Share with...</string>
<string name="action_bar_settings">Settings</string>
<string name="action_bar_display_options">App/Action Bar/Display Options</string> <string name="action_bar_display_options">App/Action Bar/Display Options</string>
<string name="toggle_home_as_up">DISPLAY_HOME_AS_UP</string> <string name="toggle_home_as_up">DISPLAY_HOME_AS_UP</string>

View File

@@ -0,0 +1,121 @@
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.apis.app;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.view.ActionProvider;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;
import com.example.android.apis.R;
/**
* This activity demonstrates how to implement an {@link android.view.ActionProvider}
* for adding functionality to the Action Bar. In particular this demo creates an
* ActionProvider for launching the system settings and adds a menu item with that
* provider.
*/
public class ActionBarSettingsActionProviderActivity extends Activity {
/**
* {@inheritDoc}
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
/**
* {@inheritDoc}
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.action_bar_settings_action_provider, menu);
return true;
}
/**
* {@inheritDoc}
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// If this callback does not handle the item click, onPerformDefaultAction
// of the ActionProvider is invoked. Hence, the provider encapsulates the
// complete functionality of the menu item.
Toast.makeText(this, R.string.action_bar_settings_action_provider_no_handling,
Toast.LENGTH_SHORT).show();
return false;
}
public static class SettingsActionProvider extends ActionProvider {
/** An intent for launching the system settings. */
private static final Intent sSettingsIntent = new Intent(Settings.ACTION_SETTINGS);
/** Context for accessing resources. */
private final Context mContext;
/**
* Creates a new instance.
*
* @param context Context for accessing resources.
*/
public SettingsActionProvider(Context context) {
super(context);
mContext = context;
}
/**
* {@inheritDoc}
*/
@Override
public View onCreateActionView() {
// Inflate the action view to be shown on the action bar.
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
View view = layoutInflater.inflate(R.layout.action_bar_settings_action_provider, null);
ImageButton button = (ImageButton) view.findViewById(R.id.button);
// Attach a click listener for launching the system settings.
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mContext.startActivity(sSettingsIntent);
}
});
return view;
}
/**
* {@inheritDoc}
*/
@Override
public boolean onPerformDefaultAction() {
// This is called if the host menu item placed in the overflow menu of the
// action bar is clicked and the host activity did not handle the click.
mContext.startActivity(sSettingsIntent);
return true;
}
}
}

View File

@@ -38,7 +38,7 @@ import java.io.InputStream;
* a menu item with ShareActionProvider as its action provider. The * a menu item with ShareActionProvider as its action provider. The
* ShareActionProvider is responsible for managing the UI for sharing actions. * ShareActionProvider is responsible for managing the UI for sharing actions.
*/ */
public class ActionBarActionProviderActivity extends Activity { public class ActionBarShareActionProviderActivity extends Activity {
private static final String SHARED_FILE_NAME = "shared.png"; private static final String SHARED_FILE_NAME = "shared.png";
@@ -51,7 +51,7 @@ public class ActionBarActionProviderActivity extends Activity {
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
// Inflate your menu. // Inflate your menu.
getMenuInflater().inflate(R.menu.action_bar_action_provider, menu); getMenuInflater().inflate(R.menu.action_bar_share_action_provider, menu);
// Set file with share history to the provider and set the share intent. // Set file with share history to the provider and set the share intent.
MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar);

View File

@@ -160,10 +160,12 @@ complete example of how to switch between fragments.</dd>
default Honeycomb theme includes the Action Bar by default and a menu resource is used to populate default Honeycomb theme includes the Action Bar by default and a menu resource is used to populate
the menu data itself. If you'd like to see how these things work under the hood, see the menu data itself. If you'd like to see how these things work under the hood, see
Mechanics.</dd> Mechanics.</dd>
<dt><a href="ActionBarActionProviderActivity.html">ActionProvider</a></dt> <dt><a href="ActionBarActionProviderSettingsActivity.html">Settings Action Provider</a></dt>
<dd>Shows how to use an ActionProvider to supply a menu item with a specialized action view and <dd>Shows how to implement an ActionProvider for launching the system settings that supplies a
handle standard menu item clicks in one place. Demonstrated using the streamlined sharing UI menu item with a specialized action view and handles standard menu item clicks in one place.</dd>
added in ICS. </dd> <dt><a href="ActionBarShareActionProviderActivity.html">Share Action Provider</a></dt>
<dd>Shows how to use a ShareActionProvider to embed sharing functionality in your application
via the streamlined sharing UI added in ICS. </dd>
<dt><a href="ActionBarDisplayOptions.html">Display Options</a></dt> <dt><a href="ActionBarDisplayOptions.html">Display Options</a></dt>
<dd>Shows how various Action Bar display option flags can be combined and their effects.</dd> <dd>Shows how various Action Bar display option flags can be combined and their effects.</dd>
</dl> </dl>