Showing posts with label kotlin. Show all posts
Showing posts with label kotlin. Show all posts

23 July 2024

How to use Material Themebuilder generated themes with bundled fonts in an Android Compose project

When using Material theme builder, kotlin theme files are generated using downloadable Google fonts.

I wanted to change these fonts which are dynamically downloaded by the running application with fonts that were bundled with my Android Studio Kotlin Compose application. Here are the steps to do replace the downloadable fonts

  1. Download the kotlin theme and integrate it in your application's theme folder
  2. Download the font
      • Alternatively work with any other ttf file you want to replace the downloadable Google fonts with
  3. Add the font to your project. (Elaborate instructions on adding fonts to your compose project here)
    1. In your project create a font folder under res (if it does not exist yet)
    2. Put the downloaded ttf files in this folder. 
    3. Replace all dash characters "-" in the filename with underscores "_". Replace all uppercase characters in the filename with lowercace (optionally preceded by an underscore).
  4.  Adapt ...ui.theme.Type.kt in your project
    1. Replace all occurences of
      Font(
      googleFont = GoogleFont("theFontName"),
      fontProvider = provider,
      )
      with
      Font(
      R.font.the_font_filename
      )
    2. remove the provider variable and its initialisation

Test and run! 

Additional cookbooks on adding fonts to your compose project:


9 April 2024

Java -> Kotlin equivalents

If your starting Kotlin with prior java knowledge, here's a quick lookup table for some common equivalents:

 

Java

Kotlin

Accessibility modifiers:

  • private
  • protected
  • //default package private
  • public

     

    • private
    • protected
    • Internal // accessible in module
    • //default public

String [] anArray;

var anArray:Array<String>

(castType)

smart casting after is

as

public class Area {

private int length;

private int width;

 

//constructor

public Area(int length, int width){

this.length = length;

this.width =  width;

System.out.printf("Surface: %d",length*width);

}

 

//accessor

public int getCircumference(){

return 2*(length+width);

}

}

class Area(var length: Int , var width: Int) {

 

 

        //to add onstructor code

init {

println("Surface: ${length * width}")

}

 

 

 

 

//accessor

val circumference

get() = 2*(length + width)

 

}

anEnum.values()

anEnum.entries

class Shape{}

class Rectangle extends Shape{}

open class Shape {}

class Rectangle : Shape {}

final String aConstant="a";

val aConstant="a"

instanceOf

is

Primitives: int, double...

Int,Double...

lambda (shorter forms exist in both languages)

BiFunction<Integer, Integer, Integer> mutiply= (a, b) -> {

System.out.println("java lambda");

return a * b;

};

 

 

val multiply: (Int, Int)->Int = { a, b ->

println("kotlin lambda")

a * b

}

 

 

new Random();

Random();

Object

Any?

public static void main(String[] args){}

// Note: Java 22 has a preview of a main() function

fun main(args:Array<String>){}

static

companion

top level function

const

switch expression

when

int ternaryVar=test?1:2;

var ternaryVar = if(test) 1 else 2;

throw UnsupportedOperationException

TODO()

void

Unit