https://www.dropbox.com/s/lykyutdlo6386il/nexus%205%202.png?dl=0
这张图片是由nexus 5拍摄的。正如你所看到的,屏幕顶部和底部之间的差距是不同的。当边菜单关闭时,会裁剪Android。底部屏幕的一部分隐藏在本机导航栏下。
https://www.dropbox.com/s/wcwuat1bwoqa26v/correct1.png?dl=0
另一方面,这张照片是由银河s5迷你拍摄的。您可能会注意到屏幕顶部和下面之间的差距是相同的。根本没有问题。
它是同一个ResideMenu库,有不同的设备和android (棒棒糖和kitkat)。我查看布局(residemenu.xml),找出一些错误;但在我看来,一切都是正确的。我找不到解决这个问题的办法。是否有任何方法可以正确地缩放主片段(从上到下的相同的边距)?请帮帮我。
指向图书馆的链接: github.com/SpecialCyCi/AndroidResideMenu
编辑:
这个链接 是我正在讨论的问题,它的解决方案。
发布于 2015-07-07 14:15:42
我通过在ResideMenu.java库中编辑“ResideMenu”方法来解决这个问题。
我在一个名为"fitSystemWindows“的方法中做了一些修改
在我做出改变之前:
@Override
protected boolean fitSystemWindows(Rect insets) {
this.setPadding(viewActivity.getPaddingLeft() + insets.left, viewActivity.getPaddingTop() + insets.top,
viewActivity.getPaddingRight() + insets.right, viewActivity.getPaddingBottom() + insets.bottom);
insets.left = insets.top = insets.right = insets.bottom = 0;
return true;
}在我做了改变之后:
@Override
protected boolean fitSystemWindows(Rect insets) {
int bottomPadding=insets.bottom;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
bottomPadding += resources.getDimensionPixelSize(resourceId);
}
}
this.setPadding(viewActivity.getPaddingLeft() + insets.left, viewActivity.getPaddingTop() + insets.top,
viewActivity.getPaddingRight() + insets.right, viewActivity.getPaddingBottom() + bottomPadding);
insets.left = insets.top = insets.right = insets.bottom = 0;
return true;
}此更改解决了我的问题,部分底部屏幕隐藏在本机导航栏下。
我希望这个解决方案对任何遇到这种问题的人都有帮助。干杯。
发布于 2017-01-27 11:31:32
找到最稳定的解
public Point getNavigationBarSize(Context context) {
Point appUsableSize = getAppUsableScreenSize(context);
Point realScreenSize = getRealScreenSize(context);
// navigation bar on the right
if (appUsableSize.x < realScreenSize.x) {
return new Point(realScreenSize.x - appUsableSize.x, appUsableSize.y);
}
// navigation bar at the bottom
if (appUsableSize.y < realScreenSize.y) {
return new Point(appUsableSize.x, realScreenSize.y - appUsableSize.y);
}
// navigation bar is not present
return new Point();
}
public Point getAppUsableScreenSize(Context context) {
WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
return size;
}
public Point getRealScreenSize(Context context) {
WindowManager windowManager = (WindowManager)
context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT >= 17) {
display.getRealSize(size);
} else if (Build.VERSION.SDK_INT >= 14) {
try {
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
} catch (IllegalAccessException e) {} catch (InvocationTargetException e) {} catch (NoSuchMethodException e) {}
}
return size;
}并设置主布局的衬垫
setPadding(getPaddingLeft(),
getPaddingTop(), getPaddingRight(),
getNavigationBarSize(getContext()).y);编辑:将此代码保存在ResideMenu.java的ResideMenu.java()方法中
if (getNavigationBarSize(getContext()).x > 0 && getNavigationBarSize(getContext()).y > 0) {
this.postDelayed(new Runnable() {
@Override
public void run() {
setPadding(getPaddingLeft(),
getPaddingTop(), getPaddingRight(),
getNavigationBarSize(getContext()).y);
}
}, 100);
}发布于 2015-06-27 11:01:15
我也有同样的问题,我通过在ResideMenu库中编辑一个方法来解决这个问题。
在库中,您可以访问一个名为"ResideMenu.java“的java类。
按如下方式编辑该方法。
private void setScaleDirection(int direction){
int screenWidth = getScreenWidth();
float pivotX;
float pivotY = getScreenHeight() * 0.5f;
if (direction == DIRECTION_LEFT){
scrollViewMenu = scrollViewLeftMenu;
pivotX = screenWidth * 2.2f;
}else{
scrollViewMenu = scrollViewRightMenu;
pivotX = screenWidth * -0.5f;
}
ViewHelper.setPivotX(viewActivity, pivotX);
ViewHelper.setPivotY(viewActivity, pivotY);
ViewHelper.setPivotX(imageViewShadow, pivotX);
ViewHelper.setPivotY(imageViewShadow, pivotY);
scaleDirection = direction;
}我在这里做了一些修改
枢轴x= (screenWidth * 2.2f)而不是(screenWidth * 0.5f)。
尝试管理浮点数,它将解决您的问题。
谢谢,快乐编码
https://stackoverflow.com/questions/28952210
复制相似问题