参考网址:https://blog.youkuaiyun.com/qq_36356379/article/details/88722076
说明:当一个Activity的布局控件比较多,代码逻辑处理过多时,需要对Activity进行优化处理;这样可以使Activity看起来逻辑清晰;以下可对Activity中代码进行抽离处理减少Activity中代码行数。
解析:自定义一个 RelativeLayout或LinearLayout(并不是局限于这两个),以此作为布局界面的父级控件,把整体的布局样式放到该自定义View中;在自定义View中初始化它的子控件,并可以把子控件的逻辑处理写进去。(语言表述不太好,直接看代码)
自定义View
package com.example.view;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.R;
public class TestRelativeLayout extends RelativeLayout implements View.OnClickListener {
private Context mContext;
public TestRelativeLayout(Context context) {
super(context);
mContext = context;
}
public TestRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}
public TestRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mContext = context;
}
public TestRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mContext = context;
}
//在所有子视图都被添加之后,此时可以通过findView获取该控件下的子控件
@Override
protected void onFinishInflate() {
super.onFinishInflate();
if(isInEditMode()) {
return;
}
initView();
}
private void initView(){
TextView test = findViewById(R.id.test);
test.setOnClickListener(this);
}
public void control(){
System.out.println("进行操作处理,并把该方法开放出去");
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.test:
break;
}
}
}
布局中使用
<?xml version="1.0" encoding="utf-8"?>
<com.example.view.TestRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/test_relative">
<TextView
android:id="@+id/test"
android:text="点击"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.example.view.TestRelativeLayout>
Activity中初始化
package com.example.activity;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import com.example.R;
import com.example.view.TestRelativeLayout;
public class TestActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
TestRelativeLayout test_relative = findViewById(R.id.test_relative);
test_relative.control();
}
}