android 自定义view
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步,就通过组合控件完成了一个比较简单的自定义标题栏。
-
2020年汽车强制保险多少钱?
主要还取决于你是新车还是旧车,全国的保险公司交强险基本是一致的:1、交强险的费率是固定的,如果您是普通家用车,是新车,那么第一年的交强险保费为950元,2、如果是第二年购买交强...
问答查看全文>> -
高尔夫7汽油滤芯在什么位置
高尔夫7的汽油滤芯在油箱里面,和汽油泵在一起。汽油滤芯的作用就是过滤汽油中的杂质,使进入发动机内部燃烧的汽油更干净,燃烧更充分。一汽大众全新高尔夫出自于大众最先进的MQB平台,...
问答查看全文>> -
白敬亭多买几条裤子吧是什么梗 白敬亭多买几条裤子吧是什么意思
白敬亭多买几条裤子吧是什么梗?白敬亭多买几条裤子吧是什么意思?很多小伙伴们都还不知道,下面就和小编一起来看看吧。白敬亭多买几条裤子吧是什么梗而网上流传的关于白敬亭的消息,有很多...
热词查看全文>> -
后宫是什么意思 小说后宫、收入后宫、动漫后宫是什么意思
后宫,一般是指小说、电视剧或动漫中,男主和n女都有暧昧关系,男主成功攻略女生之后,就是说这女的入了后宫了。。。 小说后宫、收入后宫、动漫后宫,意思基本都一样。后宫这个...
热词查看全文>> -
中秋节文案简短唯美 唯美文案简短温柔
1、我要给你一个最难忘的中秋节,让你在每个月圆之夜,都会想起我们一起走过的日子。2、你的好朋友祝你:日圆月圆,团团圆圆!官源财源,左右逢源!人缘福缘,缘缘不断!情愿心愿,愿愿随...
句子查看全文>>
推荐
- 1别克君威后备箱怎么开385
- 2曼秀雷敦小蜜油哪个味道好 曼秀雷敦小蜜油怎么样317
- 3表达心情不好句子大全297
- 4纳米蓝光消毒喷雾枪有用吗126
- 52019宝马x1用的什么发动机108
- 6朋友圈表白的话公布恋情的句子(晒情侣照片配的说说文案短句)410
- 7sassou金箔眼霜好不好 sassou金箔眼霜值得入手吗154
- 8激励年轻人奋斗的经典语录 对奋斗的感悟和思考483