Android-在动作栏中添加“设置图标”

本文介绍如何在Android中使用自定义布局和ActionProvider来替换并控制动作项,包括设置背景图片、定义布局文件、创建ActionProvider类以实现跳转到系统设置的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Action Provider(动作提供者,由ActionProvider类定义)使用自定义的布局来替换动作项,但是它也控制动作项的全部行为。当在动作栏中为菜单项定义动作提供者时,它 不仅使用自定义布局来控制动作项在动作栏中的外观,还控制菜单栏在overflow菜单中显示时的默认事件;另外,它也可以为动作栏或overflow菜单提供子菜单。

1.修改/res/layout包中的main_activity文件,设置背景图片

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background"
    android:orientation="vertical" >

</LinearLayout>

2.在res/layout在新建action_provider.xml文件,定义动作提供者的布局,这里实在LinearLayout中定义了一个按钮控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/actionButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:addStatesFromChildren="true"
    android:background="?android:attr/actionBarItemBackground"
    android:focusable="true" >

    <ImageButton
        android:id="@+id/button"
        android:layout_width="48dip"
        android:layout_height="48dip"
        android:layout_gravity="center"
        android:adjustViewBounds="true"
        android:background="@drawable/ic_launcher_settings"
        android:contentDescription="@string/settings"
        android:scaleType="fitCenter" />

</LinearLayout>

3.在/res/menu文件夹中,新建settings.xml文件,定义菜单项

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_item_action_provider_action_bar"
        android:actionProviderClass="com.mingrisoft.SettingsActivity$SettingsActionProvider"
        android:showAsAction="ifRoom"
        android:title="@string/settings"/>
    <item
        android:id="@+id/menu_item_action_provider_overflow"
        android:actionProviderClass="com.mingrisoft.SettingsActivity$SettingsActionProvider"
        android:showAsAction="never"
        android:title="@string/settings"/>

</menu>

4.新建SettingActivity类,它继承了Activity类。重写onCreate()方法应用布局文件,重写onCreateOptionMenu()方法应用菜单文件,创建SettingsActionProvider内部类实现跳转到系统设置的功能。

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);// 调用父类方法
        setContentView(R.layout.main);// 应用布局文件
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.settings, menu);
        return true;
    }

    public static class SettingsActionProvider extends ActionProvider {

        private static final Intent settingsIntent = new Intent(Settings.ACTION_SETTINGS);
        private Context context;

        public SettingsActionProvider(Context context) {
            super(context);
            this.context = context;
        }

        @Override
        public View onCreateActionView() {
            LayoutInflater inflater = LayoutInflater.from(context);
            View view = inflater.inflate(R.layout.action_provider, null);
            ImageButton button = (ImageButton) view.findViewById(R.id.button);
            button.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    context.startActivity(settingsIntent);

                }
            });
            return view;
        }

        @Override
        public boolean onPerformDefaultAction() {
            context.startActivity(settingsIntent);// 转到设置
            return true;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值