Giter Site home page Giter Site logo

android-dsl's Introduction

android-dsl

Android UI DSL generator in Kotlin

android-dsl's People

Stargazers

石見 仁志 avatar Denis Stoyanov avatar Nikolay Krasko avatar

Watchers

James Cloos avatar Andrey Breslav avatar Mikhail Mutcianko avatar

android-dsl's Issues

Problem with widget IDs

  • Can we add them to R-file?
  • Can we generate an analog of the R-file?
  • Can we replace usages in Java code?

Use fancy delegates to avoid explicitly assigning widget IDs



class AndroidPropertyDelegate<T: View>(val rClass: Class<*>) {
    var value: T? = null

    fun get(_this: Any?, p: PropertyMetadata): T {
        return value!!
    }

    fun set(_this: Any?, p: PropertyMetadata, value: T) {
        assert(value == null)
        value.setId(getFromRClass(p.name))
        this.value = value
    }

    private fun getFromRClass(name: String) {
        rClass.get...
    }
}

abstract class AndroidView(rClass: Class<*> = computeRClassFromMyPackage()) {
    protected fun android() = AndroidPropertyDelegate(rClass)
}

class MyView : AndroidView(javaClass<R.id>()) {
    var textView : TextView by android()
    var textView1 : TextView by android()

    {
        UI {

        }
    }

}

Generator: Support publishing widgets as fields

class Foo {

    var foo: TextView by ...
    var bar: TextView by ...

    {
      UI {
          frameLayout {
              linearLayout {
                  orientation = vertical
                  foo = textView {
                      text = "Enter your password"
                  }
                  editText {
                      inputType = textPassword
                      requestFocus {
                      }
                  }
                  bar = textView {
                      text = "Repeat your password"
                  }
                  editText {
                      inputType = textPassword
                  }
                  button {
                      text = "Sign in"
                  }
              }
              scrollBar {
              }
          }
      }
    }
}


public override fun onCreate(savedInstanceState: Bundle?): Unit {
    super.onCreate(savedInstanceState)
    myFoo = Foo()
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.