Вырезание приложения по надрезу - PullRequest
0 голосов
/ 12 февраля 2020

Мое приложение обрезано с верхней стороны надрезом. Есть ли какое-то конкретное c решение для преодоления этой проблемы. Я использую эмулятор Pixel 3 XL API 27

изображение для иллюстрации

Что мне делать, если какой-либо код существует для увеличения высоты верхней строки или строки состояния или я должен увеличить высоту строки заголовка, но строка заголовка все еще обрезана Любое предложение или объяснение кода

1 Ответ

0 голосов
/ 12 февраля 2020

Попробуйте приведенное ниже решение.

Получите размер надреза для каждого устройства и установите верхний край поля для просмотра. Таким образом, он подходит для всех устройств.

@Override
protected void onCreate(Bundle savedInstanceState) {
    this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    this.getWindow().setStatusBarColor(Color.TRANSPARENT);
    super.onCreate(savedInstanceState);
    setContentView(MainActivity.this, R.layout.activity_main);

    /*------------ Check display cutout size and give top margin to toolbar -------------*/
    setMarginTopAccordingDisplayCutout(context, yourTopMainView, convertDpToPixel(34), 0);
    /*-----------------------------------------------------------------------------------*/

    ...
    //your Code
 }

private void setMarginTopAccordingDisplayCutout(Context context, View view, int extraTopWithoutCutout, int extraTopWithCutout) {
    int statusBarHeight = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
    }
    if (statusBarHeight > convertDpToPixel(24)) {
        final ViewGroup.MarginLayoutParams[] layoutParams = new ViewGroup.MarginLayoutParams[1];
        layoutParams[0] = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        layoutParams[0].topMargin = statusBarHeight + extraTopWithCutout;
        view.setLayoutParams(layoutParams[0]);
        //topbarlp.setMargins(0, statusBarHeight, 0, 0);
        //Set above layout params to your layout which was getting cut because of notch
        ///topbar.setLayoutParams(topbarlp)
        Log.e(TAG, "onCreate statusBarHeight :: " + statusBarHeight);
    } else {
        final ViewGroup.MarginLayoutParams[] layoutParams = new ViewGroup.MarginLayoutParams[1];
        layoutParams[0] = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
        layoutParams[0].topMargin = extraTopWithoutCutout;
        view.setLayoutParams(layoutParams[0]);
    }
}

private int convertDpToPixel(float dp) {
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    float px = dp * (metrics.densityDpi / 160f);
    return Math.round(px);
}

Надеюсь, это поможет вам !

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...