獻上我今天剛做的一個效果Demo希望能幫助到大家。
實現效果:
實現思路:
分組信息其實就是一個Dialog,我們可以通過繼承自Dialog來實現我們自己的需求。同時我們需要設置為當我們點擊其他地方的時候Dialog能消失。
Android實現新浪微博中的分組菜單對話框源代碼下載地址:
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2012年資料/2月/20日/Android實現新浪微博中的分組菜單對話框/
具體實現代碼:(注釋寫在代碼中)
[java]
- 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]
- <?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]
- <?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]
- 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();
- }
-
- }
- });
- }
- }