Create a base layout class
// XML layout file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:orientation="vertical"
android:padding="12dp">
<TextView
android:id="@+id/checkboxTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="I agree" />
<TextView
android:id="@+id/checkboxLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Terms" />
</LinearLayout>
<LinearLayout
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:gravity="center">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="20dp"
android:layout_height="20dp"
android:button="@drawable/checkbox"
android:gravity="center"
tools:checked="true" />
</LinearLayout>
</LinearLayout>
// XML layout file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:orientation="vertical"
android:padding="12dp">
<TextView
android:id="@+id/checkboxTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="I agree" />
<TextView
android:id="@+id/checkboxLink"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="Terms" />
</LinearLayout>
<LinearLayout
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:layout_marginEnd="10dp"
android:gravity="center">
<CheckBox
android:id="@+id/checkBox"
android:layout_width="20dp"
android:layout_height="20dp"
android:button="@drawable/checkbox"
android:gravity="center"
tools:checked="true" />
</LinearLayout>
</LinearLayout>
// XML layout file <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="0.8" android:orientation="vertical" android:padding="12dp"> <TextView android:id="@+id/checkboxTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="I agree" /> <TextView android:id="@+id/checkboxLink" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="Terms" /> </LinearLayout> <LinearLayout android:layout_width="30dp" android:layout_height="30dp" android:layout_gravity="center" android:layout_marginEnd="10dp" android:gravity="center"> <CheckBox android:id="@+id/checkBox" android:layout_width="20dp" android:layout_height="20dp" android:button="@drawable/checkbox" android:gravity="center" tools:checked="true" /> </LinearLayout> </LinearLayout>
// Logic file
class BaseCheckBox @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
init {
View.inflate(context, R.layout.base_checkbox, this)
}
fun setTitle(title: String) {
checkboxTitle?.text = title
}
fun setLink(link: String) {
checkboxLink?.text = link
}
fun isCheccked(): Boolean {
return checkBox?.isChecked == true
}
fun addOnLinkClickListener(listener: OnClickListener) {
checkboxLink?.setOnClickListener(listener)
}
fun addOnConsentCheckBoxClickListener(listener: OnClickListener {
checkBox?.setOnClickListener(listener)
}
}
// Logic file
class BaseCheckBox @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
init {
View.inflate(context, R.layout.base_checkbox, this)
}
fun setTitle(title: String) {
checkboxTitle?.text = title
}
fun setLink(link: String) {
checkboxLink?.text = link
}
fun isCheccked(): Boolean {
return checkBox?.isChecked == true
}
fun addOnLinkClickListener(listener: OnClickListener) {
checkboxLink?.setOnClickListener(listener)
}
fun addOnConsentCheckBoxClickListener(listener: OnClickListener {
checkBox?.setOnClickListener(listener)
}
}
// Logic file class BaseCheckBox @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr) { init { View.inflate(context, R.layout.base_checkbox, this) } fun setTitle(title: String) { checkboxTitle?.text = title } fun setLink(link: String) { checkboxLink?.text = link } fun isCheccked(): Boolean { return checkBox?.isChecked == true } fun addOnLinkClickListener(listener: OnClickListener) { checkboxLink?.setOnClickListener(listener) } fun addOnConsentCheckBoxClickListener(listener: OnClickListener { checkBox?.setOnClickListener(listener) } }
Embed base class into screen layout
// XML screen layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="36dp"
android:paddingEnd="36dp">
...
<sample.app.customview.BaseCheckBox
android:id="@+id/terms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/body"
android:layout_marginTop="50dp"
android:layout_marginBottom="10dp" />
<sample.app.customview.BaseCheckBox
android:id="@+id/privacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/terms"
android:layout_marginBottom="10dp" />
<sample.app.customview.BaseCheckBox
android:id="@+id/policies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/privacy" />
...
</RelativeLayout>
</LinearLayout>
// XML screen layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="36dp"
android:paddingEnd="36dp">
...
<sample.app.customview.BaseCheckBox
android:id="@+id/terms"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/body"
android:layout_marginTop="50dp"
android:layout_marginBottom="10dp" />
<sample.app.customview.BaseCheckBox
android:id="@+id/privacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/terms"
android:layout_marginBottom="10dp" />
<sample.app.customview.BaseCheckBox
android:id="@+id/policies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/privacy" />
...
</RelativeLayout>
</LinearLayout>
// XML screen layout <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingStart="36dp" android:paddingEnd="36dp"> ... <sample.app.customview.BaseCheckBox android:id="@+id/terms" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/body" android:layout_marginTop="50dp" android:layout_marginBottom="10dp" /> <sample.app.customview.BaseCheckBox android:id="@+id/privacy" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/terms" android:layout_marginBottom="10dp" /> <sample.app.customview.BaseCheckBox android:id="@+id/policies" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/privacy" /> ... </RelativeLayout> </LinearLayout>
Set values for each UI element in Activity
class MainActivity : Contract.View {
private val presenter: ConsentContract.Presenter by inject { parametersOf(this) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_consent)
initValues()
initListeners()
}
private fun initValues() {
terms?.setTitle("aaaaa")
terms?.setLink("bbbb")
privacy?.setTitle("ccccc")
privacy?.setLink("ddddd")
policies?.setTitle("eeeee")
policies?.setLink("ffffff")
}
private fun initListeners() {
terms?.addOnLinkClickListener(View.OnClickListener {
presenter.onTermsClicked()
})
privacy?.addOnLinkClickListener(View.OnClickListener {
presenter.onPrivacyClicked()
})
policies?.addOnLinkClickListener(View.OnClickListener {
presenter.onPoliciesClicked()
})
}
}
class MainActivity : Contract.View {
private val presenter: ConsentContract.Presenter by inject { parametersOf(this) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_consent)
initValues()
initListeners()
}
private fun initValues() {
terms?.setTitle("aaaaa")
terms?.setLink("bbbb")
privacy?.setTitle("ccccc")
privacy?.setLink("ddddd")
policies?.setTitle("eeeee")
policies?.setLink("ffffff")
}
private fun initListeners() {
terms?.addOnLinkClickListener(View.OnClickListener {
presenter.onTermsClicked()
})
privacy?.addOnLinkClickListener(View.OnClickListener {
presenter.onPrivacyClicked()
})
policies?.addOnLinkClickListener(View.OnClickListener {
presenter.onPoliciesClicked()
})
}
}
class MainActivity : Contract.View { private val presenter: ConsentContract.Presenter by inject { parametersOf(this) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_consent) initValues() initListeners() } private fun initValues() { terms?.setTitle("aaaaa") terms?.setLink("bbbb") privacy?.setTitle("ccccc") privacy?.setLink("ddddd") policies?.setTitle("eeeee") policies?.setLink("ffffff") } private fun initListeners() { terms?.addOnLinkClickListener(View.OnClickListener { presenter.onTermsClicked() }) privacy?.addOnLinkClickListener(View.OnClickListener { presenter.onPrivacyClicked() }) policies?.addOnLinkClickListener(View.OnClickListener { presenter.onPoliciesClicked() }) } }
Leave a Reply