今天下午我们讲下在android中如何自定义的分享,就是在ActionBar中添加我们自定义的分享布局。
具体的实现方法:
1、自定义一个布局文件
2、新建一个类MyActionProvider继承ActionProvider并重写其相应方法
3、在MyActionProvider类中获得我们自定义的布局的视图,并进行相应的控件操作。
4、在menu文件夹下的main.xml文件中通过android:actionProviderClass="com.example.ActionProvider.MyActionProvider"方法
把我们自定义的布局加载到ActionBar上。
接下来就是我们具体的代码实现了:
我们自定义的布局文件:只有一个ImageButton
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageButton
android:id="@+id/ib"
android:layout_width="40dp"
android:layout_height="40dp"
android:background="@null"
android:src="@drawable/ic_launcher" />
</LinearLayout>
继承了ActionProvider的MyActionProvider类:
:
package com.example.ActionProvider;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.ActionProvider;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.Toast;
@SuppressLint("NewApi")
public class MyActionProvider extends ActionProvider {
private ImageButton ib;
private Context context;
//声明一个下拉列表对象
private PopupMenu popupMenu;
public MyActionProvider(Context context) {
super(context);
this.context = context;
}
@Override
public View onCreateActionView() {
// 得到自定义的布局
View view = LayoutInflater.from(context).inflate(R.layout.custom, null);
ib = (ImageButton) view.findViewById(R.id.ib);
ib.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//参数1:上下文
//参数2:在谁的基础上弹出菜单
popupMenu = new PopupMenu(context, v);
//获得我们定义的菜单项列表
popupMenu.inflate(R.menu.item);
//为popupMenu添加点击事件
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.save:
Toast.makeText(context, "您点击了保存", 0).show();
break;
case R.id.search:
Toast.makeText(context, "您点击了搜索", 0).show();
break;
case R.id.add:
Toast.makeText(context, "您点击了添加", 0).show();
break;
case R.id.delete:
Toast.makeText(context, "您点击了删除", 0).show();
break;
default:
break;
}
return false;
}
});
popupMenu.show();
}
});
return view;
}
}
menu文件夹下的main.xml文件:通过actionProviderClass方法加载自定义的布局,后面是我们自定义的类所在的包名和类名
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/custom"
android:actionProviderClass="com.example.ActionProvider.MyActionProvider"
android:orderInCategory="100"
android:showAsAction="ifRoom"
android:title="分享"/>
</menu>
另外,这里我们通过点击自定义布局中的ImageButton弹出了一个下拉列表,所以我们在
menu文件夹下还需要定义一个菜单选项的xml文件:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/save"
android:icon="@android:drawable/ic_menu_save"
android:title="保存"/>
<item
android:id="@+id/search"
android:icon="@android:drawable/ic_menu_search"
android:title="搜索"/>
<item
android:id="@+id/add"
android:icon="@android:drawable/ic_menu_add"
android:title="添加"/>
<item
android:id="@+id/delete"
android:icon="@android:drawable/ic_menu_delete"
android:title="删除"/>
</menu>
运行结果: