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

fmms 12年前發布 | 23K 次閱讀 Android Android開發 移動開發

實現效果:

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