Android自定义布局相关的一些笔记
这个笔记主要记录自己关于Android中自定义布局的相关操作的理解
仅布局
这个其实比较简单且好理解,只需要写好一个xml并且在另一个xml中引入就好了
- 示例:自定义的xml “title.xml”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorAccent"
android:orientation="horizontal">
<Button
android:id="@+id/titleback"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="返回"
android:layout_gravity="left"/>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:gravity="center"
android:text="自定义布局" />
<Button
android:id="@+id/titleedit"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="自定义"
/>
</LinearLayout> - 在其他布局中引入非常简单
1
<include layout="@layout/title"/>
但是这样会存在一个问题,每次在引入自定义布局之后,如果想要有动态实现,都必须要重写里面的监听器方法,而许多按钮的方法是相同的,会浪费大量的时间在重复的事情上
所以需要通过代码新建自定义布局
通过代码新建自定义布局
- 通过代码新建自定义布局依然需要我们自己实现一个xml布局
- 然后编写一个普通的类(不是Acticity)继承各个基础Layout布局(取决于你xml中使用的布局)
- 重写其中的一个构造方法,在该方法中使用LayoutInflater进行动态渲染
- 看下代码中的注释吧
- xml就是上面的title.xml
- 通过代码新建,可以直接实现里面的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38package com.example.ckxgo.listview;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
/**
* Created by ckxgo on 2018/10/15.
*/
public class TitleactLayout extends LinearLayout {
public TitleactLayout(Context context) {
super(context);
}
public TitleactLayout(Context context, { AttributeSet attrs)
super(context, attrs);
//使用LayoutInflater的from方法获取一个上下文
//通过Context类的inflate()方法渲染一个layout
//合起来就写成这个样子
//还可以添加一些方法
LayoutInflater.from(context).inflate(R.layout.title,this);
Button goBack = (Button) findViewById(R.id.titleback);
Button goEdit = (Button) findViewById(R.id.titleedit);
goBack.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
((Activity)getContext()).finish();
}
});
}
} - 在layout中引入
1
2
3
4<com.example.ckxgo.listview.TitleactLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
</com.example.ckxgo.listview.TitleactLayout>
本文作者:Keshane
评论