《Android第一行代码》first reading 五

我们所用的所有控件都是直接或间接继承自View的,所用的所有布局都是直接或间接继承自ViewGroup的。

《Android第一行代码》first reading 五_第1张图片
常用控件和布局的继承关系.png

View是Android中最基本的一种UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在View的基础上又添加了各自特有的功能。而ViewGroup则是一种特殊的View,它可以包含很多子View和子ViewGroup,是一个用于放置控件和布局的容器。

引入布局

  1. title.xml
    新建一个title布局文件,准备将布局文件引入main.xml中

    
  1. main.xml

    
    

我们只用include语句就可将title布局引入进来。

  1. BaseActivity
public abstract class BaseActivity extends AppCompatActivity{
    protected Context mContext;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.mContext = this;
        int layoutId = getLayoutId();
        View contentView = LayoutInflater.from(mContext).inflate(layoutId,null,false);
        setContentView(contentView);
        hideActionBar();
        initView();
    }
    /**
     *初始化界面
     */
    public abstract void initView();
    /**
     *隐藏标题栏
     */
    public void hideActionBar(){
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null){
            actionBar.hide();
        }
    }
    /**
     * 获取布局文件的id
     *
     * @return
     */
    public abstract int getLayoutId();
}

getSupportActionBar()方法来获得ActionBar实例,然后再调用ActionBar的hide()方法将标题栏隐藏起来。

创建自定义控件

  1. 新建一个TitleLayout类继承LinearLayout:
public class TitleLayout extends LinearLayout{
    public TitleLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title,this);
    }
}

通过LayoutInflateer的from()方法可以构建出一个LayoutInflater对像,然后调用inflate()方法就可以动态的加载一个布局文件,inflate()方法接受两个参数,一个是要加载的布局的id,一个是布局放置的父文件。

  1. 在main.xml中引入自定义控件:

    

你可能感兴趣的:(《Android第一行代码》first reading 五)