好久又沒有更新部落格了,呵呵,最近在找工作。現在獻上我今天剛做的一個效果Demo希望能協助到大家。
實現效果:
實現思路:
分組資訊其實就是一個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() {@Overridepublic void onClick(View v) {if (null == myDialog) {myDialog = new MyDialog(MyDialogActivity.this);//如果沒有設定無標題的話,這裡還要加上標題列的高度才行,至於如何擷取標題列的高度的話由讀者自行解決int top = btngroup.getTop();//是擷取如果設定了的margin_topint 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
歡迎大家多多交流。讓菜鳥一起成長!
PS:另一種實現方式是用PopupWindow實現
http://blog.csdn.net/jiahui524/article/details/7298690