标签:
1.在res/menu下建立main.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_share" android:actionProviderClass="android.widget.ShareActionProvider" android:showAsAction="ifRoom" android:title="share"/> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom" android:title="search"/> <item android:id="@+id/action_setting" android:showAsAction="never" android:title="setting"/> <item android:id="@+id/action_help" android:showAsAction="never" android:title="help"/> </menu>解释:1.1.android:actionProviderClass="android.widget.ShareActionProvider"
分享图标是Android自带的。
为了实现ShareActionprovider的分享功能,我们必须实现一个分享的Intent。这个Intent除了包括ACTION_SEND和extras等其他Intent向其他应用传输内容所须要的内容外,还须要上面的内容。在你的Activity或Fragment中充填你的单菜资源时,须要找到 MenuItem,用使MenuItem.getActionProvider到得ShareActionProvider实例,通过setShareProvider来更新分享的Intent。
actionProviderClass实现,下面会有详细说明
1.2.android:showAsAction="ifRoom"
1.3.Android自带的ActionBar的样式选择
1.3.1.AndroidManifest.xml
android:theme="@style/AppTheme" //样式选择1.3.2.Ctrl键+鼠标点击android:theme="@style/AppTheme" 进入到styles.xml<resources> <!-- Base application theme. --> <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- Customize your theme here. --> </style> </resources>这里选择的样式是android:Theme.Holo.Light.DarkActionBar
1.3.3.Ctrl键+鼠标点击android:Theme.Holo.Light.DarkActionBar 进入到themes_hole.xml
里面有很多的样式,可以选择。修改styles.xml的选择就可以了。
2.MainActivity文件
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.ViewConfiguration; import java.lang.reflect.Field; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if(menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }解释:try { ViewConfiguration config = ViewConfiguration.get(this); Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); if(menuKeyField != null) { menuKeyField.setAccessible(true); menuKeyField.setBoolean(config, false); } } catch (Exception e) { e.printStackTrace(); }原因是:现在很多手机都有自带的菜单项,所以ActionBar上的三个点自动隐藏,要是它一直显示,则把这段代码放置于onCrete方法中。
3.实现
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ //设置返回键 case android.R.id.home: break; case R.id.action_search: Toast.makeText(this, "Action_Search", Toast.LENGTH_LONG).show(); break; case R.id.action_setting: Toast.makeText(this, "Action_setting", Toast.LENGTH_LONG).show(); break; case R.id.action_help: Toast.makeText(this, "帮助", Toast.LENGTH_LONG).show(); break; } return super.onOptionsItemSelected(item); }
4.设置返回键
4.1.返回父级
AndroidManifest.xml中添加<meta-data ..../>
<activity android:name="com.rj141.sb.actionbardemo01.MainActivity" android:label="@string/app_name" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.rj141.sb.actionbardemo01.ParentActivity" /> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="ParentActivity"></activity>MainActivity的onCreate()方法中添加
//Android 3.0以上版本用getActionbar() 3.0以下getSupportActionBar() getActionBar().setDisplayHomeAsUpEnabled(true);4.2.返回上一级
在MainActivity的onCreate()方法中添加
//Android 3.0以上版本用getActionbar() 3.0以下getSupportActionBar() getActionBar().setDisplayHomeAsUpEnabled(true);在onOptionsItemSelected(MenuItem item)中,补充
//设置返回键 case android.R.id.home: finish(); break;
5.Provider
在main.xml中设置
<item android:id="@+id/action_share" android:actionProviderClass="android.widget.ShareActionProvider" android:showAsAction="ifRoom" android:title="share"/>MainActivity
private ShareActionProvider mShareActionProvider;@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); MenuItem shareItem = menu.findItem(R.id.action_share); mShareActionProvider = (ShareActionProvider) shareItem.getActionProvider(); mShareActionProvider.setShareIntent(getDefaultIntent()); return true; } private Intent getDefaultIntent(){ Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("image/*"); return intent; }
6.自定义ActionBar的样式
在values.xml中,创建themes.xml
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 定义style,继承已有的style --> <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <!-- 复写actionBarStyle,指向已复写的background --> <item name="android:actionBarStyle">@style/CustomBackground</item> </style> <style name="CustomBackground" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <!-- 复写background --> <item name="android:background">@drawable/action_background</item> </style> <pre name="code" class="html"> <!-- 另一个样式 --><style name="CustomActionBarOverlayTheme" parent="@android:style/Theme.Holo" > <item name="android:windowActionBarOverlay">true</item> </style></resources> 在AndroidManifest.xml引用
android:theme="@style/CustomActionBarTheme">
标签:
原文地址:http://blog.csdn.net/qq_29481375/article/details/51338600