Skip to content

Commit 56d263b

Browse files
author
Joao Rutkoski
committed
Databinding fix
1 parent d3ad78e commit 56d263b

File tree

7 files changed

+112
-32
lines changed

7 files changed

+112
-32
lines changed
0 Bytes
Binary file not shown.

app/build.gradle

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ apply plugin: 'com.android.application'
33
apply plugin: 'kotlin-android'
44

55
apply plugin: 'kotlin-android-extensions'
6+
apply plugin: 'kotlin-kapt'
67

78
android {
89
compileSdkVersion 27
@@ -20,14 +21,20 @@ android {
2021
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
2122
}
2223
}
24+
25+
dataBinding {
26+
enabled = true
27+
}
2328
}
2429

2530
dependencies {
2631
implementation fileTree(include: ['*.jar'], dir: 'libs')
27-
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
32+
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
2833
implementation 'com.android.support:appcompat-v7:27.1.1'
2934
testImplementation 'junit:junit:4.12'
3035
androidTestImplementation 'com.android.support.test:runner:1.0.2'
3136
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
37+
//VIEWMODEL
38+
implementation "android.arch.lifecycle:extensions:1.1.0"
3239
implementation project(':library')
3340
}
Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package com.opencraft.android.gradienttextview.sample
22

3+
import android.arch.lifecycle.ViewModelProviders
4+
import android.databinding.DataBindingUtil
35
import android.os.Bundle
46
import android.support.v7.app.AppCompatActivity
57
import com.opencraft.android.gradienttextview.R
8+
import com.opencraft.android.gradienttextview.databinding.ActivityMainBinding
69

710
class MainActivity : AppCompatActivity() {
811

912
override fun onCreate(savedInstanceState: Bundle?) {
1013
super.onCreate(savedInstanceState)
11-
setContentView(R.layout.activity_main)
14+
var vm = ViewModelProviders.of(this).get(MainViewModel::class.java)
15+
var binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
16+
binding.vm = vm
1217
}
1318
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.opencraft.android.gradienttextview.sample
2+
3+
import android.arch.lifecycle.ViewModel
4+
import android.databinding.ObservableField
5+
6+
class MainViewModel : ViewModel() {
7+
val text = ObservableField<String>("aaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa\naaaaaaaaaa")
8+
}
Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,45 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
5-
android:layout_width="match_parent"
6-
android:layout_height="match_parent"
7-
android:background="#f9f9f9"
8-
android:orientation="vertical"
9-
tools:context=".sample.MainActivity">
2+
<layout>
103

11-
<com.opencraft.library.GradientTextView
12-
android:layout_width="wrap_content"
13-
android:layout_height="wrap_content"
14-
android:layout_margin="32dp"
15-
android:text="aaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaaa"
16-
android:textSize="22sp"
17-
android:textStyle="bold"
18-
app:color_array="@array/gradient_default"
19-
app:color_span_array="@array/gradient_color_span_default"
20-
app:gradient_end="BOTTOM_RIGHT"
21-
app:gradient_start="TOP_LEFT" />
4+
<data>
225

23-
<com.opencraft.library.GradientTextView
24-
android:layout_width="wrap_content"
25-
android:layout_height="wrap_content"
26-
android:layout_margin="32dp"
27-
android:text="aaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaaa"
28-
android:textSize="22sp"
29-
android:textStyle="bold"
30-
app:angle="-45"
31-
app:color_array="@array/gradient_default"
32-
app:color_span_array="@array/gradient_color_span_default" />
6+
<variable
7+
name="vm"
8+
type="com.opencraft.android.gradienttextview.sample.MainViewModel" />
9+
</data>
3310

34-
</LinearLayout>
11+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
12+
xmlns:app="http://schemas.android.com/apk/res-auto"
13+
xmlns:tools="http://schemas.android.com/tools"
14+
android:layout_width="match_parent"
15+
android:layout_height="match_parent"
16+
android:background="#f9f9f9"
17+
android:orientation="vertical"
18+
tools:context=".sample.MainActivity">
19+
20+
<com.opencraft.library.GradientTextView
21+
android:layout_width="wrap_content"
22+
android:layout_height="wrap_content"
23+
android:layout_margin="32dp"
24+
android:text="aaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaa\naaaaaaaaaaaaaa"
25+
android:textSize="22sp"
26+
android:textStyle="bold"
27+
app:color_array="@array/gradient_default"
28+
app:color_span_array="@array/gradient_color_span_default"
29+
app:gradient_end="BOTTOM_RIGHT"
30+
app:gradient_start="TOP_LEFT" />
31+
32+
<com.opencraft.library.GradientTextView
33+
android:id="@+id/gradient"
34+
android:layout_width="wrap_content"
35+
android:layout_height="wrap_content"
36+
android:layout_margin="32dp"
37+
android:text="@{vm.text}"
38+
android:textSize="22sp"
39+
android:textStyle="bold"
40+
app:angle="-45"
41+
app:color_array="@array/gradient_default"
42+
app:color_span_array="@array/gradient_color_span_default" />
43+
44+
</LinearLayout>
45+
</layout>

library/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
apply plugin: 'com.android.library'
22
apply plugin: 'kotlin-android'
3+
apply plugin: 'kotlin-android-extensions'
4+
apply plugin: 'kotlin-kapt'
35

46
android {
57
compileSdkVersion 27
@@ -23,6 +25,10 @@ android {
2325
}
2426
}
2527

28+
dataBinding{
29+
enabled = true
30+
}
31+
2632
}
2733

2834
dependencies {

library/src/main/java/com/opencraft/library/GradientTextView.kt

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,27 @@ package com.opencraft.library
33
import android.annotation.SuppressLint
44
import android.content.Context
55
import android.content.res.TypedArray
6+
import android.databinding.BindingAdapter
7+
import android.databinding.InverseBindingListener
8+
import android.databinding.InverseBindingMethod
9+
import android.databinding.InverseBindingMethods
610
import android.graphics.Color
711
import android.graphics.LinearGradient
812
import android.graphics.Point
913
import android.graphics.Shader
14+
import android.text.Editable
15+
import android.text.TextWatcher
1016
import android.util.AttributeSet
1117
import android.widget.TextView
1218

1319

20+
@InverseBindingMethods(
21+
InverseBindingMethod(
22+
type = GradientTextView::class,
23+
attribute = "android:text",
24+
method = "getText"
25+
)
26+
)
1427
class GradientTextView constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : TextView(context, attrs, defStyleAttr) {
1528

1629

@@ -152,4 +165,34 @@ class GradientTextView constructor(context: Context, attrs: AttributeSet?, defSt
152165
val startY = centerY + (width - centerX) * Math.sin(radians) + (centerY - centerY) * Math.cos(radians);
153166
return Point(startX.toInt(), startY.toInt())
154167
}
168+
169+
companion object {
170+
@JvmStatic
171+
@BindingAdapter(value = ["android:textAttrChanged"])
172+
fun setListener(editText: GradientTextView, listener: InverseBindingListener?) {
173+
if (listener != null) {
174+
editText.addTextChangedListener(object : TextWatcher {
175+
override fun beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
176+
177+
}
178+
179+
override fun onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int) {
180+
181+
}
182+
183+
override fun afterTextChanged(editable: Editable) {
184+
listener.onChange()
185+
}
186+
})
187+
}
188+
}
189+
190+
@JvmStatic
191+
@BindingAdapter("android:text")
192+
fun setColor(editText: GradientTextView, text: String) {
193+
if (text != editText.getText()) {
194+
editText.setText(text)
195+
}
196+
}
197+
}
155198
}

0 commit comments

Comments
 (0)