0

我正在尝试以编程方式显示一个简单的提示对话框片段。我已经扩展SherlockFragmentActivity,并在其中编写了自定义SherlockDialogFragment实现。

(我正在使用 ActionbarSherlock 库,但我认为问题与它无关,并且使用常规的 ActionBar 和 Fragments 也可以观察到)。

这是oncreateDialog自定义 FragmentActivity 类中的重写方法:

    @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();            
    }

当我显示片段时,内部框架布局没有显示(看起来像一个不可见的矩形,随着每个键入的字符的高度增加)。我不确定我在这里做错了什么,但肯定有问题,因为如果我将编辑文本放入setView一切正常(但没有边距)。

提前致谢。

4

1 回答 1

1

看起来您正在将边距设为最小边的一半,在纵向模式下,这将使您的边距成为整个屏幕。我将从减少保证金开始。

您可以使用 setLayoutParams() 方法将边距直接应用于 EditText。这将消除 FrameLayout。

于 2012-10-08T17:07:44.150 回答