Страницы

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

воскресенье, 12 мая 2019 г.

Toolbar + кнопки + стрелка “назад” + менюшка в правом углу - как?

Не могу найти пример как же создать простую активити с toolbar наверху и поместить туда мои кнопки типа обновить, выполнить http запрос и еще парочку каких-нибудь.
То есть, не только стандартные кнопки, но и/или кастомные тоже. И кнопка меню в правом углу. И еще стрелка "Назад" в этом же toolbar
Как сделать это?


Ответ

Вот простые примеры, сейчас появился отдельный компонент toolbar вместо ActionBarActivity теперь AppCompatActivity. Для дополнительных кнопок
http://habrahabr.ru/post/256643/
http://developer.android.com/intl/ru/guide/topics/ui/menus.html

Безопасно ли сравнивать переменные с присвоенными значениями константы между собой?

Есть код:
const double Pi = 3.14; double a = Pi; double b = Pi;
кода типа:
double x = 3.; double b = (4.0 - x) * Pi;
в программе быть не может, т.е. всегда идет присваивание var = Pi
Корректно ли в этом (и только в этом) случае сравнивать a == b?
Чуть добавлю. Присвение константы в программе может выглядеть примерно так:
double b = some_expression; if (b < Pi + epsilon && Pi - epsilon < b) b = Pi;
И никак иначе.
П.С. Использвание числа, похожего на математическое "пи" - только для примера, к реальности отношения не имеет.
Попробуем сформулировать вопрос более широко. Есть две строки кода, идущие подряд.
double x = some_value; double y = x; // not double y = some_expression_that_equal_to_x;
Типы x, y одинаковые, это важно. Гарантированно ли одинаковое двоичное представление x и y?


Ответ

Ответ на более "широкий" вопрос. Да, одинаковое двоичное представление гарантировано. Без вариантов. В противном случае (помимо просто абсурдности) были бы возможны всякие интересные штуки например, при:
double a = 3.14;
операция
a = a;
меняла бы двоичное представление a

Окно ввода логина/пароля в WPF

В моей программе на WPF я использую библиотеку MahAps.Metro и при запуске программы я хочу отображать диалоговое окно, где можно будет ввести логин/пароль.
Но выдает ошибку System.InvalidOperationException. Не пойму, в чем дело. Может потому что метод, отображающий окно, в конструкторе вызываю?
public MainWindow() // Конструктор { InitializeComponent(); LogIn(); }
private async void LogIn() { LoginDialogData result = await this.ShowLoginAsync("Authentication", "Enter your credentials", new LoginDialogSettings { ColorScheme = this.MetroDialogOptions.ColorScheme, InitialUsername = "MahApps" }); }
У меня есть код, обрабатывающий нажатие кнопки. При нажатии возникает диалоговое окно, где можно вести логин/пароль. Внутри обработчика нажатия на копку все работает, но если этот код скопировать в метод выше, то опять будет та же ошибка...
private async void buttonLogOut_Click(object sender, RoutedEventArgs e) { var title = "Enter your credentials"; var settings = new LoginDialogSettings { ColorScheme = MetroDialogOptions.ColorScheme }; while (true) { var result = await this.ShowLoginAsync("Authentication", title, settings); if (result.Username == "dima" && result.Password == "123456") break; title = "Wrong data, try again"; } }


Ответ

Исходя из сообщения об ошибке, нужно запускать LogIn после загрузки окна:
public MainWindow() // Конструктор { InitializeComponent(); Loaded += (o, args) => LogIn(); }

Почему не обновляется статистика в Google Play Developer Console?

Почему не обновляется статистика в Google Play Developer Console? Опубликовал приложение 29 октября.


Ответ

Постоянные задержки с обновлением данных - норма. Задержки бывают вплоть до нескольких дней. Единственное, что остаётся - ждать.

Можно ли запустить Genymotion и Android Studio на разных машинах?

В целях быстродействия, хотелось бы запустить эмулятор и студию на разных машинах, возможно ли это ?


Ответ

Да возможно. Genymotion все равно работает в виртуальной машине Oracle VM так что ему без разницы, а отладчику надо указать куда коннектиться.
Со стороны студии придется врукопашную запускать ADB с указанием IP адреса где запущен GenyMotion:
adb tcpip 5555 //говорим adb чтобы перешел в режим TCP/IP на порту 5555 adb connect 192.168.X.Y //коннектимся к хосту где запущен эмулятор
По идее должно сработать.

Как подключиться к веб ресурсу из андроид приложения?

Дали тестовое задание : разработать андроид-приложение, которое будет подключаться к новостному ресурсу (ria.ru) и закачивать в кэш оттуда данные. Я относительный новичок в программировании и знаком только с Java SE. Пытался гуглить по направлению веб сервисов для андроид но ничего не смог найти.
Дайте пожалуйста совет, что конкретно нужно искать чтобы наладить такое взаимодействие между приложением и веб ресурсом? Какие технологии можно/нужно для этого использовать?
Спасибо!


Ответ

URL url = new URL("http://ria.ru"); BufferedReader br = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
String tmp; StringBuilder sb = new StringBuilder();
while((tmp = br.readLine()) != null) sb.append(tmp);
String html = sb.toString();
Потом можно с помощью regex вытащить данные из html.

Как отцентрировать изображения Owl Carousel?

Есть карусель с изображениями различного размера. Как их отцентрировать внутри карусели? У меня не получается...
UPD. Отцентрировать и по вертикали, и по горизонтали.
http://jsfiddle.net/8bJUc/524/
$(document).ready(function() { $("#owl-demo").owlCarousel({ navigation: true, pagination: true, lazyLoad: true }); }); @import url('//cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.css'); @import url('//cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.theme.css'); #owl-demo .owl-item > div { padding: 0px 2px; display: table; } #owl-demo .owl-item > div img { display: block; width: 100%; display: table-cell; vertical-align: middle; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; margin-bottom: 4px; }



Ответ

Owl Carousel создаёт дополнительные блоки внутри вашей вёрстки. Поэтому, чтобы правильно добавить CSS свойства, надо работать вот с такой структурой:


То есть, таблицей делаем .owl-wrapper, а ячейками — .owl-item И на все элементы карусель навешивает атрибут style. Например, у блока с классом .owl-wrapper там прописывается display: block;. Поэтому в своих стилях приходится добавить !important Чтобы сработало вертикальное центрирование по ячейкам таблицы, нужно перебить им свойство float Ну а для горизонтального центрирования достаточно text-align: center;
Приятно, что в этом решении высота карусели не скачет, когда самая высокая картинка уезжает за пределы экрана. Проверьте результат:
http://jsfiddle.net/glebkema/yqfwzkL0/
$(document).ready(function() { $("#owl-demo").owlCarousel({ navigation: true, pagination: true, lazyLoad: true }); }); @import url('//cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.carousel.css'); @import url('//cdnjs.cloudflare.com/ajax/libs/owl-carousel/1.3.3/owl.theme.css'); #owl-demo .owl-wrapper { display: table !important; margin-bottom: 4px; padding: 0px 2px; } #owl-demo .owl-item { display: table-cell; float: none; vertical-align: middle; } #owl-demo .owl-item > div { text-align: center; } #owl-demo .owl-item img { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; }