簡體   English   中英

一些Android手機在屏幕底部和屏幕右側切斷了UI

[英]Some Android Phones Cutting Off UI At Bottom & Right of Screen

我已經在其他幾種設備上進行了測試,並且UI看起來不錯。

但是,在三星Note 3上,用戶界面的底部已被切斷。

我已經記錄了系統規格並完成了數學運算。 我的設備屏幕高度為1920。

我有一個尺寸為108 x 108的按鈕。

我希望該按鈕位於屏幕底部(我不使用XML,我使用Java)。

    _button.setMinimumHeight(buttonDimension);
    _button.setMaxHeight(buttonDimension);
    _button.setY(1920 - 108);

但是,此操作(僅在Samsung Note 3上)會在按鈕底部被切斷。 另外,如果我嘗試右對齊,那里也會有輕微的中斷。 看起來底部有25個像素。

這里發生了什么?

三星似乎將實際渲染窗口下方和右側的較小區域視為“屏幕高度”的一部分。

您知道在屏幕偏離報告值的情況下如何獲得屏幕的實際顯示高度嗎?

如果我使用layoutparams並對齊到底部,那么它確實可以正常工作,但是我需要它來處理像素數據。

為什么在其中對尺寸進行硬編碼? 僅僅因為屏幕高度為1920x1080並不意味着您實際上有許多像素可用於您的應用程序(除非您使用沉浸式全屏模式)。

您的按鈕采用哪種布局? 如果在FrameLayout ,只需將按鈕的layout_gravity設置為bottom|center_horizontal 從Java來看,它看起來像:

FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) _button.getLayoutParams();
params.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
_button.requestLayout();

RelativeLayout 只需使用layout_centerHorizontallayout_alignParentBottom

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) _button.getLayoutParams();
params.addRule(RelativeLayout.CENTER_HORIZONTAL);
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
_button.requestLayout();

編輯:查看您最近的編輯,您應該只使用父級的實際尺寸來確定位置。 您可以將OnGlobalLayoutListener添加到父布局以確定其大小:

parent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        parent.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        int parentHeight = parent.getHeight();
        // do your positioning
    }
}

我的按鈕高度沒有調整其視界,因此高度錯誤。 設置setAdjustViewBounds(true)解決此問題。

它僅在某些手機而非其他手機上“出現”的原因是下采樣和上采樣。 如果資產的密度可以容納在按鈕內,那么它將看起來很正常。 但是在Samsung 3(在此特定情況下)上,可繪制資產的大小為136 x 136,並且按鈕無法將其調整為較小的尺寸。 當將adjustsBounds設置為true時,可以將其縮小到正確的大小。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM