• Как в layer-list изменить цвет вектора?

    @lacredin Автор вопроса
    Программист
    Как изменить цвет из layer-list я не нашёл, но для меня подошёл другой метод.

    В векторный файл я добавил android:colorTint, который ссылался на файл drawable с цветами для разных состояний кнопки.

    Вот так теперь выглядит код векторного файла
    <vector android:height="48dp" android:viewportHeight="24.0"
          android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android"
          android:tint="@drawable/color_state_toggle_rich_edit_text"
    >
    <path android:fillColor="#FF000000"
        android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
     </vector>

    Вот так выглядит код файла с цветами (drawable/color_state_toggle_rich_edit_text.xml)
    <?xml version="1.0" encoding="utf-8"?>
    <selector
        xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_checked="true"
        android:color="@android:color/black"
        />
    <item
        android:state_checked="false"
        android:color="@color/color_toggle_button"/>

    Решение нашёл на этом форуме

    stackoverflow.com/questions/43847170/android-how-t...
    Ответ написан
    Комментировать
  • Как избавиться дублирования кода в разных активити?

    Можно решить эту проблему с помощью ViewStub:
    <ViewStub
        android:id="@+id/lazy_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    И в зависимости от Activity, инфлейтишь необходимый layout:
    ViewStub lazyLayout = (ViewStub) findViewById(R.id.lazy_layout);
    lazyLayout.setLayoutResource(R.layout.main_activity_body); // Либо R.layout.second_activity_body
    lazyLayout.inflate();
    Ответ написан
    Комментировать
  • Может ли нанятый разработчик моб. приложения угнать идею?

    @GreatRash
    Чо вы прицепились к разработчику? Что мешает угнать идею например пользователю?
    Ответ написан
    Комментировать
  • После кождого поворота приложение начинает тормозить всё сильнее, как быть?

    Установи LeakCanary и добавь все фрагменты в RefWatcher по инструкции. Ты увидишь все утечки и чем они вызваны. Причины могут быть разные.
    Ответ написан
    8 комментариев
  • Как правильно передавать пароль?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Очень много ошибок!

    1. При регистрации - никогда не отправляется пароль в чистом виде на сервер! Он вначале хэшируется, затем шифруются все регистрационные данные с использованием открытого ключа сервера внутри приложения, подписывается этим ключом и только после этого всё отправляется на сервер. Сервер - никогда не должен знать пароля. Он должен иметь возможность лишь проверять сам факт совпадения подписанных данных авторизации! Т.е. два поля: логин и hash на основе различных данных, включая публичный ключ: логин+пасс+...+...

    2. Авторизация - CRAM-MD5 (Challenge-Response), используем ту же механику что и в CRAM-MD5, только хешируем более стойким алгоритмом и.. ВНИМАНИЕ! подписываем открытым ключом. И только после этого - отсылаем серверу на проверку. В случае успеха - получаем TOKEN сессии от сервера.

    3. Общение/обмен данными - формируем json, шифруем эти данные с помощью открытого ключа, подписываем (формируем hash для передаваемого серверу сообщения) на основе следующих данных: выданный сервером TOKEN, TIMESTAMP и RANDOM. Добавляем в "хвост" шифрованные TIMESTAMP (время) и RANDOM(случайная строка). Это нужно для предотвращения повторных запросов задним числом.

    подробнее
    Ответ написан
    2 комментария
  • При переходе обратно во фрагмент ошибка, как исправить?

    Исправьте проверку:

    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
    ...
    Ответ написан
    Комментировать
  • Зачем нужен Dependency Injection в Android разработке?

    artemgapchenko
    @artemgapchenko
    Начать неплохо бы с понимания того, что такое DI. Обратимся к википедии:

    Внедрение зависимости (англ. Dependency injection, DI) — процесс предоставления внешней зависимости программному компоненту.

    Если выражаться не канцеляритом, а обычным русским языком, то DI - это когда вы своему компоненту (например, классу) предоставляете нужные для него зависимости извне, а не создаете их сами в конструкторе, или через инициализацию в месте объявления поля. То есть не так:

    public class Api {
    	....
    	private final HttpClient client = new OkClient();
    }

    А, например, так:

    public class Api {
    	....
    	private final HttpClient client;
    
    	public Api(@NonNull HttpClient client) {
    		this.client = client;
    	}
    }


    И что нам это даёт?

    Ну, очевидно, нам теперь проще менять зависимости. Нужна вам другая реализация абстрактного класса HttpClient - взяли, и передали её через конструктор, или через метод-setter. В случае с первым куском кода, вам пришлось бы ещё и класс Api переписывать, что в случаях, отличных от тривиальных, может привести к ошибкам. Получается, что ваш класс теперь закрыт от изменений (смотрим Open/Closed Principle).

    Окей, а на практике-то какие бенефиты?

    Во-первых, вы теперь можете написать инициализацию вашей программы через конфигурационные файлы. Скажем, на старте будет читаться простенький текстовый файл, который определяет, какой httpclient использовать, какие настройки доступа к бд применять и так далее, и, исходя из этого, будут определяться зависимости.
    Во-вторых, вам теперь существенно проще писать тесты. Написали вы, скажем, какой-нибудь парсер, который принимает InputStream, содержащий в себе данные json-объекта, как-то хитро его парсит, и выдаёт вам объект вашей бизнес-модели. В приложении этот парсер будет принимать на вход реализацию InputStream'а, которая берёт данные из сети, а в тестах - реализацию, которая просто читает файл с диска (потому что тесты должны выполняться часто и быстро, и ваша задача в тесте - протестировать ваш парсер, а не скорость сетевого соединения).

    Вот, в общем-то, и всё. А Dagger - это просто библиотека, которая автоматизирует ручное внедрение зависимостей, равно как и другие DI-библиотеки.

    P.S. В некоторых случаях чрезмерное увлечение DI может привести к нежелательным эффектам, вроде чрезмерного усложнения кода, поэтому внедряйте аккуратно. Понимание приходит с опытом.
    Ответ написан
    Комментировать
  • Стоит ли продолжать изучать Android develop?

    @VictKor
    Игровая индустрия, 3d моделирование
    Это как про неминуемую смерть флеша, о которой вопили все кому не лень уже лет пять назад :) Хотя игр вышло на нем с той поры - мама не горюй

    Используйте те инструменты/возможности, что сейчас имеются. Не ждите новых, а то рискуете потерять время.
    Ответ написан
    2 комментария
  • Стоит ли продолжать изучать Android develop?

    artemgapchenko
    @artemgapchenko
    Здравствуйте, как многие знают, Google готовит замену Android

    Откуда вы всё это берёте? Есть проект на Гитхабе с таким вот README:

    Pink + Purple == Fuchsia (a new Operating System)

    Всё. Ни про замену Android, ни про предназначение проекта ничего не сказано. К проекту подключено 3 (три) человека, развивается он без году неделя, никаких официальных анонсов не было.
    Прекращайте читать советские газеты перед обедом и вместо первоисточников и не занимайтесь домыслами того, чего нет. Изучайте Android и выбросите Фуксию из головы на ближайшие года два, пока не станет понятно, что это такое и кому это нужно.
    Ответ написан
    Комментировать
  • Что должен предоставить дизайнер android-разработчику кроме самого макета?

    lavezzi1
    @lavezzi1
    Assets конечно. То есть нарезанную графику если такая присутствует. Иконки, логотипы и все такое. Под разную плотность экрана конечно.
    Ответ написан
    1 комментарий
  • Какой минимум знаний необходим и желателен на данный момент для Junior Android Developer для работы и фриланса?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    "И бонусный вопрос: сколько времени в среднем потребуется для самостоятельного изучения этого минимума адекватному человеку? "

    Адекватному человеку в среднем понадобится 10-20 минут, чтобы самостоятельно найти эту информацию в гугле, например поискав джуниорские задачи на биржах, и немного почитав википедию о требуемых технологиях.

    Адекватность и скорость усвоения материала не связаны - скорость усвоения больше связана с уже имеющимся бэкграундом, не обязательно в программировании, общая эрудиция очень помогает осваивать новые понятия, если есть абстрактные и уже известные примеры.
    Ответ написан
    4 комментария
  • Чем сфера применения Angular JS отличается от JQuery?

    @sergeystepanov1988
    AngularJS:
    • фреймворк
    • предназначен для создания SPA (single page application)


    jQuery:
    • библиотека
    • предназначена для более удобной и кроссбраузерной работы с DOM и AJAX.

    Разницу между библиотекой и фреймворком объяснять нужно?
    Ответ написан
  • Какое железо выбрать для разработки под Google Android?

    @FoxInSox
    Ноутбук с i5/i7, SSD диском и 16 Гигабайтами памяти. Остальное пофиг, в том числе ОС.
    Ответ написан
    3 комментария
  • MVP в Android'е со сложным интерфейсом из нескольких фрагментов. Как лучше скоординировать?

    @KonstantinKiriushyn
    Android Dev
    По best practices взаимодействие двух фрагментов организовывается через Activity, которое их хостит.
    Среди предложенных вариантов мне больше всего мне нравится вариант 3.
    В рамках задачи я бы сделал Activity = MasterView, и общался бы Presenter'ом c Activity. Далее Activity служило бы Mediator'om и неким координатором для фрагментов.

    НО.

    Предлагаю рассмотреть схему с двумя Presenter'ами. Первый отвечает за загрузку списка маркером и работает с MyListFragment, второй за работу с картой и привязан к MyMapFragment.
    А медиатором все так же является Activity с интерфейсами.

    2f22433a5e2840f5b78bb17638a9acb0.png

    Как это будет работать? (внешний код опущен)

    MyListFragment:
    //MapInterface реализует Activity для взаимодействия между фрагментами.
    mMapInterface.onMarkerSelected(marker);


    Activity:
    public void onMarkerSelected(Marker marker) {
          mMapFragment.selectMarker(marker);
    }


    MapFragment:
    public void selectMarker(Marker marker) {
           //например грузим информацию по маркеру
          mMapPresenter.loadMarkerInfo(marker, someCallback).
          //или просто производим манипуляции со View.
    }


    Также:
    Если же операции, выполняемые с Моделью одинаковые, то можно обойтись один презентером, но все равно он будет дергаться из Фрагментов. Потому что, раз мы говорим о хорошем дизайне, в случае дальнейшего усложенения логики Фрагментов, лучше чтоб каждый хостил свой Презентер.

    С удовольствием подискутирую на тему.
    Спасибо!
    Ответ написан
    Комментировать
  • Как реализовать смену текста при переходе на другую активность?

    localhostEU
    @localhostEU
    @Override
        public void onClick(View view) {
    
            Intent intent = new Intent(this, SecondActivity.class);
            switch(view.getId()){
                case(R.id.btn1):
                    intent.putExtra(EXTRA_MESSAGE, getResources().getString(R.string.tx_1));
                    startActivity(intent);
                    break;
                case(R.id.btn2):
                    intent.putExtra(EXTRA_MESSAGE, getResources().getString(R.string.tx_2));
                    startActivity(intent);
                    break;
    
            }
        }


    Все остальное как в туториале от гугл.
    Ответ написан
    Комментировать