Android实现新浪微博中的分组菜单对话框

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();
}

}
});
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值