Programmatically bloated layout with Android Kotlin extensions
I have the following 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"
android:background="@android:color/white"
android:paddingLeft="20dp"
android:paddingRight="20dp">
<TextView
android:id="@+id/tvErrorTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textColor="@android:color/background_dark"
android:textSize="18sp"
/>
<TextView
android:id="@+id/tvErrorDesc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:textColor="@android:color/darker_gray"
android:textSize="16sp"
/>
<TextView
android:id="@+id/tvAction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginBottom="10dp"
android:layout_gravity="end"
android:padding="5dp"
android:textSize="15sp"
android:textStyle="bold"
android:textAllCaps="true"
android:textColor="@android:color/holo_purple"
/>
</LinearLayout>
When I want to use extend android kotlin out of work like below it doesn't work. I ended up with findViewById working.
...
...
import kotlinx.android.synthetic.main.dialog_error.*
...
...
val view = LayoutInflater.from(context).inflate(R.layout.dialog_error, null, false)
val tvErrorTitle = view.findViewById(R.id.tvErrorTitle) as TextView
val tvErrorDesc = view.findViewById(R.id.tvErrorDesc) as TextView
val tvErrorAction = view.findViewById(R.id.tvAction) as TextView
It does not pull views directly from the xml. How to use it in programmatically bloated layout and avoid it findViewById
?
Note . This question is strictly about Kotlin Android Extensions , not the language itself.
Edit I imported both:
import kotlinx.android.synthetic.main.dialog_error.view.*
import kotlinx.android.synthetic.main.dialog_error.*
But Android Studio is still trying to import from R.id and doesn't recognize these two imports. Is there something missing?
source to share
From the docs you linked :
If we want to call synthetic properties on the view (useful in adapter classes), we must also import
kotlinx.android.synthetic.main.activity_main.view.*.
That is, import kotlinx.android.synthetic.main.layout.view.*
to load extension properties View
.
Then:
val view = LayoutInflater.from(context).inflate(...)
view.tvErrorTitle.text = "test"
source to share