码迷,mamicode.com
首页 > 其他好文 > 详细

ActionBar

时间:2016-05-13 03:22:03      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

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">







ActionBar

标签:

原文地址:http://blog.csdn.net/qq_29481375/article/details/51338600

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!