Mister Smith
Mister Smith

Reputation: 28168

EditText not shown in custom FragmentDialog

I'm trying to show a simple prompt dialog fragment programatically. I've extended SherlockFragmentActivity, and coded a custom SherlockDialogFragment implementation in it.

(I'm using ActionbarSherlock library, but I think the problem doesn't have to do with it, and would also be observed using regular ActionBar and Fragments).

This is the overriden oncreateDialog method inside the custom FragmentActivity class:

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        //Skipped section. Setting positive, negative buttons, title, message on builder.

        efPsw = new EditText(getActivity());

        // Hacky margin stuff (yeah, I know it's dirty)
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        int smallestSide = Math.min(displaymetrics.heightPixels, displaymetrics.widthPixels);
        int margin = (int)(0.5 * ((double) smallestSide));  
        efPsw.setTransformationMethod(PasswordTransformationMethod.getInstance());          

        FrameLayout fl = new FrameLayout(getActivity());            
        FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
                FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT);          
        layoutParams.setMargins(margin, 0, margin, 0);          

        fl.addView(efPsw, layoutParams);                
        builder.setView(fl);

        return builder.create();            
    }

When I show the fragment, the inner framelayout is not shown (looks like an invisible rectangle that grows in height with each typed character). I'm not sure what am I doing wrong here, but certainly something must be wrong, since if I put the edittext in setView everything works fine (but without margin).

Thanks in advance.

Upvotes: 0

Views: 212

Answers (1)

toadzky
toadzky

Reputation: 3846

it looks like you are making the margin half the smallest side, which in portrait mode would make your margin the entire screen. i would start by reducing the margin.

you can apply the margins directly to the EditText using the setLayoutParams() method. That would eliminate the FrameLayout.

Upvotes: 1

Related Questions