• Как сделать обтекание картинки текстом на хабре?

    ziginsider
    @ziginsider
    C#, Xamarin, Android, python
    Картинка - слева, текст - справа:
    <img src="https://example.com/image.jpg" alt="image" align="left"/>

    Если надо отменить обтекание текстом и выводить текст с новой строки:
    <br clear="left"/>
    Ответ написан
    Комментировать
  • Какую литературу лучше почитать по Maven (На русском)?

    ziginsider
    @ziginsider
    C#, Xamarin, Android, python
    Для понимания основ Maven: https://www.youtube.com/watch?v=0uwMKktzixU

    Есть мануал на русском, но с ошибками, морально устарел и подача материала спорная: www.apache-maven.ru/index.html

    Практика настройки Maven для сборки проектов: https://habrahabr.ru/post/343550/

    Ну и всем интересующимся офф. сайт maven.apache.org/guides/getting-started/index.html. Можно перевести сайт на русский автоматом и разбираться.
    Ответ написан
    Комментировать
  • Как разделить Android Activity или фрагменты и состояние приложения?

    ziginsider
    @ziginsider
    C#, Xamarin, Android, python
    Если надо иметь доступ к данным, и при этом быть независимым от жизненных циклов, можно попробовать дефолтное решение от Google: Android Architecture Components. Довольно просто использовать. Презентация с русскими субтитрами: https://youtu.be/Dl4DiQRxBi4
    Ответ написан
    Комментировать
  • Почему в RecyclerView adapter не всегда вызывается метод onCreateViewHolder?

    ziginsider
    @ziginsider
    C#, Xamarin, Android, python
    Принцип работы RecyclerView в общих словах:

    1) прокручивается список, создаются вьюхи и выводятся на экран, при этом выполняется onCreateViewHolder() и onBindViewHolder() .

    2) ушедшие за экран вьюхи не уничтожаются, а попадают в пул объектов.

    3) При дальнейшем скролле, вьюхи появляющиеся из-за экране не пересоздаются, а берутся из этого самого пула . При этом срабатывает только onBindViewHolder().

    Говоря отвлеченно, метод onCreateViewHolder() создает "бассейн", а метод onBindViewHolder() "наполняет бассейн водой". Если каждый раз, когда меняется представление (скролл) не "менять воду в бассейне" полностью т.е. не переопределять содержание всех элементов, которые могут измениться, в onBindViewHolder(), то вьюха может выдавать сюрпризы в виде старых значений.
    Ответ написан
    Комментировать
  • Как заставить TabLayout скролиться вместе с ViewPager?

    ziginsider
    @ziginsider
    C#, Xamarin, Android, python
    Т.к. для разметки у вас используется CoordinatorLayout, то лёгкий способ:

    Добавляем одну строчку в описании Toolbar:

    <android.support.v7.widget.Toolbar
     android:id = "@+id/toolbar"
     android:layout_width = "match_parent"
     android:theme="@style/ThemeOverlay.AppCompat.Dark"
     android:layout_height = "?attr/actionBarSize"
     android:background="?attr/colorPrimary"
     app:layout_scrollFlags="scroll|enterAlways"
    />


    или то же самое делаем в коде, когда инициализируем toolbar:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    AppBarLayout.LayoutParams params =  (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);


    Если нужна более тонкая настройка анимации, придется вручную:

    Например, у вас список listView и appbar, который нужно прятать или снова показывать когда крутим список.
    Получаем список, получаем appbar... Например, так:
    appbar = (AppBarLayout) getActivity().findViewById(R.id.appbar_layout);

    Слушаем скролл списка и запускаем соответствующую анимацию:
    listView.setOnScrollListener(new AbsListView.OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView view, int scrollState) {
                }
    
                @Override
                public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                    if (view.getId() == listView.getId()) {
                        final int currentFirstVisibleItem = listView.getFirstVisiblePosition();
                        if (currentFirstVisibleItem > mLastFirstVisibleItem) {
    
                            //прячем appbar
                            appbar.animate().translationY(-appbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
    
                        } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
    
                            //возвращаем на место...
                            appbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();
    
                        }
                        mLastFirstVisibleItem = currentFirstVisibleItem;
                    }
                }
            });
    Ответ написан
    Комментировать
  • Можете рекомендовать хороший видео курс по python?

    ziginsider
    @ziginsider
    C#, Xamarin, Android, python
    Отличный видео-курс от Сергея Лебедева: https://www.youtube.com/playlist?list=PLwwk4BHih4f...
    Правда он рассчитан на людей более-менее понимающих в программировании, и автор курса копает глубоко. При этом ничего лишнего, всё по делу.
    Ответ написан
    Комментировать