Android 自定义titlebar控件(自定义UI控件)
生活随笔
收集整理的這篇文章主要介紹了
Android 自定义titlebar控件(自定义UI控件)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、創(chuàng)建自定義的屬性:
2、在自定義的布局中獲取屬性;
3、在mainActivity中使用 自定義控件,并使用自定義屬性賦值。
1、創(chuàng)建自定義的屬性創(chuàng)建
values/attr.xml 文件;
<?xml version="1.0" encoding="utf-8"?> <resources><declare-styleable name="Topbar"><attr name="title" format="string"/><attr name="title_color" format="color"/><attr name="title_size" format="dimension"/><attr name="btn_height" format="dimension"/><attr name="btn_margin" format="dimension"/><attr name="btn_vertical_margin" format="dimension"/><attr name="btn_horizontal_margin" format="dimension"/><attr name="right_text" format="string"/><attr name="left_text" format="string"/><attr name="right_background" format="reference|color"/><attr name="left_background" format="reference|color"/></declare-styleable> </resources>2、在自定義的布局中獲取屬性;
package com.sjzs.customui.ui;import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.Gravity; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView;import com.sjzs.customui.R;/*** Created by yy520 on 2018-3-24.*/public class TitleBar extends RelativeLayout{private Button leftButton,rightButton;private TextView titleText;private LayoutParams leftParams,rightParams,titleParams;private String title;private int titleColor;private float titleSize;private int btnMargin,btn_v_margin,btn_h_margin;private int btn_height;private String rightText;private String leftText;private Drawable rightBackground;private Drawable leftBackground;public void setRightOnClickListener(OnClickListener onClickListener){rightButton.setOnClickListener(onClickListener);}public void setLeftOnClickListener(OnClickListener onClickListener){leftButton.setOnClickListener(onClickListener);}public TitleBar(Context context, AttributeSet attrs) {super(context, attrs);TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.Topbar);title = ta.getString(R.styleable.Topbar_title);titleColor = ta.getColor(R.styleable.Topbar_title_color,0);titleSize = ta.getDimension(R.styleable.Topbar_title_size,0);btnMargin = (int) ta.getDimension(R.styleable.Topbar_btn_margin,0);btn_v_margin = (int) ta.getDimension(R.styleable.Topbar_btn_vertical_margin,0);btn_h_margin = (int) ta.getDimension(R.styleable.Topbar_btn_horizontal_margin,0);btn_height = (int) ta.getDimension(R.styleable.Topbar_btn_height,0);rightText = ta.getString(R.styleable.Topbar_right_text);leftText = ta.getString(R.styleable.Topbar_left_text);rightBackground = ta.getDrawable(R.styleable.Topbar_right_background);leftBackground = ta.getDrawable(R.styleable.Topbar_left_background);btn_v_margin = (int) ta.getDimension(R.styleable.Topbar_btn_vertical_margin,0);btn_h_margin = (int) ta.getDimension(R.styleable.Topbar_btn_horizontal_margin,0);ta.recycle();//回收資源,防止內(nèi)存泄漏leftButton = new Button(context);rightButton = new Button(context);titleText = new TextView(context);leftButton.setText(leftText);leftButton.setTextColor(titleColor);leftButton.setBackground(leftBackground);leftButton.setPadding(10,0,10,0);rightButton.setText(rightText);rightButton.setTextColor(titleColor);rightButton.setBackground(rightBackground);rightButton.setPadding(10,0,10,0);titleText.setText(title);titleText.setTextColor(titleColor);titleText.setTextSize(titleSize);titleText.setGravity(Gravity.CENTER);if(btn_v_margin == 0){btn_v_margin = btnMargin;}if(btn_h_margin == 0){btn_h_margin = btnMargin;}leftParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);leftParams.setMargins(btn_h_margin,btn_v_margin,0,btn_v_margin);//設(shè)置button高度,Android 默認(rèn)高度太高。if(btn_height!=0)leftParams.height = btn_height;addView(leftButton,leftParams);rightParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);rightParams.setMargins(0,btn_v_margin,btn_h_margin,btn_v_margin);if(btn_height!=0)rightParams.height = btn_height;addView(rightButton,rightParams);titleParams = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);addView(titleText,titleParams);} }3、在mainActivity布局中使用 自定義控件,并使用自定義屬性賦值。
Activity:
public class MainActivity extends AppCompatActivity {private Context context = this;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {TitleBar view = (TitleBar) findViewById(R.id.title_bar);view.setRightOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context,"Right",Toast.LENGTH_LONG).show();}});view.setLeftOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(context,"Left",Toast.LENGTH_LONG).show();}});} }Layout
<?xml version="1.0" encoding="utf-8"?> <!-- xmlns:app="http://schemas.android.com/apk/res-auto" 自定義屬性名稱空間,沒有它自定義屬性會(huì)報(bào)錯(cuò)--> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.sjzs.customui.MainActivity"><com.sjzs.customui.ui.TitleBarandroid:id="@+id/title_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/colorGreen"app:title = "標(biāo)題"app:title_color = "#FFFFFF"app:title_size = "7dp"app:right_text = "返回"app:left_text = "菜單"app:btn_height = "30dp"app:btn_horizontal_margin = "15dp"app:btn_vertical_margin = "10dp"app:left_background = "@drawable/button_bg_frame"app:right_background = "@drawable/button_bg_frame"></com.sjzs.customui.ui.TitleBar> </android.support.constraint.ConstraintLayout>其他屬性:
color;
按鈕背景:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"><stroke android:width="1dp"android:color="@color/white"/><solid android:color="@color/colorGreen"></solid><corners android:radius="3dp" /> </shape>總結(jié)
以上是生活随笔為你收集整理的Android 自定义titlebar控件(自定义UI控件)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html 设置不可用,NVIDIA 显示
- 下一篇: java解析xlsb文件_读取XLSB文