Страницы

Поиск по вопросам

Показаны сообщения с ярлыком android-toolbar. Показать все сообщения
Показаны сообщения с ярлыком android-toolbar. Показать все сообщения

пятница, 14 февраля 2020 г.

Скрыть компонент из toolbar

#java #android #android_toolbar #actionbar


Как программно можно скрыть один из MenuItem на toolbar?
    


Ответы

Ответ 1



main_menu.xml ... Activity.java public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); MenuItem shareItem = menu.findItem(R.id.menu_action_share); if (что-то) shareItem.setVisible(false); //скрыть программно return true; } Если Вы хотите контролировать меню из фрагмента, то нужно вызвать setHasOptionsMenu в onCreate() фрагмента. @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } Затем переопределить onCreateOptionsMenu @Override public boolean onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main_menu, menu); menu.clear();//например убрать все элементы меню. return true; }

четверг, 13 февраля 2020 г.

Выравнивание по левому краю содержимого Toolbar

#android #android_toolbar


Как выровнять ImageView по левому краю до самого конца, чтобы не было отступа как
на скриншоте ниже?

xml 







    



    

        

        
        
    

 

    


Ответы

Ответ 1



Многие пытаются избавиться от этого отступа, выставляя нулевой PaddingLeft, что в корне неверно, ибо причина отступа - android:contentInsetStart (contentInsetLeft для версий постарше). Код стиля ниже определен для @style/rollserv_toolbar кастомной темы. Также есть возможность определить/получить это свойство программно, подробнее в документации к функциям setContentInsetsRelative(int, int) setContentInsetsAbsolute(int, int) getContentInsetStart() getContentInsetEnd() getContentInsetRight() Документация toolbar

Ответ 2



Хотя вопрос уже задан давно, но возможно кому-то пригодится. Как ответил выше Dmitry Nevzorov, для того, чтобы убрать в toolbar отступ слева (который по умолчанию 16dp), нужно использовать свойство contentInsetStart или для старых устройств contentInsetLeft. Это можно сделать так - в layout-файл тулбара добавьте строки: android:contentInsetStart="0dp" android:contentInsetLeft="0dp" Подробнее ответ дан тут

Ответ 3



Возможно, нужно выставить layout_gravity="left" или gravity="left".

пятница, 24 января 2020 г.

Как убрать action bar и тень под ним, но оставить троеточие

#java #android #activity #android_toolbar


Подскажите, как можно убрать текст в Action bar, но оставить при этом кнопку настроек.
Пытался изменить цвет текста в Action bar, но меняется и цвет текста в меню настроек.
А также подскажите, как убрать тень под action bar. Может быть, вопросы легкие, но
ответа я на них не нашел
    


Ответы

Ответ 1



Просто задайте пустой заголовок: getSupportActionBar().setTitle(""); И вот так уберите тень: getSupportActionBar().setElevation(0);

Ответ 2



Можно выбрать Activity тему, содержащую текст NoActionBar либо в коде прописать: getActionBar().hide() В качестве меню можно использовать PopupMenu: public void showPopup(View v) { PopupMenu popup = new PopupMenu(this, v); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.actions, popup.getMenu()); popup.show(); }

четверг, 9 января 2020 г.

Не получается изменить форму Toolbar (ActionBar) Android

#java #android #android_studio #android_toolbar


Добрый день!
Ищу способ изменить форму верхнего Toolbar (ActionBar), как на этом скрине.
Использую API 21. Обратите внимание под toolbar-ом на скрине есть цветная тень (но
можно ограничиться и стандартной не цветной). 


Были мысли попробовать через SVG. Может быть есть какие-то решения, чтобы сделать
этот скругленный тулбар?
Заранее благодарю всех небезразличных.
    


Ответы

Ответ 1



Я бы попробовал 2 варианта: 1) Классический тулбар, в котором задается фоновый drawable заданный через xml, типа: 2) Попробовал бы применить ArcLayout

суббота, 28 декабря 2019 г.

Меню под Toolbar. Нет названия табов

#android #material_design #menu #android_toolbar


Пытаюсь сделать так - 



Java код

//Pager
    TabsViewPagerAdapter adapter = new TabsViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Fragment1(), "Первый");
    adapter.addFragment(new Fragment2(), "Second");
    viewPager.setAdapter(adapter);

    //Set tabs
    tabLayout.setupWithViewPager(viewPager);


Так же вот вам мой класс -

public class PagerAdapterHelper extends FragmentPagerAdapter {
private final List mFragmentList = new ArrayList<>();
private final List mFragmentTitleList = new ArrayList<>();

public PagerAdapterHelper(FragmentManager manager) {
    super(manager);
}

@Override
public Fragment getItem(int position) {
    return mFragmentList.get(position);
}

@Override
public int getCount() {
    return mFragmentList.size();
}

public void addFragment(Fragment fragment, String title) {
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);
}


@Override
public CharSequence getPageTitle(int position) {
    switch (position) {
        case 0:
            return "ONE";
        case 1:
            return "TWO";
        default:
            return "WTF";
    }
}


}

После запуска Активити есть тулбар и поле под ним, но почему-то самих табов на нем
нет. Так же сами фрагменты спокойно отображаются/листаются. На табы можно тыкать, все
норм, только надписей нет(
    


Ответы

Ответ 1



Для этого применяются табы. Код разметки: Код добавления: Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); assert toolbar != null; setSupportActionBar(toolbar); viewPager = (ViewPager) findViewById(R.id.viewpager); tabLayout = (TabLayout) findViewById(R.id.tabs); TabsViewPagerAdapter adapter = new TabsViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new Fragment1(), "ssss"); adapter.addFragment(new Fragment2(), "Second"); viewPager.setAdapter(adapter); viewPager.setAdapter(adapter); assert tabLayout != null; tabLayout.setupWithViewPager(viewPager); tabLayout.setupWithViewPager(viewPager); tabLayout.getTabAt(0).setText("1"); tabLayout.getTabAt(1).setText("2"); Код адаптера: public class TabsViewPagerAdapter extends FragmentPagerAdapter { private final List mFragmentList = new ArrayList<>(); private final List mFragmentTitleList = new ArrayList<>(); public TabsViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } }

Ответ 2



build.gradle dependencies { compile 'com.android.support:design:23.1.1' } activity_pull_to_refresh.xml TabLayoutActivity.class public class TabLayoutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_to_refresh); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); ViewPager viewPager = (ViewPager) findViewById(R.id.pager); if (toolbar != null) { setSupportActionBar(toolbar); } viewPager.setAdapter(new SectionPagerAdapter(getSupportFragmentManager())); tabLayout.setupWithViewPager(viewPager); } public class SectionPagerAdapter extends FragmentPagerAdapter { public SectionPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { switch (position) { case 0: return new FirstTabFragment(); case 1: default: return new SecondTabFragment(); } } @Override public int getCount() { return 2; } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "First Tab"; case 1: default: return "Second Tab"; } } } }

воскресенье, 22 декабря 2019 г.

Null object reference при перевороте экрана с открытым SearchView

#java #android #android_toolbar #android_menu #android_search_view


Собственно, суть описана в заголовке: если при открытом SearchView в toolbar'е сменить
положение экрана, то приложение крашится с ошибкой: 

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean
android.view.MenuItem.collapseActionView()' on a null object reference


Сам метод MenuItemCompat.collapseActionView(searchMenu); написан в 

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            MenuItemCompat.collapseActionView(searchMenu);

            ...
        }

    });


При этом приложение крашится не всегда, а только если выбрана не дефолтная страница
ViewPager'а. Я так понимаю, что это происходит из-за того, что при перевороте экрана
срабатывает заново метод onCreate, но onCreateOptionsMenu вызывается позже. Если способы
решения проблемы?
    


Ответы

Ответ 1



Да, это происходит из-за того, что вы пытаетесь манипулировать меню до его создания. Вот вам вариант обхода. В onPrepareOptionsMenu проверяйте флаг (boolean переменную shouldCollapseActionView класса активити, коей назначайте нужное значение в нужных местах. В вашем случае - вместо MenuItemCompat.collapseActionView(searchMenu); в слушателе смены страницы ViewPager.) В зависимости от значения флага в onPrepareOptionsMenu раскрывайте/закрывайте searchView Сразу после изменения значения этой переменной вызовите supportInvalidateOptionsMenu() - это заставит перерисоваться меню, вызвав метод onPrepareOptionsMenu. Так у вас всегда в нужном состоянии будет меню и вы сможете его безопасно менять

воскресенье, 15 декабря 2019 г.

Убрать ActionBar (Toolbar?)

#android #actionbar #android_toolbar #android_style


Здравствуйте.

Появилась небольшая проблема:



Пустое пространство под ActionBar - на Android 4 оно не отображается, только на 5+.

Фрагмент из манифеста:




Styles.xml:


















В лаяуте про actionbar ничего нет
    


Ответы

Ответ 1



Поставьте в манифест тему android:theme="@style/AppTheme.NoActionBar" или перенесите те две строчки из NoActionBar в AppTheme

среда, 11 декабря 2019 г.

Android/Java. Как задать (увеличить) отступ иконки Navigation Drawer'a от края?

#java #android #android_toolbar #android_navigation_drawer #icon


Как задать (увеличить) отступ иконки Navigation Drawer'a от края?


    


Ответы

Ответ 1



Я думаю если человек использует Navigation Drawer, то там используется "android.support.v7.widget.Toolbar" Тогда если вы хотите сделать отступ, используйте такой пример: где android:layout_marginLeft="15dp" и есть отступ от левого края на 15dp.

пятница, 21 июня 2019 г.

Настройка меню в android

Использую ToolBar и на нем эсть кнопка меню в виде трех точек! Мне нужно заменить ее на свое изображение ... Но я не знаю как !
Прошу подсказки: как это можно сделать ???
Или можно настроить так чтоб точки были другим цветом ???


Ответ

Чтобы заменить на свое изображение:


Если хотите изменить цвет:

среда, 19 июня 2019 г.

Странное поведение разметки после 5 версии андроида

Есть некая разметка, приведу в пример лишь ее часть. По скроллу вверх она должна прятать toolbar и оставлять табы, на версии до lolipop все происходит как нужно. Однако, начиная с версии 5.0 и выше, убирается лишь status bar и при этом toolbar занимает место status bar
Сразу подумал на android:fitsSystemWindow, и все что у меня вышло - это сделать нормально на версии после 5, и полное скрытие на версиях до 5.
Раньше с подобным никогда не встречался, на мой взгляд поведение слишком странное.
Вот часть кода разметки:









Ответ

Это гугл опять воду мутит. В версии либ 23.3.0 всё более-менее нормально работает. На версии 23.4.0 придётся пользовать костыль проставления paddingTop тулбару

понедельник, 17 июня 2019 г.

Android Studio. Не отображает Navigation Drawer при нажатии на гамбургер

В Debugger при нажатие на гамбургер item равно ActionMenuItem@4876, как выправить код чтоб все заработало?
private void setToolBar() {
Toolbar tb = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(tb);
ActionBar ab = getSupportActionBar(); ab.setHomeAsUpIndicator(R.drawable.ic_menu_default); ab.setDisplayHomeAsUpEnabled(true); }
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.forecast_filter: showFiter(); break; case R.id.home: { dLayout.openDrawer(GravityCompat.START); return true;} } return true; }


Ответ

Вы используете неправильный ID. Вам надо вместо
R.id.home
использовать системный ID из пакета android, т.е.
android.R.id.home

среда, 24 апреля 2019 г.

Скрыть компонент из toolbar

Как программно можно скрыть один из MenuItem на toolbar?


Ответ

main_menu.xml


...


Activity.java
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); MenuItem shareItem = menu.findItem(R.id.menu_action_share); if (что-то) shareItem.setVisible(false); //скрыть программно return true; }

Если Вы хотите контролировать меню из фрагмента, то нужно вызвать setHasOptionsMenu в onCreate() фрагмента.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); }
Затем переопределить onCreateOptionsMenu
@Override public boolean onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.main_menu, menu); menu.clear();//например убрать все элементы меню. return true; }

вторник, 19 марта 2019 г.

Как убрать action bar и тень под ним, но оставить троеточие

Подскажите, как можно убрать текст в Action bar, но оставить при этом кнопку настроек. Пытался изменить цвет текста в Action bar, но меняется и цвет текста в меню настроек. А также подскажите, как убрать тень под action bar. Может быть, вопросы легкие, но ответа я на них не нашел


Ответ

Просто задайте пустой заголовок:
getSupportActionBar().setTitle("");
И вот так уберите тень:
getSupportActionBar().setElevation(0);

четверг, 15 ноября 2018 г.

Null object reference при перевороте экрана с открытым SearchView

Собственно, суть описана в заголовке: если при открытом SearchView в toolbar'е сменить положение экрана, то приложение крашится с ошибкой:
Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.MenuItem.collapseActionView()' on a null object reference
Сам метод MenuItemCompat.collapseActionView(searchMenu); написан в
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override public void onPageSelected(int position) { MenuItemCompat.collapseActionView(searchMenu);
... }
});
При этом приложение крашится не всегда, а только если выбрана не дефолтная страница ViewPager'а. Я так понимаю, что это происходит из-за того, что при перевороте экрана срабатывает заново метод onCreate, но onCreateOptionsMenu вызывается позже. Если способы решения проблемы?


Ответ

Да, это происходит из-за того, что вы пытаетесь манипулировать меню до его создания.
Вот вам вариант обхода.
В onPrepareOptionsMenu проверяйте флаг (boolean переменную shouldCollapseActionView класса активити, коей назначайте нужное значение в нужных местах. В вашем случае - вместо MenuItemCompat.collapseActionView(searchMenu); в слушателе смены страницы ViewPager.)
В зависимости от значения флага в onPrepareOptionsMenu раскрывайте/закрывайте searchView
Сразу после изменения значения этой переменной вызовите supportInvalidateOptionsMenu() - это заставит перерисоваться меню, вызвав метод onPrepareOptionsMenu
Так у вас всегда в нужном состоянии будет меню и вы сможете его безопасно менять

четверг, 25 октября 2018 г.

Убрать ActionBar (Toolbar?)

Здравствуйте.
Появилась небольшая проблема:

Пустое пространство под ActionBar - на Android 4 оно не отображается, только на 5+.
Фрагмент из манифеста:

Styles.xml:








В лаяуте про actionbar ничего нет


Ответ

Поставьте в манифест тему android:theme="@style/AppTheme.NoActionBar" или перенесите те две строчки из NoActionBar в AppTheme