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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!