LayoutParams setMargins 不适用于 API 23 及更低版本
LayoutParams setMargins not working on API 23 and lower
我正在尝试以编程方式添加视图并将其设置到屏幕上的特定位置。
添加视图:
View view = new View(this);
然后我要添加一个 GlobalLayoutListener
ViewTreeObserver observer = slidingTabLayout.getViewTreeObserver();
最后在 onGlobalLayout 中设置它的位置:
public void onGlobalLayout() {
int width = Resources.getSystem().getDisplayMetrics().widthPixels;
int viewWidth = (int) (width * 0.18);
int viewHeight = (int) (viewWidth / 3);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(viewWidth, viewHeight);
layoutParams.setMargins((int) (0.81 * width), (int) (slidingTabLayout.getY() + slidingTabLayout.getHeight() - (height / 2)), 0, 0);
view.setLayoutParams(layoutParams);
}
我也试过使用ViewGroup.MarginLayoutParams
使用 API 24 及以上效果很好,但 API 23(及更低)忽略边距,视图位于屏幕的左上角。
如何解决此问题以支持所有 API 级别?
我遇到了类似的问题,并使用不同的方法解决了 API > 23 和 API <= 23。
所以对于 API <= 23 而不是使用边距,我使用了 setX(float x) 和 setY(float y)。
在你的情况下它会是这样的:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
layoutParams.setMargins((int) (0.81 * width), (int) (slidingTabLayout.getY() + slidingTabLayout.getHeight() - (viewHeight / 2)), 0, 0);
view.setLayoutParams(layoutParams);
} else {
view.setX((int) (0.81 * width));
view.setY((int) (slidingTabLayout.getY() + slidingTabLayout.getHeight() - (viewHeight / 2)));
view.setLayoutParams(layoutParams);
}
我正在尝试以编程方式添加视图并将其设置到屏幕上的特定位置。
添加视图:
View view = new View(this);
然后我要添加一个 GlobalLayoutListener
ViewTreeObserver observer = slidingTabLayout.getViewTreeObserver();
最后在 onGlobalLayout 中设置它的位置:
public void onGlobalLayout() {
int width = Resources.getSystem().getDisplayMetrics().widthPixels;
int viewWidth = (int) (width * 0.18);
int viewHeight = (int) (viewWidth / 3);
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(viewWidth, viewHeight);
layoutParams.setMargins((int) (0.81 * width), (int) (slidingTabLayout.getY() + slidingTabLayout.getHeight() - (height / 2)), 0, 0);
view.setLayoutParams(layoutParams);
}
我也试过使用ViewGroup.MarginLayoutParams
使用 API 24 及以上效果很好,但 API 23(及更低)忽略边距,视图位于屏幕的左上角。
如何解决此问题以支持所有 API 级别?
我遇到了类似的问题,并使用不同的方法解决了 API > 23 和 API <= 23。
所以对于 API <= 23 而不是使用边距,我使用了 setX(float x) 和 setY(float y)。
在你的情况下它会是这样的:
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
layoutParams.setMargins((int) (0.81 * width), (int) (slidingTabLayout.getY() + slidingTabLayout.getHeight() - (viewHeight / 2)), 0, 0);
view.setLayoutParams(layoutParams);
} else {
view.setX((int) (0.81 * width));
view.setY((int) (slidingTabLayout.getY() + slidingTabLayout.getHeight() - (viewHeight / 2)));
view.setLayoutParams(layoutParams);
}