如何在适合整个屏幕的 ScrollView 中将 ConstraintLayout 添加到 LinearLayout?
How do you add a ConstraintLayout to a LinearLayout in a ScrollView that fits the whole screen?
我希望能够滚动 LinearLayout,其中每个元素都是适合整个屏幕的 ConstraintLayout。
我已经在每个布局中为 layout_height 尝试了多个值,但似乎没有任何效果。
我可以在适合我的屏幕的 layout_height 中进行硬编码,但这并不理想。
这是我目前拥有的:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</ScrollView>
这是生成的设计:
尽管设计看起来符合我的要求,但我无法向下滚动以查看后续的 ConstraintLayout。
非常感谢任何帮助。我已经在线搜索并尝试修复此问题数小时但没有结果
好的,非常简单。您不能在 xml 上执行此操作,必须在代码中执行。下面先创建class:
public class DisplayMetricsUtils {
private static DisplayMetricsUtils displayMetricsUtils;
private static DisplayMetrics displayMetrics;
private Context mContext;
public DisplayMetricsUtils(Context mContext) {
this.mContext = mContext;
displayMetrics = mContext.getResources().getDisplayMetrics();
}
public static DisplayMetricsUtils newInstance(Context mContext) {
if (displayMetricsUtils == null) {
displayMetricsUtils = new DisplayMetricsUtils(mContext);
}
return displayMetricsUtils;
}
public int widthPixel() {
return displayMetrics.widthPixels;
}
public int heightPixels() {
return displayMetrics.heightPixels;
}
public float dpWidth() {
return widthPixel() / displayMetrics.density;
}
public float dpHeight() {
return heightPixels() / displayMetrics.density;
}
public void setHeightForView(View view, int ratio) {
view.getLayoutParams().height = heightPixels() / ratio;
}
public void setWidthForView(View view, int ratio, int bonus) {
view.getLayoutParams().width = widthPixel() / ratio + bonus;
}
public void setWidthForView(View view, int edge) {
view.getLayoutParams().width = widthPixel() - edge;
}
public void setHeightForView(View view, int ratio, int bonus) {
view.getLayoutParams().height = heightPixels() / ratio + bonus;
}
public int getHeightOfView(View view) {
return view.getLayoutParams().height;
}
}
并使用这个:
DisplayMetricsUtils displayMetricsUtils = DisplayMetricsUtils.newInstance(UserActivity.this);
displayMetricsUtils.setHeightForView("Your constaintlayout", 1);
我希望能够滚动 LinearLayout,其中每个元素都是适合整个屏幕的 ConstraintLayout。
我已经在每个布局中为 layout_height 尝试了多个值,但似乎没有任何效果。 我可以在适合我的屏幕的 layout_height 中进行硬编码,但这并不理想。
这是我目前拥有的:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</ScrollView>
这是生成的设计:
尽管设计看起来符合我的要求,但我无法向下滚动以查看后续的 ConstraintLayout。
非常感谢任何帮助。我已经在线搜索并尝试修复此问题数小时但没有结果
好的,非常简单。您不能在 xml 上执行此操作,必须在代码中执行。下面先创建class:
public class DisplayMetricsUtils {
private static DisplayMetricsUtils displayMetricsUtils;
private static DisplayMetrics displayMetrics;
private Context mContext;
public DisplayMetricsUtils(Context mContext) {
this.mContext = mContext;
displayMetrics = mContext.getResources().getDisplayMetrics();
}
public static DisplayMetricsUtils newInstance(Context mContext) {
if (displayMetricsUtils == null) {
displayMetricsUtils = new DisplayMetricsUtils(mContext);
}
return displayMetricsUtils;
}
public int widthPixel() {
return displayMetrics.widthPixels;
}
public int heightPixels() {
return displayMetrics.heightPixels;
}
public float dpWidth() {
return widthPixel() / displayMetrics.density;
}
public float dpHeight() {
return heightPixels() / displayMetrics.density;
}
public void setHeightForView(View view, int ratio) {
view.getLayoutParams().height = heightPixels() / ratio;
}
public void setWidthForView(View view, int ratio, int bonus) {
view.getLayoutParams().width = widthPixel() / ratio + bonus;
}
public void setWidthForView(View view, int edge) {
view.getLayoutParams().width = widthPixel() - edge;
}
public void setHeightForView(View view, int ratio, int bonus) {
view.getLayoutParams().height = heightPixels() / ratio + bonus;
}
public int getHeightOfView(View view) {
return view.getLayoutParams().height;
}
}
并使用这个:
DisplayMetricsUtils displayMetricsUtils = DisplayMetricsUtils.newInstance(UserActivity.this);
displayMetricsUtils.setHeightForView("Your constaintlayout", 1);