Rehber Tema Geliştirme Kod Derlemesi

kasimtmc

Kıdemli Üye
Kıdemli Üye
MIUI Sever
SMS Onaylı
Adım
kasim
Cihazım
Redmi Note9 Pro
Meslek
Öğretmen
Konum
Çorum
Katılım
14 Kasım 2020
Konular
25
Mesajlar
461
Çözümler
2
Tepkime puanı
323
Puanları
78
Geliştirmekte olduğunuz temalar için sistem karanlık/aydınlık mod geçişinden bağımsız olarak gece ve gündüz zamanlarını atamanıza olanak sağlar.

Örneğin; sadece karanlık mod veya sadece aydınlık mod için tema geliştiriyor ancak hava durumu simgeleri gibi görselleri gün batımı ve gün doğumuna göre uyarlamak istiyorsanız ya da temanızı kullanan kişinin sürekli tek mod kullanabilecek olma ihtimaline takılmak istemiyorsanız aşağıdaki değişkenleri kodunuza ekleyerek bunu yapabilirsiniz.

VariableBinders içine ekleyin ⬇️

XML:
<!-- weatherServiceProvider -->

  <ContentProviderBinder name="WeatherProvider" uri="content://weather/actualWeatherData/1" columns="sunrise,sunset" countName="hasweather">

      <Variable name="weather_sunrise" type="int" column="sunrise" />

      <Variable name="weather_sunset" type="int" column="sunset" />             </ContentProviderBinder>

Eğer bir hava durumu sağlayıcısı zaten ekliyse ve içerisinde sunrise ve sunset değişkenleri tanımlıysa sadece aşağıdaki suffix/düzeltmelerdeki değişken isimlerinin kendi sunrise ve sunset değişkenleriniz ile aynı olmasına dikkat edin!

Lockscreen içine ekleyin, sunrise ve sunset isimlerine dikkat edin!
Burada #weather_sunrise ve #weather_sunset > sizde farklıysa aynı olmalarını sağlayın.

XML:
<!-- sunriseHour -->

  <Var name="sunriseVar1" expression="formatDate('HH',#weather_sunrise)" type="string"/>

  <!-- sunriseMinute -->

  <Var name="sunriseVar2" expression="formatDate('mm',#weather_sunrise)" type="string"/>

  <!-- sunriseTime -->

  <Var name="sunriseVar" expression="@sunriseVar1 + @sunriseVar2" type="string"/>

  <Var name="sunriseVarInteger" expression="int(@sunriseVar)" type="int"/>

  <!-- sunsetHour -->

     <Var name="sunsetVar1" expression="formatDate('HH',#weather_sunset)" type="string"/>

  <!-- sunsetMinute -->

  <Var name="sunsetVar2" expression="formatDate('mm',#weather_sunset)" type="string"/>

  <!-- sunsetTime -->

  <Var name="sunsetVar" expression="@sunsetVar1+@sunsetVar2" type="string"/>

  <Var name="sunsetVarInteger" expression="int(@sunsetVar)" type="int"/>

  <!-- hour -->

  <Var name="hourVar1" expression="formatDate('HH',#time_sys)" type="string"/>

  <!-- minute -->

  <Var name="hourVar2" expression="formatDate('mm',#time_sys)" type="string"/>

  <!-- currentTime -->

  <Var name="hourVar" expression="@hourVar1 + @hourVar2" type="string"/>

  <Var name="hourVarInteger" expression="int(@hourVar)" type="int"/>

  <!-- dayTimeEdges -->

  <Var name="isDay" expression="ifelse(#hourVarInteger }= #sunriseVarInteger**#hourVarInteger {= #sunsetVarInteger, 1, 0)" type="int"/>

Bu kodda #isDay değişkeni 1 iken gündüz, 0 iken gece zamanı olduğunu belirtir.

Örnek kullanımlar:

Temanızda kilit ekranı için güneş battığında mevcut duvar kağıdını karartmak için;

XML:
<!-- darkModeOptim -->

 <Rectangle align="center" alignV="center" cornerRadius="0,0" fillColor="argb(80,0,0,0)" w="#sw" h="#sh" x="#sw/2" y="#sh/2" visibility="#isDay == 0" />

* #isDay == 0 yerine not(#isDay) , eq(#isDay,0) vb. yazılabilir.
* Bu dikdörtgenin şeffaflığı 255 üzerinden 80, düşürmek veya artırmak için 'argb(80' değerini değiştirin.

Hava durumu simgelerini ayarlama;

XML:
<Image name="hwImage" alignV="center" srcExp=" 'weather/weather_' + #isDay + '.png' " srcid="#weather_id" w="100" h="100" x="0" y="0" visibility="1" />

Bu resim kodu hava durumu simgelerini hem mevcut duruma hem gece ve gündüze göre ayarlar.
* Gündüz simgelerinin ismi > weather_1_1.png < gibi, gece simgelerinin ismi > weather_0_1.png < gibi olmalıdır.

* İsimdeki ilk sayı gündüz/gece döngüsü değerini, ikinci sayı ise hava durumu değerini ifade eder.

-------------

Kuzey/Güney Yarım Küre ve Mevsim Değişkenleri

<VariableBinders/> içine konum erişimi tanımlayın.

XML:
<!-- location -->

  <LocationBinder name="locationBinder" type="0" time="7000" distance="10">

      <Variable name="location_str" type="string[]"/>

     </LocationBinder>

Hangi yarım kürede olunduğu belirlenirken;

XML:
<Var name="myLat" expression="int(@location_str[3])" type="int" />     
<Var name="isNorth" expression="ifelse(#myLat } 0 , 1, #myLat { 0, 0 ,2)" type="int" />

#isNorth değişkeni 1 iken Kuzey, 0 iken Güney, 2 iken ekvatorda olunduğunun bilgisini verir.

Mevsimleri belirlemek için önce hangi yarım kürede olunduğu bilgisini aldık. Mevsimleri belirlerken sürekli #month+1 yapmayalım diye

XML:
<Var name="monthSF" expression="#month+1" type="int" />

değişkenini oluşturuyoruz. Normalde 0,1,2.... şeklinde giden ay numaralarını 1,2,3... haline dönüştürdük.

Bu kod parçası ise yarım kürelere göre mevsimleri tanımlıyor.
XML:
<!-- 1=bahar, 2=yaz, 3=sonbahar, 4=kış -->
     <Var name="seasonCycle" expression="ifelse(#isNorth == 1, ifelse(#monthSF == 3||#monthSF == 4||#monthSF == 5, 1, #monthSF == 6||#monthSF == 7||#monthSF == 8, 2, #monthSF == 9||#monthSF == 10||#monthSF == 11, 3, 4),
     #isNorth == 0, ifelse(#monthSF == 9||#monthSF == 10||#monthSF == 11, 1, #monthSF == 12||#monthSF == 1||#monthSF == 2, 2, #monthSF == 3||#monthSF == 4||#monthSF == 5, 3, 4), 0)" type="int" />

Üstte de gösterildiği gibi 1= bahar, 2= yaz , 3= sonbahar, 4= kış mevsimlerini ifade ediyor.

Ek- 1: 04.10.22

Hava Durumu için ek:
Şu an için temamıza hava durumu widgeti yapmak istediğinizde sadece id'lere göre simgeleri ( karanlık moda ya da yukarıda bahsettiğim yönteme göre uyarlayıp ) kullanabiliyorduk. Ancak dün yeni başladığım temaya hava durumu widgeti yaparken uzun süredir düşündüğüm ayın evrelerini de gösterme özelliğini ( tutarlı ve sistem temelli - yoksa elle veri girerek gayet yapılabilir bir şey ) ekleme işini tamamladım aşağıdaki kodları temanızın kilit ekranı, saat, miwallpaper vb. eklentilerinin manifestlerine ekleyerek test edip kullanabilirsiniz.

XML:
<Var name="moonPhases" expression="ifelse(strContains(formatDate('e',#time_sys), '初一'), 1,
      strContains(formatDate('e',#time_sys), '初二'), 2,
      strContains(formatDate('e',#time_sys), '初三'), 3,
      strContains(formatDate('e',#time_sys), '初四'), 4,
      strContains(formatDate('e',#time_sys), '初五'), 5,
      strContains(formatDate('e',#time_sys), '初六'), 6,
      strContains(formatDate('e',#time_sys), '初七'), 7,
      strContains(formatDate('e',#time_sys), '初八'), 8,
      strContains(formatDate('e',#time_sys), '初九'), 9,
      strContains(formatDate('e',#time_sys), '初十'), 10,
      strContains(formatDate('e',#time_sys), '十一'), 11,
      strContains(formatDate('e',#time_sys), '十二'), 12,
      strContains(formatDate('e',#time_sys), '十三'), 13,
      strContains(formatDate('e',#time_sys), '十四'), 14,
      strContains(formatDate('e',#time_sys), '十五'), 15,
      strContains(formatDate('e',#time_sys), '十六'), 16,
      strContains(formatDate('e',#time_sys), '十七'), 17,
      strContains(formatDate('e',#time_sys), '十八'), 18,
      strContains(formatDate('e',#time_sys), '十九'), 19,
      strContains(formatDate('e',#time_sys), '二十'), 20,
      strContains(formatDate('e',#time_sys), '廿一'), 21,
      strContains(formatDate('e',#time_sys), '廿二'), 22,
      strContains(formatDate('e',#time_sys), '廿三'), 23,
      strContains(formatDate('e',#time_sys), '廿四'), 24,
      strContains(formatDate('e',#time_sys), '廿五'), 25,
      strContains(formatDate('e',#time_sys), '廿六'), 26,
      strContains(formatDate('e',#time_sys), '廿七'), 27,
      strContains(formatDate('e',#time_sys), '廿八'), 28,
      strContains(formatDate('e',#time_sys), '廿九'), 29,
      strContains(formatDate('e',#time_sys), '三十'), 30, '0')" type="int" />

Bu kod ayın geçirdiği 30 (esasen yaklaşık 29.5) günlük evreyi nümerik olarak tanımlıyor. Bu kısım aslında sadece resim göstermek için. Örneğin konuya ekleyeceğim moonPhases.zip içindeki evre resimlerini göstermek için.
Eğer ayın evrelerini yazı halinde de belirtmek istiyorsanız manifeste şu iki kodu da eklemeniz gerekiyor.

XML:
<Var name="moonPhasesVar" expression="ifelse(#moonPhases == 1||#moonPhases == 2||#moonPhases == 29||#moonPhases == 30, 1,
      #moonPhases == 3||#moonPhases == 4||#moonPhases == 5, 2,
      #moonPhases == 6||#moonPhases == 7||#moonPhases == 8||#moonPhases == 9, 3,
      #moonPhases == 10||#moonPhases == 11||#moonPhases == 12||#moonPhases == 13, 4,
      #moonPhases == 14||#moonPhases == 15||#moonPhases == 16||#moonPhases == 17, 5,
      #moonPhases == 18||#moonPhases == 19||#moonPhases == 20, 6,
      #moonPhases == 21||#moonPhases == 22||#moonPhases == 23||#moonPhases == 24, 7,
      #moonPhases == 25||#moonPhases == 26||#moonPhases == 27||#moonPhases == 28, 8, '0')" type="int" />

Bu kısım 30 günlük süreci kabaca ayın 8 evresine nümerik olarak tanımlamaya yarıyor. (yani 30 resim çok ben 8 resim kullanmak istiyorum derseniz bu değişkenle kullanabilirsiniz.)

XML:
<Var name="moonPhasesText" expression="ifelse(#moonPhasesVar == 1, @mPhase1,
      #moonPhasesVar == 2, @mPhase2,
      #moonPhasesVar == 3, @mPhase3,
      #moonPhasesVar == 4, @mPhase4,
      #moonPhasesVar == 5, @mPhase5,
      #moonPhasesVar == 6, @mPhase6,
      #moonPhasesVar == 7, @mPhase7,
      #moonPhasesVar == 8, @mPhase8, 'No data')" type="string" />

Bu değişkende de yazı için tanımladığımız değişkenlerle integerleri birbirine bağlıyoruz. Ama her dil için ayrı ayrı değişkenler oluşturmaktansa stringler ( strings, strings_tr_TR vb...) içine şu şekilde ekleyebilirsiniz.

XML:
    <string name="mPhase1">Yeni ay</string>
    <string name="mPhase2">Şişkin hilal</string>
    <string name="mPhase3">İlk dördün</string>
    <string name="mPhase4">Şişkin gibbous</string>
    <string name="mPhase5">Dolunay</string>
    <string name="mPhase6">Azalan gibbous</string>
    <string name="mPhase7">Son dördün</string>
    <string name="mPhase8">Azalan hilal</string>

Bu paylaşımlar kendi tasarımcılarımızı yabancı tasarımcılardan bir adım öne geçirebilirse ne mutlu...

Bu birkaç küçük kod sayesinde ayın evrelerini de bu şekilde gösterebilirsiniz.

Resimleri görmek için giriş yapmanız gerekmektedir.
 
Son düzenleme:

trsalgado

Kıdemli Üye
Kıdemli Üye
MIUI Sever
Adım
ali
Cihazım
s4
Yaş
34
Konum
ankara
Katılım
4 Haziran 2017
Konular
19
Mesajlar
269
Tepkime puanı
78
Puanları
43
kolay gelsin hocam, kullandığım temada çağrı geldiği zaman bildirim rengi ve arka plan rengi aynı olduğu için yazılar okunmuyor, yazı rengini hangi kodu değiştirmem lazım, teşekkürler.
Resimleri görmek için giriş yapmanız gerekmektedir.
 

Mehmet KARAHANLİ

Üye
MIUI Sever
Acemi Üye
Adım
Mehmet
Cihazım
Mi9
Yaş
41
Konum
Wien
Katılım
19 Temmuz 2019
Konular
9
Mesajlar
91
Tepkime puanı
29
Puanları
18
üstat eline koluna saglik paylasim icin cook tesekkürler..
mümkünse eger yaptigimiz kilit ekraanini koyu moda nasil entegre edebiliriz bunun bir yolu varmi?
ayarlardan koyu mod acildimi kilit ekranida otomatik koyu moda gecmesi gibi
 

kasimtmc

Kıdemli Üye
Kıdemli Üye
MIUI Sever
SMS Onaylı
Adım
kasim
Cihazım
Redmi Note9 Pro
Meslek
Öğretmen
Konum
Çorum
Katılım
14 Kasım 2020
Konular
25
Mesajlar
461
Çözümler
2
Tepkime puanı
323
Puanları
78
üstat eline koluna saglik paylasim icin cook tesekkürler..
mümkünse eger yaptigimiz kilit ekraanini koyu moda nasil entegre edebiliriz bunun bir yolu varmi?
ayarlardan koyu mod acildimi kilit ekranida otomatik koyu moda gecmesi gibi
Teşekkürler hocam. Sistem karanlık modda mı değil mi bunu öğrenmek için #__darkmode kullanılıyor. Örneğin karanlık modda gösterilecek ögeler için visibility="#__darkmode", aydınlık modda gösterilecek ögeler için visibility="not(#__darkmode)" kullanabilirsiniz. Yine animasyonlarda condition="#__darkmode" veya not(#__darkmode) kullabilirsiniz.
 

Mehmet KARAHANLİ

Üye
MIUI Sever
Acemi Üye
Adım
Mehmet
Cihazım
Mi9
Yaş
41
Konum
Wien
Katılım
19 Temmuz 2019
Konular
9
Mesajlar
91
Tepkime puanı
29
Puanları
18
Teşekkürler hocam. Sistem karanlık modda mı değil mi bunu öğrenmek için #__darkmode kullanılıyor. Örneğin karanlık modda gösterilecek ögeler için visibility="#__darkmode", aydınlık modda gösterilecek ögeler için visibility="not(#__darkmode)" kullanabilirsiniz. Yine animasyonlarda condition="#__darkmode" veya not(#__darkmode) kullabilirsiniz.
süpersiniz tesekkürler üstad
 
Üst Alt