1.创建一个类继承与Relativelayout
QQ截图20191020104519.png
2.
1.png
//定义一个变量保存外部设置的背景颜色 默认灰色
private int lwk_background=Color.DKGRAY;
3.用java代码创建控件
//记录是否需要返回按钮
private boolean show_back=false;
//返回按钮
private Button back;
//返回按钮的布局属性
private LayoutParams params;
//1.使用java代码创建控件
public LWKNavitionBar(Context context) {
// super(context);
// init();
this(context,null);
}
4.使用xml创建控件
//2.使用xml创建控件
public LWKNavitionBar(Context context, AttributeSet attrs){
super(context,attrs);
init(context,attrs);
}
5.
<!--2.xml方式创建控件-->
<swu.lwk.a12_navigationbar.LWKNavitionBar
android:id="@+id/na"
android:layout_width="match_parent"
android:layout_height="64dp"
app:lwk_background="#F32322"
app:show_back="true"
app:back_title="返回到主页"
/>
6.初始化控件
//初始化控件
private void init(Context context,AttributeSet attrs){
//设置横向布局
//setOrientation(LinearLayout.HORIZONTAL);
//设置背景
setBackgroundColor(Color.GRAY);
//设置内容垂直居中
setGravity(Gravity.CENTER_VERTICAL);
//判断是不是xml配置的
if (attrs!=null){
//从attrs里面提取xml里面配置的所有属性
TypedArray typedArray=context.obtainStyledAttributes(attrs,
R.styleable.LWKNavitionBar);
//提取自己需要的属性
int color=typedArray.getColor(R.styleable.LWKNavitionBar_lwk_background,
Color.MAGENTA);
//是否需要返回按钮
boolean show=typedArray.getBoolean(R.styleable.LWKNavitionBar_show_back,false);
//取返回按钮的标题
String title=typedArray.getString(R.styleable.LWKNavitionBar_back_title);
//使用数据
setLwk_background(color);
setShow_back(show,title);
}
}
7.创建按钮,按钮布局属性和返回按钮
public void setShow_back(boolean show_back,String title) {
this.show_back = show_back;
if(show_back==true){
//创建返回按钮
back=new Button(getContext());
//点击事件
//设置按钮布局属性
params=new LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT
,ViewGroup.LayoutParams.WRAP_CONTENT);
params.leftMargin=(int)(10*getResources().getDisplayMetrics().density);
//设置标题
if (title!=null){
back.setText(title);
}else {
back.setText("Back");
}
//添加控件
addView(back,params);
}
}
8.用于区别按钮的左右
//用于区别左右
public interface LWKPosition{
int LEFT=0;
int RIGHT=1;
}
9.设置按钮显示的位置
//设置按钮显示的位置
public void setPostion(int position){
//判断是否有back按钮
if (back!=null) {
if (position == LWKPosition.LEFT) {
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
}else {
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
}
}
}
10.创建按钮的方法
public int getLwk_background() {
return lwk_background;
}
public void setLwk_background(int lwk_background) {
this.lwk_background = lwk_background;
//将外部传递过来的颜色 设置为背景颜色
setBackgroundColor(lwk_background);
}
public boolean isShow_back() {
return show_back;
}
11.在mainactivity里面进行操作,如果用xml来操作的时候要把 ”//setContentView(R.layout.activity_main);”这个的双斜杠打开而将“test();”这个用双斜杠注释
2.png