900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > android--------自定义控件 之 组合控件篇

android--------自定义控件 之 组合控件篇

时间:2022-11-24 21:26:34

相关推荐

android--------自定义控件 之 组合控件篇

独角兽企业重金招聘Python工程师标准>>>

上篇介绍了自定义控件的自定义属性篇,地址:/zhangqie/blog/1805970

这篇博文主要来说说 自定义控件的组合控件来提高布局的复用

使用自定义组合控件的好处?

我们在项目开发中经常会遇见很多相似或者相同的布局,比如APP的标题栏,我们就可以用自定义组合控件来实现,以提高开发效率,降低开发成本为导向的,也便于扩展。

当然也可以有其他方式,如 include 标签

1:标题栏布局文件

<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="/apk/res/android"><ImageViewandroid:id="@+id/title_tab_left"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_centerVertical="true"android:layout_marginLeft="5dp"android:background="@null"android:minHeight="45dp"android:textSize="14sp"/><TextViewandroid:id="@+id/title_tab_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:maxLines="1"android:textSize="17sp" /><Buttonandroid:id="@+id/title_tab_right"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentRight="true"android:layout_centerVertical="true"android:layout_marginRight="7dp"android:background="@null"android:minHeight="45dp"android:minWidth="45dp"android:textSize="14sp" /></merge>

2:属性文件

<declare-styleable name="TopTabToolView"><attr name="tab_background_color" format="color"/><attr name="left_tab_visible" format="boolean"/><attr name="left_tab_drawable" format="reference|integer"/><attr name="title_text" format="string"/><attr name="title_color" format="color"/><attr name="right_tab_visible" format="boolean"/><attr name="right_tab_text" format="string"/><attr name="right_tab_text_color" format="color"/><attr name="right_tab_drawable" format="reference|integer"/></declare-styleable>

3:自定义控件

public class TopTabToolView extends RelativeLayout {private ImageView titleBarLeftImg;private Button titleBarRightBtn;private TextView titleBarTitle;public TopTabToolView(Context context) {super(context);}public TopTabToolView(Context context, AttributeSet attrs) {super(context, attrs);LayoutInflater.from(context).inflate(R.layout.tab_tool_layout,this,true);titleBarLeftImg = (ImageView)findViewById(R.id.title_tab_left);titleBarTitle = (TextView)findViewById(R.id.title_tab_title);titleBarRightBtn = (Button)findViewById(R.id.title_tab_right);TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.TopTabToolView);if (typedArray != null){//背景设置int titleBarBackGround = typedArray.getColor(R.styleable.TopTabToolView_tab_background_color, Color.WHITE);setBackgroundColor(titleBarBackGround);//-------------------------标题栏左边----------------------boolean leftImgVisible = typedArray.getBoolean(R.styleable.TopTabToolView_left_tab_visible,true);if (leftImgVisible){titleBarLeftImg.setVisibility(VISIBLE);}else {titleBarLeftImg.setVisibility(GONE);}//设置图标int leftTabDrawble = typedArray.getResourceId(R.styleable.TopTabToolView_left_tab_drawable,-1);if (leftTabDrawble != -1){titleBarLeftImg.setImageResource(leftTabDrawble);}//--------------------------中间标题-----------------------String titleText = typedArray.getString(R.styleable.TopTabToolView_title_text);if (!TextUtils.isEmpty(titleText)){titleBarTitle.setText(titleText);//设置字体颜色int titleTextColor = typedArray.getColor(R.styleable.TopTabToolView_title_color,Color.WHITE);titleBarTitle.setTextColor(titleTextColor);}//------------------------标题栏右边-------------------------boolean rightButtonVisible = typedArray.getBoolean(R.styleable.TopTabToolView_right_tab_visible,true);if (rightButtonVisible){titleBarRightBtn.setVisibility(VISIBLE);}else {titleBarRightBtn.setVisibility(INVISIBLE);}//设置文字String rightBtnText = typedArray.getString(R.styleable.TopTabToolView_right_tab_text);if (!TextUtils.isEmpty(rightBtnText)){titleBarRightBtn.setText(rightBtnText);int rightBtnTextColor = typedArray.getColor(R.styleable.TopTabToolView_right_tab_text_color,Color.WHITE);titleBarRightBtn.setTextColor(rightBtnTextColor);}//设置图标int rightBtnDrawable = typedArray.getResourceId(R.styleable.TopTabToolView_right_tab_drawable,-1);if (rightBtnDrawable != -1){titleBarRightBtn.setCompoundDrawablesWithIntrinsicBounds(0,0,rightBtnDrawable,0);}typedArray.recycle();}}public TopTabToolView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}/*** 设置标题* @param title*/public void setTitle(String title){if (!TextUtils.isEmpty(title)){titleBarTitle.setText(title);}}/**** 左边点击* @param onClickListener*/public void setLeftOnClickListener(OnClickListener onClickListener){if (onClickListener != null){titleBarLeftImg.setOnClickListener(onClickListener);}}/**** 右边点击* @param onClickListener*/public void setRightOnClickListener(OnClickListener onClickListener){if (onClickListener != null){titleBarRightBtn.setOnClickListener(onClickListener);}}}

属性文件的设置也可以通过Java代码修改, 如: Title标题

4:Activity代码

public class Demo3Activity extends AppCompatActivity {TopTabToolView topTabToolView;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.demo3);initView();}private void initView(){topTabToolView = (TopTabToolView) findViewById(R.id.tab1);topTabToolView.setTitle("代码设置标题");topTabToolView.setLeftOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});topTabToolView.setRightOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(Demo3Activity.this,"关闭",Toast.LENGTH_LONG).show();}});}}

效果图:

源码地址:/DickyQie/android-custom-control

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。