1、BaseAbstractActivity
private fun configView() {
val inflater = LayoutInflater.from(this)
val baseView = inflater.inflate(getLayoutId(), null)
setContentView(baseView)
}
2、动态设置布局
layout.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout>
<RelativeLayout>
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
java
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) relativeLayout.getLayoutParams();
params.width = (int) width; //px
params.height = (int) height; //px
relativeLayout.setLayoutParams(params);
//dp即dip
/**
* dp转换为px
*/
fun dp2x(context: Context, dipValue: Int): Int {
val density: Float = context.resources.displayMetrics.density
return (dipValue * density + 0.5f).toInt()
}
/**
* px转换为dp
*/
fun px2dp(context: Context, pxValue: Int): Int {
val density: Float = context.resources.displayMetrics.density
return (pxValue / density + 0.5f).toInt()
}
3、自定义View
3个构造方法
class MyView : View {
private var mContext: Context? = null
constructor(context: Context?) : super(context) {
mContext = context
initView()
}
constructor(
context: Context?,
attributeSet: AttributeSet?
) : super(context, attributeSet) {
mContext = context
initView()
}
constructor(context: Context?, attributeSet: AttributeSet?, def: Int) : super(
context,
attributeSet,
def
) {
mContext = context
initView()
}
private fun initView() {
//加载布局
LayoutInflater.from(mContext).inflate(R.layout.layout_my_view, this)
//绑定控件
val tvTitle = findViewById<TextView>(R.id.id_tv_title)
}
}
1个构造方法
class MyView(
var mContext: Context,
var attrs: AttributeSet? = null,
var defStyleAttr: Int = 0
) : LinearLayout(mContext, attrs, defStyleAttr) {
init {
initView()
}
private fun initView() {
//加载布局
LayoutInflater.from(mContext).inflate(R.layout.my_view, this)
//绑定控件
val tvTitle = findViewById<TextView>(R.id.id_tv_title)
}
}