您的位置:首页 > 其它

自定义控件(18)---自定义控件之面板思想---addRule

2015-11-15 17:14 411 查看
attrs.xml(第一步,在这里)

[html] view
plaincopy

<?xml version="1.0" encoding="utf-8"?>

<resources>

<!-- R.styleable.TopBar_titleTextColor在R文件中是这样的形式 -->

<declare-styleable name="TopBar">

<!-- 文字 -->

<attr name="leftText" format="string" />

<attr name="rightText" format="string" />

<attr name="titleText" format="string" />

<!-- 文字颜色 -->

<attr name="leftTextColor" format="color" />

<attr name="rightTextColor" format="color" />

<attr name="titleTextColor" format="color" />

<!-- 文字大小 -->

<attr name="titleTextSize" format="dimension" />

<!-- 背景色 -->

<attr name="leftBackground" format="reference|color" />

<attr name="rightBackground" format="reference|color" />

</declare-styleable>

</resources>

activity_main.xml(命名空间需要注意)

[html] view
plaincopy

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

xmlns:app="http://schemas.android.com/apk/res/com.example.custometopbarui"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.sloop.topbar.MainActivity" >

<com.example.custometopbarui.TopBar

android:id="@+id/topbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:minHeight="48dp"

app:leftBackground="@drawable/ic_launcher"

app:leftText="左侧"

app:rightBackground="@drawable/ic_launcher"

app:rightText="右侧"

app:titleText="自定义标题"

app:titleTextColor="#ffffff"

app:titleTextSize="8sp" >

</com.example.custometopbarui.TopBar>

</RelativeLayout>

TopBar(注释很详细)

[java] view
plaincopy

package com.example.custometopbarui;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.view.Gravity;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.RelativeLayout;

import android.widget.TextView;

public class TopBar extends RelativeLayout {

/**

* 定义三个控件,

*/

private Button leftButton, rightButton;

private TextView title;

//左侧button属性

private int leftTextColor;

private Drawable leftBackground;

private String leftText;

//右侧button属性

private int rightTextColor;

private Drawable rightBackground;

private String rightText;

//title属性

private int titleTextColor;

private float titleTextSize;

private String titleText;

//因为容器

private LayoutParams leftParams, rirhtParams, titleParams;

//定义接口对象

private TopBarClickListener listener;

/**

* 点击事件监听器接口

* @author Administrator

*

*/

public interface TopBarClickListener {

public void leftclick();

public void rightclick();

}

//设置监听器

public void setOnTopBarClickListener(TopBarClickListener listener){

this.listener = listener;

}

/**

* 对外暴露的方法

* @param visible

*/

public void setLeftIsVisible(boolean visible){

if (visible) {

leftButton.setVisibility(View.VISIBLE);

} else {

leftButton.setVisibility(View.GONE);

}

}

public void setRightIsVisible(boolean visible){

if (visible) {

rightButton.setVisibility(View.VISIBLE);

} else {

rightButton.setVisibility(View.GONE);

}

}

/**

* 构造器

* @param context

* @param attrs

*/

public TopBar(Context context, AttributeSet attrs){

super(context, attrs);

//获取自定义属性和值的映射集合

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopBar);

//取出自定义属性 - 左侧

leftTextColor = ta.getColor(R.styleable.TopBar_leftTextColor, Color.BLACK);

leftBackground = ta.getDrawable(R.styleable.TopBar_leftBackground);

leftText = ta.getString(R.styleable.TopBar_leftText);

//取出自定义属性 - 右侧

rightTextColor = ta.getColor(R.styleable.TopBar_rightTextColor, Color.BLACK);

rightBackground = ta.getDrawable(R.styleable.TopBar_rightBackground);

rightText = ta.getString(R.styleable.TopBar_rightText);

//取出自定义属性 - 标题

titleTextColor = ta.getColor(R.styleable.TopBar_titleTextColor, Color.BLACK);

titleTextSize = ta.getDimension(R.styleable.TopBar_titleTextSize, 12);

titleText = ta.getString(R.styleable.TopBar_titleText);

//回收TypedArray(避免浪费资源,避免因为缓存导致的错误)

ta.recycle();

/**

* 创建控件对象

*/

leftButton = new Button(context);

rightButton = new Button(context);

title = new TextView(context);

/**

* 为各个控件设置属性 - 左侧

*/

leftButton.setText(leftText);

leftButton.setTextColor(leftTextColor);

leftButton.setBackground(leftBackground);

//设置属性 - 右侧

rightButton.setText(rightText);

rightButton.setTextColor(rightTextColor);

rightButton.setBackground(rightBackground);

//设置属性 - 标题

title.setText(titleText);

title.setTextSize(titleTextSize);

title.setTextColor(titleTextColor);

title.setGravity(Gravity.CENTER);

//设置整体背景颜色

setBackgroundColor(0xfff59563);

/**

* 为各个控件设置布局 - 左

*/

//设置宽高

leftParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

//添加规则

leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, TRUE);

leftParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);

addView(leftButton, leftParams);//将按钮添加进布局中

//设置布局 - 右

rirhtParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

rirhtParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, TRUE);

rirhtParams.addRule(RelativeLayout.CENTER_VERTICAL, TRUE);

addView(rightButton, rirhtParams);//将按钮添加进布局中

//设置布局 - 标题

titleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

titleParams.addRule(RelativeLayout.CENTER_IN_PARENT, TRUE);

addView(title, titleParams);//将按钮添加进布局中

/**

* 设置监听器

*/

leftButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v){

//这里写一个接口回调方法,让外部去实现即可

listener.leftclick();

}

});

rightButton.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v){

listener.rightclick();

}

});

}

}

MainActivity

[java] view
plaincopy

package com.example.custometopbarui;

import com.example.custometopbarui.TopBar.TopBarClickListener;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Toast;

public class MainActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TopBar topBar = (TopBar) findViewById(R.id.topbar);

topBar.setLeftIsVisible(false);

// topBar.setRightIsVisible(false);

topBar.setOnTopBarClickListener(new TopBarClickListener() {

@Override

public void rightclick(){

Toast.makeText(MainActivity.this, "Right Clicked", Toast.LENGTH_SHORT).show();

}

@Override

public void leftclick(){

Toast.makeText(MainActivity.this, "Left Clicked", Toast.LENGTH_SHORT).show();

}

});

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: