【发布时间】:2014-11-29 12:44:01
【问题描述】:
您好,如果这似乎与之前提出的问题重复,我们深表歉意。
我有 Android 应用程序,我正在显示一个对话框片段。我遇到的问题是,当基本活动显示对话框片段时,它的宽度被忽略了。这是我的onCreateDialog 函数中的代码:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(getActivity());
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
LayoutInflater layoutInflater = (LayoutInflater) getActivity()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout2 = layoutInflater.inflate(R.layout.fragment_item_dialog, null);
dialog.setContentView(layout2);
setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog);
Window window = dialog.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
window.setGravity(Gravity.TOP|Gravity.LEFT);
WindowManager.LayoutParams params = window.getAttributes();
params.x = 20;
params.y = 470;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.copyFrom(window.getAttributes());
window.setAttributes(params);
// -- more code here
}
这是我的xml文件fragment_item_dialog
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="400dp"
android:layout_height="wrap_content" >
<!--- code here ---!>
</RelativeLayout>
高度遵循正确,但即使我告诉它包装内容,Android 仍会继续设置宽度以匹配父级。我的对话框片段中的组件不超过 400dp,我不知道为什么 Android 会强制我的布局与父级匹配。
有谁知道如何解决这个问题?很感谢任何形式的帮助。谢谢。
【问题讨论】:
-
顺便说一句:如果屏幕小于 400dp,您认为会发生什么?最好只使用带有填充或边距的
match_parent。这样一来,它始终可以在任何屏幕上正常显示。 -
这是一个有效的观点,但是我只在单个设备上进行开发。实际上,让我尝试在右侧放置一个填充,看看会发生什么。
-
片段的基本相对视图上的边距被忽略。填充从对话框边框内到内容创建空间。我需要固定宽度以显示基本布局中的内容。
-
如果你打算用于单个设备,那么为什么不为 params.width = 470 和 params.height = 50 设置固定整数像素值呢?
标签: android android-dialogfragment dialogfragment