package com.qmusic.controls.dialogs;
import android.app.Activity;
import android.graphics.Rect;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.RelativeLayout;
import com.qmusic.R;
import com.qmusic.uitls.BUtilities;
public class MenuDialogFragment extends BaseDialogFragment {
public static interface GetMenuView {
View getMenuView();
}
int[] location;
GetMenuView callback;
int alignType;
public static final MenuDialogFragment getInstance(View view) {
return getInstance(view, RelativeLayout.ALIGN_LEFT);
}
/**
*
* @param view
* @param alignType
* RelativeLayout.ALIGN_LEFT,RelativeLayout.ALIGN_RIGHT
* @return
*/
public static final MenuDialogFragment getInstance(View view, int alignType) {
int[] location = new int[5];
view.getLocationInWindow(location);
location[2] = view.getWidth();
location[3] = view.getHeight();
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect);
location[4] = rect.top;// status bar height
MenuDialogFragment fragment = new MenuDialogFragment();
Bundle bundle = new Bundle();
bundle.putIntArray("location", location);
bundle.putInt("alignType", alignType);
fragment.setArguments(bundle);
return fragment;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof GetMenuView) {
callback = (GetMenuView) activity;
}
}
@Override
public void onDetach() {
super.onDetach();
callback = null;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle arguments;
if (savedInstanceState != null) {
arguments = savedInstanceState;
} else {
arguments = getArguments();
}
if (arguments != null) {
location = arguments.getIntArray("location");
alignType = arguments.getInt("alignType");
}
int style = DialogFragment.STYLE_NO_TITLE, theme = R.style.b_dialog_menu;
setStyle(style, theme);
}
@Override
public void onSaveInstanceState(Bundle bundle) {
bundle.putIntArray("location", location);
bundle.putInt("alignType", alignType);
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
LayoutParams params = window.getAttributes();
if (RelativeLayout.ALIGN_RIGHT == alignType) {
int[] screenSize = BUtilities.getScreenSize(getActivity());
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.x = screenSize[0] - location[0] - location[2];
} else {
params.gravity = Gravity.LEFT | Gravity.TOP;
params.x = location[0];
}
params.y = location[1] + location[4];
params.width = android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
params.height = android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
params.alpha = 0.9f;
// params.horizontalMargin = 0.1f;/*距离边界的百分比*/
// params.horizontalWeight = 0;// 0.5f;
params.windowAnimations = R.style.b_dialog_menu_animation_style;
window.setAttributes(params);
}
@Override
public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) {
Log.i(TAG, "onInflate");
super.onInflate(activity, attrs, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view;
if (callback != null) {
view = callback.getMenuView();
} else {
view = super.onCreateView(inflater, container, savedInstanceState);
}
return view;
}
// @SuppressLint("NewApi")
// @Override
// public Dialog onCreateDialog(Bundle savedInstanceState) {
// Log.i(TAG, "onCreateDialog");
// AlertDialog.Builder builder;
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// builder = new AlertDialog.Builder(getActivity(), R.style.b_dialog_menu);
// } else {
// builder = new AlertDialog.Builder(getActivity());
// }
//
// if (callback != null) {
// View view = callback.getMenuView();
// builder.setView(view);
// } else {
// builder.setMessage("view is null from GetMenuView");
// }
//
// // builder.setMessage("Message");
// builder.setTitle("Title");
// Dialog dialog = builder.create();
// return dialog;
// }
public void show(FragmentManager manager) {
super.show(manager, "menu_dialog");
}
public void setCallback(GetMenuView callback) {
this.callback = callback;
}
}