Перейти к содержанию
Fire Monkey от А до Я

Satellite

Пользователи
  • Постов

    52
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент Satellite

  1. Скачать отдельно SDK, можно обновить при необходимости. При установке Seattle установить только NDK (пути оставить по умолчанию). У кого стоит уже Seattle и NDK можно пропустить. Прописать путь к новому SDK как у меня в настройках Android. По желанию можно поставить JDK той же версии, как и у меня.
  2. Исправление проблемы с обновлением бара на Android 5.1: В настройках проекта выбираем No TitleBar: Project -> Options -> Version Info -> Theme: No TitleBar. Код события Onresize необходимо переместить в конец Onshow, т.к. в Onresize перестанет возвращаться высота бара. D: После выполнения этих действий, должно работать нормально на любом устройстве.
  3. if (TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_BACK)) and (TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_MENU)) then Всё равно значение true передаётся, но navigationbar'a помине нет в системе.
  4. Мне понравился укороченный вариант, ведь можно реализовать его следующим образом: To determine the presence of a hardware keys, this method is the easiest: . . uses Androidapi.KeyCodes, Androidapi.JNI.GraphicsContentViewText, . . TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_BACK) //To detect hardware BACK TJKeyCharacterMap.JavaClass.deviceHasKey(AKEYCODE_MENU) //To detect hardware MENU . . Result for deviceHasKey is Boolean. All keycode constants can be found in unit Androidapi.KeyCodes. Источник З.Ы. Остаётся лишь написать проверку и тестить.
  5. Встречал одно независимое решение: Ищем разницу между realSize.y и screenSize.y, сравниваем разницу с высотой navigationbar'a. Если (difference == navBarHeight), то navigationbar в системе есть. @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) public boolean hasNavBar(Context context) { Point realSize = new Point(); Point screenSize = new Point(); boolean hasNavBar = false; DisplayMetrics metrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); realSize.x = metrics.widthPixels; realSize.y = metrics.heightPixels; getWindowManager().getDefaultDisplay().getSize(screenSize); if (realSize.y != screenSize.y) { int difference = realSize.y - screenSize.y; int navBarHeight = 0; Resources resources = context.getResources(); int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { navBarHeight = resources.getDimensionPixelSize(resourceId); } if (navBarHeight != 0) { if (difference == navBarHeight) { hasNavBar = true; } } } return hasNavBar; } Источник
  6. Проверил чисто с Window.addFlags, проблема на месте. Также пробовал и с Window.addFlags, и с Window.setFlags вместе. З.Ы.: Также меня интересует, какое значение возвращается с getIdentifier (resourceID) на nexus? По идеи должно вернуть 17956965. Просто на Android 5.1, getBoolean(resourceID) возвращает true.
  7. Sony Xperia XA (Android 6.0), на нём и проблемки. Всё прекрасно работает с проверкой значения config_showNavigationBar, правда на Android 5.1 проблема с обновлением (только после смены ориентации экрана - закрашивается статус-бар).
  8. if not TJKeyCharacterMap.JavaClass.deviceHasKey(TJKeyEvent.JavaClass.KEYCODE_BACK) then Хотелось бы уточнить по данной проверке, ведь она не на всех смартфонах срабатывает. Да и вообще нет надежного способа проверить есть ли navigationbar. На Android 5.1 (без navigationbar), c аппаратными кнопками, условие if not работает, бар не показывается, потому что его нет, но на Android 6.0 (с navigationbar), без аппаратный кнопок, это условие уже не работает, navigationbar не заливается, хотя он есть в системе. Если изменить проверку на if (без not), на Android 6.0 navigationbar заливается, однако, navigationbar становится виден и на Android 5.1 (если обновить форму), хотя в системе он не поддерживается (естественно, потому что проверка не верна). Можно попробовать проверять значение config_showNavigationBar, что-то вроде этого: resourceID:=TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('config_showNavigationBar'), StringToJString('bool'), StringToJString('android')); Строка возвращает следующий набор значений: Значение: "17956965" если navigationbar есть, "17956955", если его нет. Как можно сконвертировать в привычные 0 или 1?
  9. Возможно ли вывести 9-patch в Timage? Если нет, то куда можно импортировать изображение такого формата?
  10. Имеется стандартный код вывода уведомления в потоке: procedure TMyThread.Execute; var MyNotification: TNotification; begin MyNotification := NotificationsForm.NotificationCenter1.CreateNotification; try MyNotification.Name := 'Windows10Notification'; MyNotification.Title := 'Windows 10 Notification #1'; MyNotification.AlertBody := 'RAD Studio 10 Seattle'; NotificationsForm.NotificationCenter1.PresentNotification(MyNotification); finally MyNotification.Free; end; end; Проблема в том, что в потоке уведомление не срабатывает. С чем это связано, и как это можно завести?
  11. Satellite

    Consume Product

    В документации следующее: Правильно-ли я понял, если у меня используется расходный материал, мне следует вызывать FInAppPurchase.ConsumeProduct(product) вместо FInAppPurchase.PurchaseProduct(product)? А дальше уже обрабатывать в FInAppPurchase.OnConsumeCompleted? Также было написано, что в качестве альтернативы, можно вызывать ConsumeProducts со списком идентификаторов продукта.: procedure ConsumeProducts; var products: TStringList; begin products := TStringList.Create; if FInAppPurchase.IsProductPurchased(product1) then products.Add(product1); if FInAppPurchase.IsProductPurchased(product2) then products.Add(product2); if FInAppPurchase.IsProductPurchased(product3) then products.Add(product3); if FInAppPurchase.IsProductPurchased(product4) then products.Add(product5); FInAppPurchase.ConsumeProducts(products); end; Тоже не совсем понятно, что даёт мне список идентификаторов продукта.
  12. Даже никакой RichEditor не нужен.
  13. У моего пользователя, смартфон на Intel® Atom™ Z2520. Сам проверить не могу, но я ему верю. (MultiPad Thunder 7.0i)
  14. Почистил, но не помогло.
  15. Видимо, всё же придется деплоить файлы в ресурсы.
  16. Деплоятся в .\assets\level\ Возможно, из-за присваивания Installlocation: preferexternal, приложение ставится в External, если система разрешает. А файлы в данном случае заливаются в External или Internal ?
  17. Можно, но мне хочется также узнать, чем вызвана текущая проблема.
  18. Прочитал данную темку. Изменил файлик FMX.Helpers.Android.pas, прикрепил к проекту и ничего не изменилось. Окно как было старым, так и осталось (Messagedlg). Может быть что-то помимо этого нужно сделать? function GetNativeTheme: Integer; var LStyleDescriptor: TStyleDescription; begin Result := 0; if not IsGingerbreadDevice and (Screen <> nil) and (Screen.ActiveForm <> nil) and (Screen.ActiveForm.StyleBook <> nil) then begin LStyleDescriptor := TStyleManager.FindStyleDescriptor(Screen.ActiveForm.StyleBook.Style); // the original code -->GetThemeFromDescriptor(LStyleDescriptor); // the next line has the modified code to set the result Result := GetThemeFromDescriptor(LStyleDescriptor); end; end; function GetNativeTheme(const AControl: TControl): Integer; var LStyleDescriptor: TStyleDescription; begin Result := 0; if not IsGingerbreadDevice then begin LStyleDescriptor := TStyleManager.GetStyleDescriptionForControl(AControl); // GetThemeFromDescriptor(LStyleDescriptor); Result := GetThemeFromDescriptor(LStyleDescriptor); // <--here the result assignment was missing end; end; Окно должно стать таким:
  19. m.LoadFromFile(TPath.GetSharedDocumentsPath + '/level/' + inttostr(x) + '.' + PictExt); Загружается файл вот таким образом, загружается нормально, но на некоторых устройствах: Lenovo S820, Lenovo A516, Explay Fresh, да и возможно многих других, пишет: "File not found". Мне кажется, пользователь, либо принудительно установил приложение в External, либо внутренний путь чем-то отличается, откуда и возникает ошибка. В чём может быть казус данной проблемы?
  20. Где вы это прочитали? XE8 поддерживает некоторые устройства на Android 2.3. Но замечу, поддерживать версии ниже 4.0 я не вижу смысла, поэтому рекомендую использовать API не ниже 14. Приведу пример, устройства, работающие на 2.3-3.x очень слабые, Firemonkey весьма много требует, и на некоторых устройствах, чтобы запустить приложение, просто навсего не хватает мощности/оперативки. Отсюда пойдут гневные отзывы, плохие оценки, что весьма не радужно. Пишу в основном в Android Studio, там можно себе позволить такое.
×
×
  • Создать...