Android實現新浪微博中的分組菜單對話框
實現效果:

實現思路:
分組信息其實就是一個Dialog,我們可以通過繼承自Dialog來實現我們自己的需求。同時我們需要設置為當我們點擊其他地方的時候Dialog能消失。
具體實現代碼:(注釋寫在代碼中)
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文件中的代碼:<?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文件<?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代碼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();
}
}
});
}
}
提供源代碼下載:
http://download.csdn.net/detail/jiahui524/4071659
如需轉載引用請注明出處:http://blog.csdn.net/jiahui524
本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!