自定义控件
第一步:自定义layout -> title.xml
编写一个title布局,拥有返回按钮,标题文本,编辑按钮。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/title_bg">
<Button
android:id="@+id/titleBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:background="@drawable/back_bg"
android:text="Back"
android:textColor="#fff"/>
<TextView
android:id="@+id/titleText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="1"
android:layout_gravity="center"
android:text="Title Text"
android:textColor="#fff"
android:textSize="24sp" />
<Button
android:id="@+id/titleEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dp"
android:background="@drawable/edit_bg"
android:text="Edit"
android:textColor="#fff"/>
</LinearLayout>
第二步:自定义控件 -> TitleLayout.class
创建控件TitleLayout,继承于LinearLayout。
在构造函数中编写逻辑,动态加载布局。
LayoutInflater.from()构建一个LayoutInflater对象,然后调用inflate方法。
参数1:需要加载的布局id。
参数2:加载的布局的父布局。
import android.app.Activity
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.*
import kotlinx.android.synthetic.main.title.view.*
class TitleLayout(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs) {
init {
LayoutInflater.from(context).inflate(R.layout.title, this)
titleBack.setOnClickListener {
val activity = context as Activity
activity.finish()
}
titleEdit.setOnClickListener {
Toast.makeText(context, "Edit...", Toast.LENGTH_LONG).show()
}
}
}
第三步:Activity引用 -> activity_main.xml
<com.lunacattus.customizecontrols.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" />
附录:隐藏activity自带的title
supportActionBar?.hide()