Android实现新浪微博中的分组菜单对话框
2012-02-27 10:23
417 查看
package com.jiahui.view;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.jiahui.dialog.R;
/**
* 继承自Dialog
*
* @author Administrator
*
*/
public class MyDialog extends Dialog {
protected MyDialog(Context context, boolean cancelable,
OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
// TODO Auto-generated constructor stub
}
public MyDialog(Context context, int theme) {
super(context, theme);
// TODO Auto-generated constructor stub
}
public MyDialog(Context context) {
// 使用主题
super(context, R.style.Theme_Transparent);
setContentView(R.layout.my_menu_dialog);
// 设置点击这个对话框之外能消失
setCanceledOnTouchOutside(true);
// 设置window属性
LayoutParams a = getWindow().getAttributes();
a.gravity = Gravity.TOP;
a.dimAmount = 0; // 去背景遮盖
getWindow().setAttributes(a);
initMenu();
}
private void initMenu() {
List<String> menus = new ArrayList<String>();
menus.add("分组一");
menus.add("分组二");
// 准备要添加的数据条目
List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();
for (String str : menus) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("group", str);
items.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(getContext(), items,
R.layout.menu_item, new String[] { "group" },
new int[] { R.id.item_text });
ListView mylistview = (ListView) this.findViewById(R.id.mylistview);
mylistview.setAdapter(simpleAdapter);
}
// 设置位置
public void setPosition(int x, int y) {
LayoutParams a = getWindow().getAttributes();
if (-1 != x)
a.x = x;
if (-1 != y)
a.y = y;
System.out.println("a.x" + a.x);
System.out.println("a.y" + a.y);
getWindow().setAttributes(a);
}
}
My_menu_dialog.xml文件中的代码:
[html] view plaincopyprint?
<?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" >
<ListView
android:id="@+id/mylistview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" >
</ListView>
<Button
android:id="@+id/close_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="close"
android:visibility="gone" />
</RelativeLayout>
Theme.xml文件
[html] view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowBackground">@drawable/dialog_box_2</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
测试的Activity代码
[java] view plaincopyprint?
package com.jiahui.dialog;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import com.jiahui.view.MyDialog;
public class MyDialogActivity extends Activity {
private MyDialog myDialog;
private Button btngroup;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置无标题
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
setContentView(R.layout.main);
btngroup = (Button) this.findViewById(R.id.btngroup);
btngroup.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (null == myDialog) {
myDialog = new MyDialog(MyDialogActivity.this);
//如果没有设置无标题的话,这里还要加上标题栏的高度才行,至于如何获取标题栏的高度的话由读者自行解决
int top = btngroup.getTop();//是获取如果设置了的margin_top
int height = btngroup.getHeight();
int y= top + height;
System.out.println("y:"+y);
// 设置显示的位置
myDialog.setPosition(-1, y);
}
if (myDialog.isShowing()) {
myDialog.dismiss();
} else {
myDialog.show();
}
}
});
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import com.jiahui.dialog.R;
/**
* 继承自Dialog
*
* @author Administrator
*
*/
public class MyDialog extends Dialog {
protected MyDialog(Context context, boolean cancelable,
OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
// TODO Auto-generated constructor stub
}
public MyDialog(Context context, int theme) {
super(context, theme);
// TODO Auto-generated constructor stub
}
public MyDialog(Context context) {
// 使用主题
super(context, R.style.Theme_Transparent);
setContentView(R.layout.my_menu_dialog);
// 设置点击这个对话框之外能消失
setCanceledOnTouchOutside(true);
// 设置window属性
LayoutParams a = getWindow().getAttributes();
a.gravity = Gravity.TOP;
a.dimAmount = 0; // 去背景遮盖
getWindow().setAttributes(a);
initMenu();
}
private void initMenu() {
List<String> menus = new ArrayList<String>();
menus.add("分组一");
menus.add("分组二");
// 准备要添加的数据条目
List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();
for (String str : menus) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("group", str);
items.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(getContext(), items,
R.layout.menu_item, new String[] { "group" },
new int[] { R.id.item_text });
ListView mylistview = (ListView) this.findViewById(R.id.mylistview);
mylistview.setAdapter(simpleAdapter);
}
// 设置位置
public void setPosition(int x, int y) {
LayoutParams a = getWindow().getAttributes();
if (-1 != x)
a.x = x;
if (-1 != y)
a.y = y;
System.out.println("a.x" + a.x);
System.out.println("a.y" + a.y);
getWindow().setAttributes(a);
}
}
My_menu_dialog.xml文件中的代码:
[html] view plaincopyprint?
<?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" >
<ListView
android:id="@+id/mylistview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center" >
</ListView>
<Button
android:id="@+id/close_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="close"
android:visibility="gone" />
</RelativeLayout>
Theme.xml文件
[html] view plaincopyprint?
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowBackground">@drawable/dialog_box_2</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
测试的Activity代码
[java] view plaincopyprint?
package com.jiahui.dialog;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import com.jiahui.view.MyDialog;
public class MyDialogActivity extends Activity {
private MyDialog myDialog;
private Button btngroup;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置无标题
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
setContentView(R.layout.main);
btngroup = (Button) this.findViewById(R.id.btngroup);
btngroup.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (null == myDialog) {
myDialog = new MyDialog(MyDialogActivity.this);
//如果没有设置无标题的话,这里还要加上标题栏的高度才行,至于如何获取标题栏的高度的话由读者自行解决
int top = btngroup.getTop();//是获取如果设置了的margin_top
int height = btngroup.getHeight();
int y= top + height;
System.out.println("y:"+y);
// 设置显示的位置
myDialog.setPosition(-1, y);
}
if (myDialog.isShowing()) {
myDialog.dismiss();
} else {
myDialog.show();
}
}
});
}
}
相关文章推荐
- Android实现新浪微博中的分组菜单对话框
- Android用PopupWindow实现新浪微博的分组信息
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- Android用PopupWindow实现新浪微博的分组信息
- Android自定义View之实现流行的新浪微博底部菜单:高仿“咸鱼APP”的底部菜单动画效果。
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- Android自定义TabActivity(实现仿新浪微博底部菜单更新UI)
- Android用PopupWindow实现新浪微博的分组信息
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- Android自己定义TabActivity(实现仿新浪微博底部菜单更新UI)
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- android 用Fragment实现如新浪微博一样的底部菜单的切换
- Android用PopupWindow实现新浪微博的分组信息实例
- 利用半透明对话框实现新浪微博android客户端首次运行时的提示界面
- Android应用程序开发教程 - 实现一个登录对话框
- Android实现下拉导航选择菜单效果【转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/07/31/2617488.html】