使用Kotlin Android扩展以编程方式夸大布局
我有以下布局:
<?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>
当我想在下面的活动之外使用kotlin android扩展时 ,它不起作用。 我结束了做findViewById。
... ... 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
它不会直接从XML中获取视图。 如何在programetically膨胀的布局中使用它,并避免findViewById
?
注意 :此问题严格属于Kotlin Android扩展 ,而不是语言本身。
编辑我已经导入了两个:
import kotlinx.android.synthetic.main.dialog_error.view.* import kotlinx.android.synthetic.main.dialog_error.*
但Android Studio仍然尝试从R.id导入,而不能识别这两个导入。 有什么遗漏吗?
从你链接的文档 :
如果我们想在View上调用综合属性(在适配器类中有用),我们也应该导入
kotlinx.android.synthetic.main.activity_main.view.*.
也就是说,导入kotlinx.android.synthetic.main.layout.view.*
以及加载View
扩展属性。
然后:
val view = LayoutInflater.from(context).inflate(...) view.tvErrorTitle.text = "test"