Установка composer2 в Ubuntu 20.4
1 2 3 4 |
wget https://getcomposer.org/installer --no-check-certificate -O "composer-setup.php" php composer-setup.php chmod -c 777 * sudo mv composer.phar /usr/bin/composer |
1 2 3 4 |
wget https://getcomposer.org/installer --no-check-certificate -O "composer-setup.php" php composer-setup.php chmod -c 777 * sudo mv composer.phar /usr/bin/composer |
Хорошим тоном считается при запуске приложения если нужны какие-то разрешения, предварительно рассказывать, зачем они собственно приложению нужны. Реализовать это можно например вот так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
if (ContextCompat.checkSelfPermission(mycontext, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setTitle("Местоположение"); builder.setMessage("Для того чтобы приложение правильно рассчитывало расстояние до ЭЗС вам нужно предоставить доступ к геолокации. Разрешить доступ?").setCancelable(true).setPositiveButton("Да, разрешить", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { checkPermission(Manifest.permission.ACCESS_FINE_LOCATION, 100); checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION, 101); checkPermission(Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS, 102); StartInterface(); } }) .setNegativeButton("Нет,запретить", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { StartInterface(); } }); AlertDialog alert = builder.create(); alert.show(); } else { StartInterface(); }; |
Проблема: при холодном старте приложения, возникает «белый экран». Не очень красиво выглядит. Чаще всего это возникает когда в стартующеё активити, в onCreate очень много всего положено. И не всегда можно от туда это всё вынять.
Решение: в основной стиль приложения добавим строчку, которая фоном установит картинку вместо «белого экрана»:
1 2 3 |
<item name="android:windowBackground">@drawable/welcome_android</item> <item name="android:windowFullscreen">true</item> |
Проблема обнаруживается в webview приложений на android. А именно, если где-то в коде есть radiobutton обёрнутый чем угодно, то при клике по нему, кратковременно (на долю секунды) выделяется вся строчка целиком.
Решение: достаточно добавить в стилевое оформление этого элемента cursor:default
Update: достаточно применить к body -webkit-tap-highlight-color: rgba(255, 255, 255, 0);
Задача: нарисовать нечто подобное
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
var days_week = [ 'Жуть', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота', 'Воскресенье', ]; var month_names=[ "", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" ]; function GetDayWork(year,month,day){ dayw=new Date(year, month-1, day).getDay(); if (dayw==0) return 7; return dayw; }; function ReturnToBookingPanel(){ $(".DateTimePickerForBooking").hide(); $(".booking-now").show(); }; function GetLastNextCal(month,year,next){ month=month+next; if (month==0){month=12;year--;} if (month==13){month=1;year++;} PaintBookingMonth(month,year); }; function PaintBookingMonth(month,year){ cal_html=''; cal_html=cal_html+'<div class="calendar_row calendar_row-head">'; cal_html=cal_html+' <div class="calendar_head-date">'+month_names[month]+' <span>'+year+'</span></div>'; cal_html=cal_html+' <div class="calendar_row-head-arrows">'; cal_html=cal_html+' <div class="arrow arrow-prev" onclick="GetLastNextCal('+month+','+year+',-1)">'; cal_html=cal_html+' <img src="/img/arr_cal_l.svg">'; cal_html=cal_html+' </div>'; cal_html=cal_html+' <div class="arrow arrow-next" onclick="GetLastNextCal('+month+','+year+',1)">'; cal_html=cal_html+' <img src="/img/arr_cal_r.svg">'; cal_html=cal_html+' </div>'; cal_html=cal_html+' </div>'; cal_html=cal_html+'</div>'; cal_html=cal_html+'<div class="calendar_row calendar_row-weekdays">'; cal_html=cal_html+' <div class="item">Пн</div>'; cal_html=cal_html+' <div class="item">Вт</div>'; cal_html=cal_html+' <div class="item">Ср</div>'; cal_html=cal_html+' <div class="item">Чт</div>'; cal_html=cal_html+' <div class="item">Пт</div>'; cal_html=cal_html+' <div class="item">Сб</div>'; cal_html=cal_html+' <div class="item">Вс</div>'; cal_html=cal_html+'</div>'; days = new Date(year, month, 0).getDate() console.log("Дней в месяце:",days); // рисуем, пока не кончатся дни day=1; while (day<=days) { cal_html=cal_html+'<div class="calendar_row">'; for(let dayw = 1; dayw <= 7; dayw++) { if (GetDayWork(year, month, day)==dayw){ if (day>days){ console.log("- пропуск"); cal_html=cal_html+'<div class="item"></div>'; } else { console.log(day); available="available"; selected=""; if (month<(new Date().getMonth()+1)) available=""; //если месяц меньше чем текущий if (month==(new Date().getMonth()+1)){ if (day<new Date().getDate()) available=""; if (day==new Date().getDate()) selected="selected today"; }; cal_html=cal_html+'<div id="day_'+year+'_'+month+'_'+day+'" onclick="ChangeDataForBooking('+year+','+month+','+day+')" class="item '+available+' '+selected+'" data-date="'+year+'-'+month+'-'+day+'">'+day+'</div>'; }; day++; } else { console.log("- пропуск"); cal_html=cal_html+'<div class="item"></div>'; }; }; cal_html=cal_html+'</div>'; }; cal_html=cal_html+'<div class="booking_date-current_date">'; cal_html=cal_html+' Пятница <span>21.01.2022 январь</span>'; cal_html=cal_html+'</div>'; $(".booking_date-wrapper").html(cal_html); }; function ChangeDataForBooking(year,month,day){ console.log("!ChangeDataForBooking",year,month,day); if ($('#day_'+year+'_'+month+'_'+day).hasClass("available")){ $(".item").removeClass("selected"); $('#day_'+year+'_'+month+'_'+day).addClass("selected"); }; }; |