美文网首页
《Android第一行代码》first reading 五

《Android第一行代码》first reading 五

作者: 威宸 | 来源:发表于2017-01-10 15:39 被阅读0次

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

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

引入布局

  1. title.xml
    新建一个title布局文件,准备将布局文件引入main.xml中
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@color/colorTitle">
    <Button
        android:id="@+id/title_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@color/colorBack"
        android:text="Back"
        android:textColor="#fff"/>
    <TextView
        android:id="@+id/title_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:layout_weight="1"
        android:text="Title Text"
        android:textColor="#fff"
        android:textSize="24sp"/>
    <Button
        android:id="@+id/title_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:background="@color/colorEdit"
        android:text="Edit"
        android:textColor="#fff"/>
</LinearLayout>
  1. main.xml
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="soft.wc.com.uicustomviews.MainActivity">
    <include layout="@layout/title" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Hello World!" />
</LinearLayout>

<include layout="@layout/title" />我们只用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中引入自定义控件:
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="soft.wc.com.uicustomviews.MainActivity">
    <soft.wc.com.uicustomviews.TitleLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

相关文章

网友评论

      本文标题:《Android第一行代码》first reading 五

      本文链接:https://www.haomeiwen.com/subject/awlkbttx.html