gpt4 book ai didi

java - DialogFragment 中 subview 的 getWidth

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:48 25 4
gpt4 key购买 nike

  1. 我有一个名为 DF.java 的 DialogFragment 类,它使用名为 DF.xml 的基于线性布局的布局。
  2. DF.xml 中的子元素(同样是线性布局)的宽度设置为 0dp,并使用权重进行计算。
  3. 我计划在单击按钮时显示 Activity 中的 DialogFragment DF,效果很好,DialogFragment 加载也很好。

现在,当 DialogFragment DF 显示时,我需要获取其子元素之一(线性布局)的宽度。

我在 onCreateDialog 中尝试过 getWidth、getMeaseuredWidth、ViewTreeObserver 等,但结果始终为零。

显示DialogFragment的代码

    DF dialog = DF.newInstance(context, "DFInstance");
dialog.show(((Activity)context).getFragmentManager(), "DFInstance");

DialogFragment DF.java 类中的代码

public Dialog onCreateDialog(Bundle savedInstanceState) {

LayoutInflater inflater = LayoutInflater.from(context);
View dialog_layout = inflater.inflate(R.layout.dialog_DF,
null);
CurrentDialog = new Dialog(context, R.style.DFTheme);
CurrentDialog.setCanceledOnTouchOutside(true);
CurrentDialog.setContentView(dialog_layout);
CurrentDialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
CurrentDialog.setOnShowListener(new OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
//Tried getting width here using many approaches, Ex:
int Width1 = (((Dialog)dialog).findViewById(R.Id.fieldForWidth)).getWidth();
// Also tried using MeasureSpec here and then getMeasuresWidth
// Also tried adding above code in ViewTreeObserver here.
}

});
Window window = CurrentDialog.getWindow();
window.setLayout(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
CurrentDialog.show();

return CurrentDialog;
}

但奇怪的是,如果我选择反对 DialogFragment,并且直接从我的主要 Activity 中显示对话框,那么相同的代码会使用 getWidth() 在 onShow 中完美返回宽度值。

但为了代码组织,我确实需要通过 DialogFragment 来完成此操作。

任何关于我在这里做错了什么的帮助或指示都会非常有帮助。

最佳答案

要获取 DialogFragment 中子 LinearLayout 的宽度,您可以将 OnShowListenergetMeasuredWidth() 一起使用:

final int width;

myDialog.setOnShowListener(new DialogInterface.OnShowListener()
{
@Override
public void onShow(DialogInterface dialog)
{
width = ((Dialog)dialog).findViewById(R.id.field_for_width).getMeasuredWidth());

}
});

这适用于宽度设置为 match_parentwrap_content 的子 View(只是一个普通的 View 以及 LinearLayout)。

请注意,在我的测试中,我没有在 onCreateDialog() 中调用 CurrentDialog.show(),而仅在 Activity 代码中使用以下几行来显示对话框:

DialogFragment mDialog = DF.newInstance("x", "yz");
mDialog.show(getSupportFragmentManager(), "myCurrentDialog");

关于java - DialogFragment 中 subview 的 getWidth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35939322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com