我正在尝试以编程方式显示一个简单的提示对话框片段。我已对SherlockFragmentActivity
进行了扩展,并在其中编写了自定义SherlockDialogFragment
实现。
(我正在使用ActionbarSherlock库,但我认为问题与它没有关系,并且也会使用常规的ActionBar和Fragments来观察。)
这是自定义FragmentActivity类中的覆盖oncreateDialog
方法:
@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();
}
当我显示片段时,内部framelayout未显示(看起来像一个不可见的矩形,随着每个键入的字符在高度上增长)。我不确定我在这里做错了什么,但肯定有些错误,因为如果我把编辑文本放在setView
中,一切正常(但没有边际)。
提前致谢。
答案 0 :(得分:1)
看起来你正在使边距是最小边的一半,在纵向模式下会使你的边距成为整个屏幕。我会从减少利润开始。
您可以使用setLayoutParams()方法将边距直接应用于EditText。这将消除FrameLayout。