易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Android:实现一种浮动选择菜单的效果
更新了一下我手机上的百阅软件,上面的浮动对话框选择很好看,就模仿了一下。先看一下运行效果。
主要原理是在dialog里扔进一个GridView,可以作为一个组件使用。源码如下
对话框使用的layout:grid_dialog.xml
<?xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<RelativeLayout
xmlns:Android
=
"http://schemas.android.com/apk/res/android"
android:id
=
"@+id/layout_root"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<GridView
android:id
=
"@+id/mygridview"
android:numColumns
=
"3"
android:gravity
=
"center"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:padding
=
"10dp"
android:verticalSpacing
=
"20dp"
android:horizontalSpacing
=
"10dp"
android:stretchMode
=
"columnWidth"
>
</GridView>
</RelativeLayout>
对话框列表中的项目layout:grid_item.xml
<?xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
android:id
=
"@+id/RelativeLayout01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
android:gravity
=
"center"
>
<ImageView
android:id
=
"@+id/item_image"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_centerHorizontal
=
"true"
/>
<TextView
android:id
=
"@+id/item_text"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_below
=
"@id/item_image"
android:layout_centerHorizontal
=
"true"
android:text
=
"@+id/item_text"
/>
</RelativeLayout>
自定义的对话框类:GridDialog.java
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
android.app.Activity;
import
android.app.Dialog;
import
android.content.Context;
import
android.content.Intent;
import
android.view.Gravity;
import
android.view.View;
import
android.view.Window;
import
android.view.WindowManager.LayoutParams;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.GridView;
import
android.widget.SimpleAdapter;
import
android.widget.Toast;
public
class
GridDialog
extends
Dialog {
private
List<
int
[]> griditem =
new
ArrayList<
int
[]>();
{
griditem.add(
new
int
[] { R.drawable.edit, R.string.edit });
//图片资源,标题,可自己设定
griditem.add(
new
int
[] { R.drawable.delete, R.string.delete });
griditem.add(
new
int
[] { R.drawable.favsaddto, R.string.favsaddto });
griditem.add(
new
int
[] { R.drawable.favs, R.string.favs });
griditem.add(
new
int
[] { R.drawable.settings, R.string.settings });
griditem.add(
new
int
[] { R.drawable.sync, R.string.sync });
griditem.add(
new
int
[] { R.drawable.save, R.string.save });
griditem.add(
new
int
[] { R.drawable.search, R.string.search });
griditem.add(
new
int
[] { R.drawable.camera, R.string.camera });
};
private
GridView gridview;
public
GridDialog(Context context,
boolean
cancelable,
OnCancelListener cancelListener) {
super
(context, cancelable, cancelListener);
}
public
GridDialog(Context context,
int
theme) {
super
(context, theme);
}
private
void
initGrid() {
List<Map<String, Object>> items =
new
ArrayList<Map<String, Object>>();
for
(
int
[] item : griditem) {
Map<String, Object> map =
new
HashMap<String, Object>();
map.put(
"image"
, item[
0
]);
map.put(
"title"
, getContext().getString(item[
1
]));
items.add(map);
}
SimpleAdapter adapter =
new
SimpleAdapter(getContext(),
items,
// 列表内容
R.layout.grid_item,
new
String[] {
"title"
,
"image"
},
new
int
[] { R.id.item_text, R.id.item_image });
gridview = (GridView) findViewById(R.id.mygridview);
// 为GridView设置数据
gridview.setAdapter(adapter);
}
public
GridDialog(Context context) {
super
(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// 灭掉对话框标题,要放在setContentView前面否则会报错
setContentView(R.layout.grid_dialog);
setCanceledOnTouchOutside(
true
);
// 点击对话框外部取消对话框显示
LayoutParams lp = getWindow().getAttributes();
getWindow().setAttributes(lp);
getWindow().addFlags(LayoutParams.FLAG_BLUR_BEHIND);
// 添加模糊效果
// 设置透明度,对话框透明(包括对话框中的内容)alpha在0.0f到1.0f之间。1.0完全不透明,0.0f完全透明
// lp.alpha = 0.5f;
lp.dimAmount =
0
.1f;
// 设置对话框显示时的黑暗度,0.0f和1.0f之间,在我这里设置成0.0f会出现黑屏状态,求解。
initGrid();
// 添加表格按钮内容
}
/**
* 绑定事件到指定的Activity上
*
* @param activity
*/
public
void
bindEvent(Activity activity) {
setOwnerActivity(activity);
// )把对话框附着到一个Activity上
gridview.setOnItemClickListener(
new
OnItemClickListener() {
public
void
onItemClick(AdapterView<?> parent, View v,
int
position,
long
id) {
switch
(position) {
// position从0开始,GridView中按钮的位置
case
0
:
Toast.makeText(getContext(),
"测试"
, Toast.LENGTH_SHORT)
.show();
break
;
}
}
});
}
}
上面的代码没有实现active的跳转。如果想实现跳转采用下面方法:
private
void
redirect(Class<?> cls) {
if
(getOwnerActivity().getClass() != cls) {
//如果不是对话框绑定的active则跳转
dismiss();
//关闭对话框
Intent intent =
new
Intent();
intent.setClass(getContext(), cls);
getContext().startActivity(intent);
//跳转
}
}
对话框调用方法:
public
class
MainActivity
extends
Activity {
/** Called when the activity is first created. */
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button=(Button) findViewById(R.id.Button01);
button.setOnClickListener(
new
Button.OnClickListener(){
@Override
public
void
onClick(View arg0) {
GridDialog dialog=
new
GridDialog(MainActivity.
this
);
dialog.bindEvent(MainActivity.
this
);
dialog.show();
}
});
}
}
这个功能还是比较弱,比如无法动态增加按钮。这里为了简洁将一些style效果写到代码里了,还是写入xml里容易控制。
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图