Search code examples
javaandroidpositionandroid-dialogfragmentdialogfragment

Reaction button like facebook in Android


I wanna make a reaction button like Facebook, so something like this

enter image description here

Now i manage to make something similar with a DialogFragment but I am having some trouble with the position of my dialog, this code sometimes works but some other time the dialog is placed in the wrong place. Can someone give me some advice or suggest me a better way to do this?

My Dialog Class


public class ReactionsFragment extends DialogFragment {

    public static final String TAG = "ReactionsFragment";
    private  View paretnView;


    public ReactionsFragment(View view, String reviewId,Reactionable reactedContent) {
        this.paretnView = view;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.fragment_reactions, container, false);
        initComponent(view);
        setDialogPosition();
        return view;
    }


   
    public void initComponent(View rootView) {...}


    public void setDialogPosition() {
        if (paretnView == null) {
            return; // Leave the dialog in default position
        }
        int[] location = new int[2];
        paretnView.getLocationOnScreen(location);
        int sourceX = location[0];
        int sourceY = location[1];
        Window window = getDialog().getWindow();
        window.setGravity(Gravity.TOP|Gravity.LEFT);
        WindowManager.LayoutParams params = window.getAttributes();
        params.x = sourceX - dpToPx(0);
        params.y = sourceY - dpToPx(110);
        window.setAttributes(params);
    }


    public int dpToPx(float valueInDp) {
        DisplayMetrics metrics = getActivity().getResources().getDisplayMetrics();
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, valueInDp, metrics);
    }


}


Solution

  • Use PopupWindow. I think this is exactly what you are looking for: https://developer.android.com/reference/android/widget/PopupWindow

    You can set the exact position for the popup to appear using this method