首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android ResideMenu库,片段底部有裁剪问题

Android ResideMenu库,片段底部有裁剪问题
EN

Stack Overflow用户
提问于 2015-03-09 21:37:36
回答 3查看 1.7K关注 0票数 5

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

编辑:

这个链接 是我正在讨论的问题,它的解决方案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-07 14:15:42

我通过在ResideMenu.java库中编辑“ResideMenu”方法来解决这个问题。

我在一个名为"fitSystemWindows“的方法中做了一些修改

在我做出改变之前:

代码语言:javascript
复制
 @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;
    }

在我做了改变之后:

代码语言:javascript
复制
@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;
    }

此更改解决了我的问题,部分底部屏幕隐藏在本机导航栏下。

我希望这个解决方案对任何遇到这种问题的人都有帮助。干杯。

票数 11
EN

Stack Overflow用户

发布于 2017-01-27 11:31:32

找到最稳定的解

代码语言:javascript
复制
    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;
}

并设置主布局的衬垫

代码语言:javascript
复制
setPadding(getPaddingLeft(),
getPaddingTop(), getPaddingRight(),
getNavigationBarSize(getContext()).y);

编辑:将此代码保存在ResideMenu.java的ResideMenu.java()方法中

代码语言:javascript
复制
 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);
    }
票数 1
EN

Stack Overflow用户

发布于 2015-06-27 11:01:15

我也有同样的问题,我通过在ResideMenu库中编辑一个方法来解决这个问题。

在库中,您可以访问一个名为"ResideMenu.java“的java类。

按如下方式编辑该方法。

代码语言:javascript
复制
 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)。

尝试管理浮点数,它将解决您的问题。

谢谢,快乐编码

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28952210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档