Как удалить левое поле с панели инструментов Android - PullRequest
0 голосов
/ 02 апреля 2020

Я разрабатываю приложение android, в котором есть навигационный ящик для навигации по другим частям моего приложения. Я изменил значок гамбургера по умолчанию ActionBarDrawerToggle на свой собственный значок. Я хочу разместить значок переключателя в левой части экрана. Поэтому я хочу удалить пространство по умолчанию 16 дп.

I want to remove that red bordered space to the left of the toggle icon

Я хочу удалить это пространство с красной рамкой слева от значка переключения

Я уже искал более 4 часов в inte rnet, но ничего не работает. Я перепробовал все, что нашел в StackOverflow, но ни один не работает. Я также попытался изменить свой ресурс значков на другие изображения, чтобы быть уверенным, что в моем используемом изображении нет ошибок.

Кроме того, если я удалю значок переключения с панели инструментов, то другое содержимое панели инструментов автоматически достигнет предела. осталось без поля 16dp, но если я добавлю значок переключения, то снова появится пространство 16dp.

Кроме того, так как моя минимальная версия SDK - 18, поэтому какое-то решение, которое, как я видел, требует минимальной версии SDK 21, не будет работать.

Единственное, что у меня работает, это

    toolbar.setPadding(-16, 0, 0, 0);
    toolbar.setX(-16);

Но в этом есть проблема: для больших экранных устройств, таких как планшеты, значок переключения полностью скрывается. Так может кто-нибудь, пожалуйста, помогите мне с этим, ниже мой код, который я использую.

Заранее большое спасибо

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    fm = getSupportFragmentManager();

    final DrawerLayout drawer = findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
        }
    };

    drawer.addDrawerListener(toggle);
    toggle.setToolbarNavigationClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (drawer.isDrawerVisible(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                drawer.openDrawer(GravityCompat.START);
            }
        }
    });
    toolbar.setContentInsetsAbsolute(0, 0);
    toggle.setDrawerIndicatorEnabled(false);
    toggle.setHomeAsUpIndicator(R.mipmap.toggle);// my icon resource
    toggle.syncState();

Мой xml файл для панели инструментов

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_gradient">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/white"
        android:theme="@style/ThemeOverlay.AppCompat.Light"
        app:contentInsetLeft="0dp"
        app:contentInsetStart="0dp"
        app:contentInsetStartWithNavigation="0dp"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:subtitleTextColor="@color/black"
        app:titleTextColor="@color/black" />

    <RelativeLayout
        android:id="@+id/fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>
</RelativeLayout>

1 Ответ

1 голос
/ 03 апреля 2020

Я думаю, ваш код:

    toolbar.setPadding(-16, 0, 0, 0);
    toolbar.setX(-16);

он отличается для разных экранов, потому что вы используете пиксели (px), и он может меняться на разных экранах. Плотность попробуйте что-то вроде:

toolbar.setPadding(-toPixels(betterValue), 0, 0, 0);
toolbar.setX(-toPixels(betterValue));
/*
.
.
.
*/
static int toPixels(float dip, Context context){
        Resources r=context.getResources();
        float densidade = r.getDisplayMetrics().density;
        return (int)(dip*densidade+0.5f);
}

Не знаю, так ли это лучше, но надеюсь, что это поможет.

...