视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001 知道1 知道21 知道41 知道61 知道81 知道101 知道121 知道141 知道161 知道181 知道201 知道221 知道241 知道261 知道281
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
android 自定义view
2021-12-30 16:15:15 责编:李赢赢
文档

android怎么自定义view呢?不知道的小伙伴来看看小编今天的分享吧!

android可以通过组合控件来实现自定义view。组合控件就是将系统原有的控件进行组合,构成一个新的控件。这种方式下,不需要开发者自己去绘制图上显示的内容,也不需要开发者重写onMeasure,onLayout,onDraw方法来实现测量、布局以及draw流程。

具体操作:

1、定义标题栏布局文件

 定义标题栏的布局文件custom_title_view.xml,将返回按钮和标题文本进行组合。这一步用于确定标题栏的样子,代码如下所示:

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

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

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="@android:color/holo_orange_light">

<Button

android:id="@+id/btn_left"

 android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerVertical="true"

android:layout_marginLeft="5dp"

android:text="Back"

android:textColor="@android:color/white" />

<TextView

android:id="@+id/title_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="Title"

android:textColor="@android:color/white"

android:textSize="20sp" />

</RelativeLayout>

2、根据给定布局实现自定义View

public class CustomTitleView extends FrameLayout implements View.OnClickListener {

private View.OnClickListener mLeftOnClickListener;

private Button mBackBtn;

private TextView mTittleView;

public CustomTitleView(@NonNull Context context, @Nullable AttributeSet attrs) {

super(context, attrs);

LayoutInflater.from(context).inflate(R.layout.custom_title_view, this);

mBackBtn = findViewById(R.id.btn_left);

mBackBtn.setOnClickListener(this);

mTittleView = findViewById(R.id.title_tv);

}

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.btn_left:

if (mLeftOnClickListener != null) {

mLeftOnClickListener.onClick(v);

 }

break;

}

}

public void setLeftOnClickListener(View.OnClickListener leftOnClickListener) {

mLeftOnClickListener = leftOnClickListener;

}

public void setTittle(String title){

mTittleView.setText(title);

}

}

说明:

(1)代码中对外提供了两个接口,一是动态设置标题,二是使用者可以自定义返回按钮的点击事件。

(2)CustomTitleView的构造函数,要选择两个参数的,选择其它参数的构造函数会报错。这一点是笔者开发机测试的结果,暂时不清楚是不是所有手机上都是这样。

(3)这里是继承的FrameLayout,但是继承LinearLayout,RelativeLayout等系统布局控件都可以。之所以要继承这些系统现成的ViewGroup,是因为这样可以不用再重写onMeasure,onLayout等,这样省事很多。由于这里是一个布局控件,要用LayoutInflater来填充,所以需要继承ViewGroup,如果继承View的直接子类,编译会不通过。所以,CustomTitleView自己就是一个容器,完全可以当成容器使用,此时CustomTitleView自身的内容会和其作为父布局添加的子控件,效果会叠加,具体的叠加效果是根据继承的容器特性决定的。

3、在Activity的布局文件中添加CustomTitleView。

在Activity的布局文件activity_custom_view_compose_demo.xml中,像使用系统控件一样使用CustomTitleView即可。CustomTitleView自己就是继承的现成的系统布局,所以它们拥有的属性特性,CustomTitleView一样拥有。

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

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

android:layout_width="match_parent"

android:layout_height="match_parent">

<com.example.demos.customviewdemo.CustomTitleView

android:id="@+id/customview_title"

android:layout_width="match_parent"

android:layout_height="wrap_content">

</com.example.demos.customviewdemo.CustomTitleView>

</RelativeLayout>

 4、在Activity中操作CustomTitleView,代码如下:

 1 public class CustomViewComposeDemoActivity extends AppCompatActivity { 2  3     private CustomTitleView mCustomTitleView; 4     @Override 5     protected void onCreate(Bundle savedInstanceState) { 6         super.onCreate(savedInstanceState); 7         setContentView(R.layout.activity_custom_view_compose_demo); 8         mCustomTitleView = findViewById(R.id.customview_title); 9         mCustomTitleView.setTittle("This is Title");10         mCustomTitleView.setLeftOnClickListener(new View.OnClickListener() {11             @Override12             public void onClick(View v) {13                 finish();14             }15         });16 17     }18 }

在第8行中,获取到CustomTitleView实例,第9行设置标题文字,第10行自定义“Back”按钮点击事件。

5、效果图

按照如上的4步,就通过组合控件完成了一个比较简单的自定义标题栏。

以上就是小编今天的分享了,希望可以帮助到大家。

下载本文
显示全文
专题