Android實現新浪微博中的分組菜單對話方塊

來源:互聯網
上載者:User

 

好久又沒有更新部落格了,呵呵,最近在找工作。現在獻上我今天剛做的一個效果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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.