Ответы пользователя по тегу Android
  • Как сделать такой эффект со скроллом?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Добавь прозрачную вьюху наверху скролла. Сделай её и всех предком некликабельными. Кнопка закрытия пусть будет под ней. По идее, должно сработать.
    Ответ написан
    Комментировать
  • Как добавить текст под Button в android studio?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Использовать TextView, очевидно.
    Ответ написан
    Комментировать
  • Каков план изучения андроид разработки?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Во-первых, стоит посмотреть в сторону котлина, а не джавы.
    Во-вторых, всё изучается одновременно.
    В-третьих, никакой "библиотеки движка" не существует. Есть Android SDK, есть либа поддержки androidx, есть куча сторонних либ.
    в-четвертых, Android Studio это IDE. Как ты планируешь писать код и что-то изучать без IDE не очень понятно(да, есть фрики, которые что-то там пишут в текстовых редакторах, но это непродуктивно).
    Ответ написан
    Комментировать
  • How should I adapt text sizes, images sizes, buttons sizes etc. for different displays of androids?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Для адаптации размеров текста существуют единицы sp, для линейных размеров - dp.
    hdpi и тд обычно используются для различных размеров (чаще растровых) изображений.
    Для лэйаутов - чаще различают портретную(по умолчанию), и ландшафтную(land) ориентации, там разные xml файлы. Также часто для устройств с большим экраном используют постфикс swXXXdp(smaller width XXX dp), например, sw600dp значит что из этой папки будут использованы ресурсы только в случае, когда у девайса длина меньшей из сторон больше либо равна 600dp.
    В остальном - лэйаут должен быть рассчитан на то, что его будут тянуть или сжимать. Надо думать, будет ли помещаться тот ил иной элемент при этом, и что, если нет.

    Подробнее. Ну и там в левой панеле есть куча ссылок, куда тоже стоит сходить почитать.

    Насчёт того, что xml будет занимать место в памяти - нет, не будет. В смысле, это вообще неважно, никогда ты не увидишь большого потребления памяти от xml.
    Что-то про проценты - нет, не поддерживается. Верстай так, как предлагает тебе система.
    Ответ написан
    Комментировать
  • Как связать вкладку избранное и основное?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Ну очевидно, должен быть репозиторий, который торчит наружу стримами списков. Когда бд внутри обновляется, в стрим должны прилетать новые данные.
    PS стрим это в терминах Rx Observable. Если не используешь Rx, используй альтернативы, например listener самое простое. В корутинах flow.
    Ответ написан
    3 комментария
  • Разработка игр для андроид на языке С++?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Делать можно, но это слишком сложно, неоправданно. Юнити не поддерживает С++. С# используй.
    Ответ написан
    Комментировать
  • Как таймер на Активити?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Во-первых, в Андроиде что-то происходит только на одной активити, которая в данный момент на экране. На остальных ничего происходить не должно.
    Во-вторых, запускать какие-то активити без явного действия пользователя это моветон.
    В-третьих, в современном приложении в большинстве случаев не нужны несколько активити. Достаточно одной и фрагментов.
    Ответ написан
    Комментировать
  • Это нормальная логика работы приложения?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Это простое приложение будет адски грузить смартфон. И жрать батарейку. Правильный путь - это пуши. Сделай свой вебсервис, который будет следить за фотографиями и слать в приложение пуш.

    Асинктаск вообще не нужно использовать. Ни для чего. Достаточно Retrofit/OkHttp, и Handler.postDelayed.
    Сервис не нужно использовать, можешь считать его тоже устаревшим.
    Ответ написан
    4 комментария
  • Как лучше сделать обратную навигацию?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Сделать два фрагмента.
    Ответ написан
  • Anroid, как записать json используя Retrofit2, RxJava2?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Ретрофит делает асинхронный запрос в сеть на другом потоке. Коллбек выполняется значительно позже, чем код, непосредственно расположенный после вызова. Весь код, который должен выполняться после получения ответа, должен вызываться из коллбека. В твоём случае, он должен находиться внутри цепочки Rx.
    fetch должен возвращать Observable/Single, и подписка должна быть в пользовательском коде.
    Ответ написан
    Комментировать
  • Как выполнить DI для application context?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Он же тебе пишет, что цикл в графе.
    Provides
    fun provideApplicationContext(applicationContext: Context): Context

    Вот ты этим чего хочешь добиться? Ты в метод хочешь получить контекст из графа, и отдать в граф хочешь контекст. Это зачем?
    Этот метод вообще лишний, ты же сделал
    BindsInstance, контекст после этого уже в графе.

    И зачем у тебя апп компонент инжектит фрагмент и активити? У каждого из них должен быть свой компонент, Subcomponent апп компонента. Иначе получится просто свалка. И в любом случае случится ситуация, когда тебе в графе понадобится что-то, чего нет и не может быть в аппликейшн.
    Ответ написан
    Комментировать
  • Нужно ли делать DI для простых Kotlin объектов?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Вообще - да, нужно всё внедрять. Давай приведу пример. Вот у тебя какой-то медиа превью конвертер. Не знаю, чем он занимается, но предположим, он форматирует некое превью, фото или видео, так? В этом случае может понадобиться использовать контекст для получения размеров экрана, тк превью на разных экранах может иметь разные размеры. Вот тут-то di и поможет.
    Ответ написан
    2 комментария
  • Как добавить логику парсинга Json, не используя десериализатор?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Да, есть. не надо держать в данных отформатированные поля. Форматировать надо непосредственно перед использованием(например показе во вьюхе). Для этого должен быть отдельный слой, который занимается форматированием всех данных для показа(и это может быть не только форматирование текста).
    Ответ написан
    2 комментария
  • Стоит ли полностью переходить на SingleActivity?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Да, уже давно надо было перейти.
    Такой подход лучше, а не хуже. Лучше тем, что фрагменты можно более-менее нормально анимировать. Также фрагменты между собой в рамках одной активити могут нормально взаимодействовать(target fragment, parent fragment). А активити могут только в интенте передавать данные и получать через onActivityResult.
    Ответ написан
    Комментировать
  • RxJava в 2021. Нужен ли?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    RxJava и корутины немного про разное. Rx это про stateless и представление всего в виде стримов иммутабельных стейтов(данных). Корутины это про stateful и про управление множеством асинхронных сущностей.
    Так сложилось, что в нашем многопоточном мире в обоих подходах есть concurrency. Но это не значит, что надо брать и противопоставлять Rx корутинам.
    Запрос на Rx настолько велик, что в kotlinx завезли flow - это тот же самый реактивный подход, только на основе корутин. С чем боролись, против чего проповедовал Елизаров, на то и напоролись, и ещё наплодили новых операторов, которые тоже надо знать. И усложнили всё чрезвычайно.
    flowOf(123)
       .map(::calculateSomething)
       .filter(::myFilter)
       .collect(::collectIt)

    Сколько в этом коде Асинхронных запросов? В каком месте оно может уснуть навечно? Неизвестно... фреймворк позволяет легко написать код так, что всё взорвется, а ты и не заметишь.
    Хорошо ли то, что с использованием корутин можно писать асинхронный код, по виду идентичный синхронному? Моё мнение - нет, не хорошо, потому что держать в голове две парадигмы про один код - это сложно. А если кто юзал корутины с многопоточностью под iOS(Kotlin/Native), там надо держать в голове три парадигмы про одинаковый код. Это плохо.

    На Rx написано много кода, многим людям без него жить сложно. Многие задачи на Rx решаются настолько проще, что реально думаешь, что без него никак.

    Если тебе корутины или Rx нужны, чтобы в сеть сходить на бекграунде, и потом данные показать в UI - тебе ни корутины, ни Rx особо не нужны.
    Ответ написан
    2 комментария
  • Нужен ли универсальный Adapter для RecyclerView?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Есть такая либа AdapterDelegates. Рекомендую использовать её. Будет универсальный адаптер, и возможность переиспользовать элементы на разных экранах.
    Ответ написан
    Комментировать
  • Нужно ли объявлять субкомпоненты внутри компонента dagger?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Таким способом ты можешь сказать даггеру, что этот сабкомпонент будет сабом именно к конкретному (или нескольким) компонентам. Это может быть полезно, если ты его(или его фабрику/билдер) хочешь не получать руками из компонента, а заинжектить.
    Например:
    @SubComponent
    interface MySubComponent{
    ...
    }
    
    @Module(subcomponents=[MySubComponent::class])
    interface SubcomponentsModule
    
    @Component(modules=[SubcomponentsModule::class])
    interface MyComponent{
      fun inject(what: MyClass)
    }
    
    class MyClass{
      @Inject 
      lateinit var subcomponent:. MySubComponent
    
      fun inject (){
        // Инжектим с помощью MyComponent
      }


    В этом случае не нужно в интерфейсе компонента писать функцию, возвращающую сабкомпонент.
    А если ты хочешь писать такую функцию, и дергать её руками непосредственно из компонента, то в модуле можно не перечислять.
    Ответ написан
  • Как правильно обернуть работу с REST API и базой данных Room в потоки?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Retrofit сам ходит в сеть на бекграунде, в сеть тебе система не даст сходить на ui thread.
    Насчёт room - похоже, что он тоже не разрешает ходить в себя с ui thread, во всяком случае в интернетах так пишут. Сам с ним не работал, так что это не точно.
    Обратить внимание на RxJava или Kotlin coroutines.
    Ответ написан
    Комментировать
  • Как выполнить скомпилированный Java класс на Android?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Мне кажется, стоит не запариваться, а взять AIDE. Там можно билдить/запускать и джаву, и андроидные приложения, и С++ до кучи.
    Ответ написан
    Комментировать
  • Как менять по свайпу уже открытый activity listview?

    zagayevskiy
    @zagayevskiy Куратор тега Java
    Android developer at Yandex
    Да можно, конечно. Нужно код для этого написать. Использовать ViewPager или RecyclerView + LinearLayoutManager(horizontal). В нем показывать в качестве страницы твою вьюху с камерой.
    Открывать отдельную активити для этого вообще не нужно, надо использовать фрагменты(Fragment).
    Использовать ListView тоже не нужно, нужно использовать RecyclerView + LinearLayoutManager(vertical).
    Ответ написан
    1 комментарий