package com.qmusic.controls.dialogs;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager.LayoutParams;
import android.widget.RelativeLayout;
import com.qmusic.R;
import com.qmusic.uitls.BUtilities;
public class TipsDialogFragment extends DialogFragment {
int[] location;
String tips;
int alignType;
public static TipsDialogFragment showTips(View view, String tips) {
return showTips(view, tips, RelativeLayout.ALIGN_TOP);
}
public static TipsDialogFragment showTips(View view, String tips, 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
TipsDialogFragment fragment = new TipsDialogFragment();
Bundle bundle = new Bundle();
bundle.putString("tips", tips);
bundle.putIntArray("location", location);
bundle.putInt("alignType", alignType);
fragment.setArguments(bundle);
return fragment;
}
@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");
tips = arguments.getString("tips");
alignType = arguments.getInt("alignType");
}
}
@Override
public void onSaveInstanceState(Bundle bundle) {
bundle.putIntArray("location", location);
bundle.putString("tips", tips);
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];
params.y = location[1] + location[4];
} else if (RelativeLayout.ALIGN_LEFT == alignType) {
params.gravity = Gravity.LEFT | Gravity.TOP;
params.x = location[0];
params.y = location[1] + location[4];
} else if (RelativeLayout.ALIGN_TOP == alignType) {
params.gravity = Gravity.LEFT | Gravity.TOP;
params.x = location[0];
// TODO how to get the dialog height?
DisplayMetrics displayMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
params.y = location[1] + location[4] - location[3] - (int) (54 * displayMetrics.density);
}
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);
}
public void show(FragmentManager manager) {
super.show(manager, "tips");
}
@SuppressLint("NewApi")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
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());
}
builder.setMessage(tips);
Dialog dialog = builder.create();
return dialog;
}
public void setAlignType(int alignType) {
this.alignType = alignType;
}
}