Hi to All,
I'm looking for solution of my problem with missing font on buttons and labels.
App is very simple. There are two labels to display number from 0 to 50000.
Second label is displaying calculated data according to data sheet of weighing errors.
Then are few buttons:
- numbers 0 to 9
- exit button
All buttons and labels are defined manually, without using designer.
I done this, to have autoscalling for different screens.
If I create screen on designer, compile and run on phone - all text are visible.
When I created the app, my phone was running on Android 4.4.
When system is updated via OTA from 4.4 to 5.1- app is working properly.
When apk file is installed on Android 5 and above, all texts on labels and buttons are missing.
Version of B4A is 3.8
SDK manager is up to date.
In attached files are pictures showing the app.
Here is complete code:
Many thanks for any reply and help.
I'm looking for solution of my problem with missing font on buttons and labels.
App is very simple. There are two labels to display number from 0 to 50000.
Second label is displaying calculated data according to data sheet of weighing errors.
Then are few buttons:
- numbers 0 to 9
- exit button
All buttons and labels are defined manually, without using designer.
I done this, to have autoscalling for different screens.
If I create screen on designer, compile and run on phone - all text are visible.
When I created the app, my phone was running on Android 4.4.
When system is updated via OTA from 4.4 to 5.1- app is working properly.
When apk file is installed on Android 5 and above, all texts on labels and buttons are missing.
Version of B4A is 3.8
SDK manager is up to date.
In attached files are pictures showing the app.
Here is complete code:
B4X:
#Region Project Attributes
#ApplicationLabel: Standard deviation
#FullScreen: False
#IncludeTitle: False
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait
#CanInstallToExternalStorage: True
#End Region
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim Timer1 As Timer 'tutaj wykorzystujemy timer do odliczania zadango czasu, ponizej jest konfiguracja
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim pierwsza_leg As Label 'tutaj wyswietlam odch std, dla pierwszej legalizacji
Dim ponowna_leg As Label 'tutaj wyswietlam odch std, dla ponownej legalizacji
'Dim waga_opakowania As EditText 'pole do wprowadzenia wagi
Dim do_ustawienia_koloru As ColorDrawable
Dim dop_odch_std_pierwsze As Float
'Dim dop_odch_std_kolejne As Float
Dim quit As Button'deklaracja przyciskow
Dim padding As Float 'zmienna do ustawiania wielkosci tekstu
Dim dens As Float 'tutaj wpisywana jest wielkosc gestosci ekranu
' zmienne potrzebne do obslugi klawiatury ekranowej
Dim klawisz_1, klawisz_2, klawisz_3, klawisz_4, klawisz_5 As Button
Dim klawisz_6, klawisz_7, klawisz_8, klawisz_9, klawisz_0 As Button
Dim klawisz_zeruj As Button
Dim klawisze() As Button
Dim licznik_cyfry As Byte
Dim cala_liczba As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
' tutaj jest start aplikacji, odpowiednik formload z VB
' Activity.LoadLayout("ekran")'zaladowanie ekranu z designera
'potrzebne do poprawnej inicjalizacji
klawisze = Array As Button(klawisz_1, klawisz_2, klawisz_3, klawisz_4, klawisz_5, klawisz_6, klawisz_7, klawisz_8, klawisz_9, klawisz_0, klawisz_zeruj)
'inicjalizacja klawiszy w petli, dodawanie widokow
For licznik_cyfry = 0 To 10
klawisze(licznik_cyfry).Initialize("klawisze")
Activity.AddView(klawisze(licznik_cyfry), 1dip, 1dip, 1dip, 1dip)
Next
pierwsza_leg.Initialize("pierwsza_leg"):ponowna_leg.Initialize("ponowna_leg")
'waga_opakowania.Initialize("waga_opakowania")
quit.Initialize("quit")
Activity.AddView(pierwsza_leg, 1dip, 1dip, 1dip, 1dip) : Activity.AddView(ponowna_leg, 1dip, 1dip, 1dip, 1dip)
Activity.AddView(quit, 1dip, 1dip, 1dip, 1dip)'Activity.AddView(waga_opakowania, 1dip, 1dip, 1dip, 1dip)
' Tutaj poniższy kod ustawia kolory dla danego elementu na ekranie
do_ustawienia_koloru.Initialize(Colors.Gray, 5dip)
pierwsza_leg.Background = do_ustawienia_koloru
pierwsza_leg.TextColor=Colors.RGB(100,0,0)
do_ustawienia_koloru.Initialize(Colors.Gray, 5dip)
ponowna_leg.Background = do_ustawienia_koloru
ponowna_leg.TextColor=Colors.RGB(0,100,0)
' Poniższy kod ustawia jakies tlo dla knefla i kolor napisu
' do_ustawienia_koloru.Initialize(Colors.black, 10dip)
do_ustawienia_koloru.Initialize(Colors.Transparent, 5dip)
quit.Text = "Close program"
quit.Background = do_ustawienia_koloru
do_ustawienia_koloru.Initialize(Colors.Red, 5dip)
quit.TextColor= Colors.RGB(100,0,0)'do_ustawienia_koloru
quit.Typeface = Typeface.SANS_SERIF
'ustawienie koloru dla klawiszy
do_ustawienia_koloru.Initialize(Colors.Green, 5dip)'kolor i zaokraglenie rogow
For licznik_cyfry = 0 To 10
klawisze(licznik_cyfry).Background = do_ustawienia_koloru
klawisze(licznik_cyfry).TextColor = Colors.Black
klawisze(licznik_cyfry).Tag = licznik_cyfry + 1
klawisze(licznik_cyfry).Text = licznik_cyfry + 1
Next
klawisze(9).Text = "0" : klawisze(9).Tag = 0
klawisze(10).Text = "Clear" : klawisze(10).Tag = 11
' Tworzy cos na wzor timerka w VB6
'tutaj sprawdza pole wpisywania wagi - okresla czas kiedy ma sie odbyc sprawdzanie
Timer1.Initialize("Timer1", 250) ' 1000 = 1 second
Timer1.Enabled = True
dens = Density
If dens = 3 Then
padding = 3
End If
If dens = 1.5 Then
padding = 2
End If
If dens = 1 Then
padding = 1.7
End If
' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
'Do ustawiania wielkości użyto znaczników procentowych z wysokości i szerokości
'eliminuje to tworzenie w designerze osobnych layoutów
'Ustawienie wysokości obiektu
pierwsza_leg.Height = 8%y'wysokosc obiektu
ponowna_leg.Height = 8%y'wysokosc obiektu
' waga_opakowania.Height = 10%y
quit.Height = 10%y
' ustalenie wysokosci knefla
For licznik_cyfry = 0 To 10
klawisze(licznik_cyfry).height = 15%y
Next
'Ustawienie rozmiaru tekstu w obiekcie
pierwsza_leg.TextSize = (pierwsza_leg.Height/padding)/padding'1%y'wielkosc czcionki
ponowna_leg.TextSize = (ponowna_leg.Height/padding)/padding'1%y'wielkosc czcionki
' waga_opakowania.TextSize = (waga_opakowania.Height/padding)/padding'1%y
quit.TextSize = (quit.Height/padding)/padding'1%y
'ustalenie wysokości tekstu
For licznik_cyfry = 0 To 10
klawisze(licznik_cyfry).TextSize = (klawisze(licznik_cyfry).Height/padding)/padding
Next
'Położenie obiektu względem lewej krawędzi ekranu
pierwsza_leg.Left = 1%x 'polozenie od lewej
ponowna_leg.Left = 1%x 'polozenie od lewej
' waga_opakowania.Left = 1%x
quit.Left = 1%x
'ustawienie klawiszy 1,4,7
klawisze(0).Left = 1%x
klawisze(3).Left = 1%x
klawisze(6).Left = 1%x
'ustawienie klawiszy 2,5,8,0
klawisze(1).Left = 35%x
klawisze(4).Left = 35%x
klawisze(7).Left = 35%x
klawisze(9).Left = 35%x
'ustawienie klawiszy 3,6,9,czyszczenie
klawisze(2).Left = 69%x
klawisze(5).Left = 69%x
klawisze(8).Left = 69%x
klawisze(10).Left = 69%x
'Ustawienie szerokości obiektu na ekranie
pierwsza_leg.Width = 100%x - (2 * pierwsza_leg.Left)'taki zapis ustawii zawsze obiekt na środku
ponowna_leg.Width = 100%x - (2 * ponowna_leg.Left)'ekranu, i będzie miał takie same proporcje
' waga_opakowania.Width = 48%x
quit.Width = 98%x
For licznik_cyfry = 0 To 10
klawisze(licznik_cyfry).Width = 30%x
Next
'polozenie od gory
pierwsza_leg.Top = 1%y
ponowna_leg.Top = pierwsza_leg.Top + pierwsza_leg.Height + 1%y 'polozenie od gory
' waga_opakowania.Top = ponowna_leg.Top + ponowna_leg.Height + 5%y
quit.Top = 100%y - quit.Height
'ustawienie klawiszy 1,4,7
klawisze(0).top = ponowna_leg.Top +ponowna_leg.Height + 5%x
klawisze(1).top = ponowna_leg.Top +ponowna_leg.Height + 5%x
klawisze(2).top = ponowna_leg.Top +ponowna_leg.Height + 5%x
'ustawienie klawiszy 2,5,8,0
klawisze(3).top = klawisze(0).top + klawisze(0).Height + 4%x
klawisze(4).top = klawisze(0).top + klawisze(0).Height + 4%x
klawisze(5).top = klawisze(0).top + klawisze(0).Height + 4%x
'ustawienie klawiszy 3,6,9,czyszczenie
klawisze(6).top = klawisze(3).top + klawisze(3).Height + 4%x
klawisze(7).top = klawisze(3).top + klawisze(3).Height + 4%x
klawisze(8).top = klawisze(3).top + klawisze(3).Height + 4%x
klawisze(9).top = klawisze(6).top + klawisze(6).Height + 4%x
klawisze(10).top= klawisze(6).top + klawisze(6).Height + 4%x
'polozenie tekstu w komórkach
pierwsza_leg.Gravity= Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
ponowna_leg.Gravity= Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
ponowna_leg.Typeface = Typeface.DEFAULT_BOLD
For licznik_cyfry = 0 To 10
klawisze(licznik_cyfry).Gravity= Gravity.CENTER_HORIZONTAL + Gravity.CENTER_VERTICAL
Next
licznik_cyfry =0
'ustawienie jaka klawiatura ma sie pojawic po kliknieciu pola wpisywania wagi
'waga_opakowania.InputType = waga_opakowania.INPUT_TYPE_NUMBERS
'__________________________________________________________________________
End Sub
Sub Timer1_Tick' obsługa timera, przerwania od niego
Dim wpisana_waga As Int
' w tym warunku sprawdzam czy wpisano cyfre, czy pole jest puste, inaczej sie apka wywala
If cala_liczba = "" Then
wpisana_waga = 0 ' wstawienie zera, zeby dobrze liczylo
dop_odch_std_pierwsze = 0
' dop_odch_std_kolejne = 0
Else
wpisana_waga = cala_liczba 'jest wpisana jakas liczba, wiec ja przepisujemy do wyliczen
End If
' sprawdzenie w jakim przedziale jest wpisana waga i wyliczenie odchylenia
'------- Przedział wagowy do 50GR ---------------
If wpisana_waga >= 1 AND wpisana_waga <= 50 Then
dop_odch_std_pierwsze = wpisana_waga * 0.0048
' dop_odch_std_kolejne = wpisana_waga * 0.006
End If
'----- Przedział wagowy od 51GR do 100GR ---------
If wpisana_waga >= 51 AND wpisana_waga <= 100 Then
dop_odch_std_pierwsze = 0.24
' dop_odch_std_kolejne = 0.3
End If
'----- Przedział wagowy od 101GR do 200GR ---------
If wpisana_waga >= 101 AND wpisana_waga <= 200 Then
dop_odch_std_pierwsze = wpisana_waga * 0.0024
' dop_odch_std_kolejne = wpisana_waga * 0.003
End If
'----- Przedział wagowy od 201GR do 300GR ---------
If wpisana_waga >= 201 AND wpisana_waga <= 300 Then
dop_odch_std_pierwsze = 0.48
' dop_odch_std_kolejne = 0.6
End If
'----- Przedział wagowy od 301GR do 500GR ---------
If wpisana_waga >= 301 AND wpisana_waga <= 500 Then
dop_odch_std_pierwsze = wpisana_waga * 0.0016
'dop_odch_std_kolejne = wpisana_waga * 0.002
End If
'----- Przedział wagowy od 501GR do 1000GR ---------
If wpisana_waga >= 501 AND wpisana_waga <= 1000 Then
dop_odch_std_pierwsze = 0.8
' dop_odch_std_kolejne = 1
End If
'----- Przedział wagowy od 1001GR do 10000GR ---------
If wpisana_waga >= 1001 AND wpisana_waga <= 10000 Then
dop_odch_std_pierwsze = wpisana_waga * 0.0008
' dop_odch_std_kolejne = wpisana_waga * 0.001
End If
'----- Przedział wagowy od 10001GR do 15000GR ---------
If wpisana_waga >= 10001 AND wpisana_waga <= 15000 Then
dop_odch_std_pierwsze = 8
' dop_odch_std_kolejne = 10
End If
'----- Przedział wagowy od 15001GR ---------
If wpisana_waga >= 15001 Then
dop_odch_std_pierwsze = wpisana_waga * 0.00053
' dop_odch_std_kolejne = wpisana_waga * 0.00067
End If
' Wypisanie/wyswietlenie wyliczen
' pierwsza_leg.Text = "Pierwsza legalizacja : " & NumberFormat(dop_odch_std_pierwsze,1,3) & "gr" 'formatowanie wyswietlania wyniku w formie 0.00
' ponowna_leg.Text = "Ponowna legalizacja : " & NumberFormat(dop_odch_std_kolejne,1,3) & "gr"'formatowanie wyswietlania wyniku w formie 0.00
If cala_liczba = "" Then
pierwsza_leg.Text = "Product weight : " & "0g"
Else
pierwsza_leg.Text = "Product weight : " & cala_liczba & "g"
End If
ponowna_leg.Text = "Max. std. dev.: " & NumberFormat(dop_odch_std_pierwsze,1,3) & "g" '& Chr(10) & Chr(13) & "Max. odch. std. produkcja: " & NumberFormat(dop_odch_std_kolejne,1,3) & "g"
'Handle tick events
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Quit_Click
Timer1.Enabled = False
ExitApplication
End Sub
Sub klawisze_Click
Dim wcisnieto_knefel As Button
wcisnieto_knefel = Sender
If wcisnieto_knefel.Tag = 11 Then 'jesli 10, wcisnieto czyszczenie
cala_liczba = ""
Else
cala_liczba = cala_liczba & wcisnieto_knefel.Tag
If cala_liczba > 50000 Then
cala_liczba = 50000
End If
End If
End Sub
' Obsługa klawiszy
'Sub ekran_w_lewo_Click
'StartActivity(Wyliczenia_detektory)
'Activity.LoadLayout("Wiliczenia_detektory")'zaladowanie ekranu z designera
'End Sub
Many thanks for any reply and help.