android可以通过组合控件来实现自定义view 。组合控件就是将系统原有的控件进行组合 , 构成一个新的控件 。这种方式下 , 不需要开发者自己去绘制图上显示的内容 , 也不需要开发者重写onMeasure , onLayout , onDraw方法来实现测量、布局以及draw流程 。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 exts 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 exts 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步 , 就通过组合控件完成了一个比较简单的自定义标题栏 。
以上就是小编今天的分享了 , 希望可以帮助到大家 。
【android 自定义view】
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
