一:使用
1:MainActivity.java (动态修改组件状态)
public class MainActivity extends AppCompatActivity { private Combination combination; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); combination = findViewById(R.id.combination_all); combination.setLeftListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "我是主界面 左", Toast.LENGTH_SHORT).show(); } }); combination.setLeftShow(true); combination.setRightListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "我是主界面 右", Toast.LENGTH_SHORT).show(); } }); combination.setRightSetting("", true); combination.setTitle("我是标题M"); } }
2:activity_main.xml (相关布局文件)
<com.example.a13305.mvptest.combination.Combination android:id="@+id/combination_all" app:leftImgShow="true" app:rightShow="true" app:title="我是谁" app:rightContent="登录" android:layout_width="match_parent" android:layout_height="match_parent"> </com.example.a13305.mvptest.combination.Combination>
二:创建自定义组件
1:values 文件夹下创建attrs.xml文件(匹配自定义属性)
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="Combination"> <!--左侧Img是否显示--> <attr name="leftImgShow" format="boolean" /> <!--标题内容--> <attr name="title" format="string" /> <!--右侧内容是否显示&&右侧nr--> <attr name="rightShow" format="boolean" /> <attr name="rightContent" format="string" /> </declare-styleable> </resources>
2:创建自定义View
import android.content.Context; import android.content.res.TypedArray; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.example.a13305.mvptest.R; /** * 自定义组合控件 */ public class Combination extends LinearLayout { private LinearLayout img; // 最左侧返回按键 private TextView title_tv, right_tv; // 标题内容,右侧内容 private boolean leftImg; //默认左侧返回按钮显示 private Boolean rightShow;// 默认右侧显示 private String title, rightContent; // 标题 右侧内容 public Combination(Context context) { super(context); initView(context); } public Combination(Context context, @Nullable AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Combination); leftImg = a.getBoolean(R.styleable.Combination_leftImgShow, true); // 默认左侧返回按钮显示 title = a.getString(R.styleable.Combination_title); // 标题 rightShow = a.getBoolean(R.styleable.Combination_rightShow, true); // 默认右侧内容显示 rightContent = a.getString(R.styleable.Combination_rightContent); // 右侧内容 initView(context); } public Combination(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); initView(context); } /** * 加载相关布局 */ private void initView(Context context) { View view = LayoutInflater.from(context).inflate(R.layout.combination, this, true); img = view.findViewById(R.id.medical_back); title_tv = findViewById(R.id.title_text); right_tv = findViewById(R.id.compile_tv); if (leftImg) { img.setVisibility(View.VISIBLE); }else{ img.setVisibility(View.GONE); } if(!TextUtils.isEmpty(title)){ title_tv.setText(title); } if (rightShow) { right_tv.setVisibility(View.VISIBLE); }else{ right_tv.setVisibility(View.GONE); } if(!TextUtils.isEmpty(rightContent)){ right_tv.setText(rightContent); } } /** * 左侧返回按钮操作,如果为真,显示,否则不显示 */ public void setLeftShow(boolean flag) { if (flag) { img.setVisibility(View.VISIBLE); } else { img.setVisibility(View.GONE); } } /** * 点击返回按钮执行相关操作 */ public void setLeftListener(OnClickListener onClickListener) { img.setOnClickListener(onClickListener); } /** * 设置标题显示内容 */ public void setTitle(String title) { if (!TextUtils.isEmpty(title)) { title_tv.setText(title); } } /** * 设置右侧显示内容 */ public void setRightSetting(String right, boolean flag) { Log.i("info","flag::"+flag); if (flag) { right_tv.setVisibility(View.VISIBLE); if (!TextUtils.isEmpty(right)) { right_tv.setText(right); } } else { right_tv.setVisibility(View.GONE); } } /** * 设置右侧显示内容点击事件 */ public void setRightListener(OnClickListener onClickListener) { right_tv.setOnClickListener(onClickListener); } }
3:combination.xml(View中加载的布局文件)
<?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="56dp" android:background="#ffffff" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2"> <LinearLayout android:id="@+id/medical_back" android:layout_width="44dp" android:layout_height="match_parent"> <ImageView android:layout_width="20dp" android:layout_height="22dp" android:layout_gravity="center" android:layout_marginLeft="16dp" android:src="@mipmap/backtrack"> </ImageView> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" android:gravity="center"> <TextView android:text="标题内容" android:id="@+id/title_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:gravity="center" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="2" android:gravity="center"> <TextView android:text="登录" android:id="@+id/compile_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:textSize="16sp" /> </LinearLayout> </LinearLayout>