gpt4 book ai didi

java - Android DialogFragment 自动调整大小

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:41 25 4
gpt4 key购买 nike

我的问题类似于Full Screen DialogFragment in Android ,但这个问题并不能完全解决我的问题。

我有一个 DialogFragment,我想为其设置最大尺寸,并在 DialogFragment 超出显示范围时自动调整大小。这似乎应该融入操作系统,但我能想到的唯一解决方案是轮询显示尺寸并在尺寸超出显示范围时手动调整大小。

DialogFragmentonCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 中:

    // Display the first screen
m_rootView = inflater.inflate(R.layout.fragment_popup, container, false);

// Readjust the size of the dialog fragment if it is too large for the display
Globals.AdjustSizeOfDialogFragment(getActivity(), container);

调整 Globals.java 中的代码:

// Adjusts the size of a dialog fragment's popup view to ensure that it fits within the display of the current device
public static void AdjustSizeOfDialogFragment(final Activity parentActivity, final View popupRoot)
{
// If all of our function parameters are valid
if ((parentActivity != null) && (popupRoot != null))
{
// If the dialog's root view has already rendered (has defined layout parameters)
if (popupRoot.getLayoutParams() != null)
{
// Resize the dialog now
ResizeDialogFragment(parentActivity, popupRoot);
}
// Else the view has not finished rendering yet
else
{
// Assign a listener to notify us when it has finished rendering
popupRoot.addOnLayoutChangeListener(new OnLayoutChangeListener()
{
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom)
{
// Remove the layout listener
v.removeOnLayoutChangeListener(this);

// Now we can render the dialog
ResizeDialogFragment(parentActivity, popupRoot);
}
});
}
}
}

// Does the actual logic/math behind the AdjustSizeOfDialogFragment function
private static void ResizeDialogFragment(Activity parentActivity, View popupRoot)
{
// Retrieves information about the display of the current device
DisplayMetrics deviceDisplayMetrics = new DisplayMetrics();
// Layout parameters that need to be applied to the popup's root view
LinearLayout.LayoutParams llParams = null;
FrameLayout.LayoutParams flParams = null;

// If all of our function parameters are valid
if ((parentActivity != null) && (popupRoot != null) && (popupRoot.getLayoutParams() != null))
{
// Retrieve the layout parameters from the popup's root view and also get information on the current device's display
if (popupRoot.getLayoutParams() instanceof LinearLayout.LayoutParams)
{
llParams = (LinearLayout.LayoutParams) popupRoot.getLayoutParams();
}
else if (popupRoot.getLayoutParams() instanceof FrameLayout.LayoutParams)
{
flParams = (FrameLayout.LayoutParams) popupRoot.getLayoutParams();
}
parentActivity.getWindowManager().getDefaultDisplay().getMetrics(deviceDisplayMetrics);

// If either the height or width of the popup view is greater then the height or width
// of the current display, clip them to approximately 90% of the display's width/height.
if (llParams != null)
{
if (llParams.width > deviceDisplayMetrics.widthPixels)
{
llParams.width = (int) (deviceDisplayMetrics.widthPixels * 0.9);
}
if (llParams.height > deviceDisplayMetrics.heightPixels)
{
llParams.height = (int) (deviceDisplayMetrics.heightPixels * 0.9);
}
}
else if (flParams != null)
{
if (flParams.width > deviceDisplayMetrics.widthPixels)
{
flParams.width = (int) (deviceDisplayMetrics.widthPixels * 0.9);
}
if (flParams.height > deviceDisplayMetrics.heightPixels)
{
flParams.height = (int) (deviceDisplayMetrics.heightPixels * 0.9);
}
}
}
}

问题是:真正的 Android 方法是什么?这是我唯一的选择吗?这似乎应该内置到操作系统中,但我问过的人都找不到。

最佳答案

也许您遇到此问题是因为 Windows 正在调整显示您的 DialogFragment,因此如果在 AndroidManifest.xml 中将 windowSoftInputMode 属性设置为 adjustNothing > 显示的 Activity ,可以解决您的问题。

<activity
...
android:windowSoftInputMode="adjustNothing">
...

仅供引用:https://developer.android.com/training/keyboard-input/visibility.html#ShowOnStart

关于java - Android DialogFragment 自动调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13955645/

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