android 自定义view
android怎么自定义vie呢?不知道的小伙伴来看看长沙家政网小编今天的分享吧!
android可以通过组合控件来实现自定义vie。组合控件就是将系统原有的控件进行组合,构成一个新的控件。这种方式下,不需要开发者自己去绘制图上显示的内容,也不需要开发者重写onMeasure,onLayout,onDra方法来实现测量、布局以及dra流程。
具体操作
1、定义标题栏布局文件
定义标题栏的布局文件custom_title_vie.xml,将返回按钮和标题文本进行组合。这一步用于确定标题栏的样子,代码如下所示
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android./apk/res/android"
android:layout_idth="match_parent"
android:layout_height="rap_content"
android:background="@android:color/holo_orange_light">
<Button
android:id="@+id/btn_left"
android:layout_idth="rap_content"
android:layout_height="rap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="5dp"
android:text="Back"
android:textColor="@android:color/hite" />
<TextVie
android:id="@+id/title_tv"
android:layout_idth="rap_content"
android:layout_height="rap_content"
android:layout_centerInParent="true"
android:text="Title"
android:textColor="@android:color/hite"
android:textSize="20sp" />
</RelativeLayout>
2、根据给定布局实现自定义Vie
public class CustomTitleVie extends FrameLayout implements Vie.OnClickListener {
private Vie.OnClickListener mLeftOnClickListener;
private Button mBackBtn;
private TextVie mTittleVie;
public CustomTitleVie(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.custom_title_vie, this);
mBackBtn = findVieById(R.id.btn_left);
mBackBtn.setOnClickListener(this);
mTittleVie = findVieById(R.id.title_tv);
}
@Override
public void onClick(Vie v) {
sitch (v.getId()) {
case R.id.btn_left:
if (mLeftOnClickListener != null) {
mLeftOnClickListener.onClick(v);
}
break;
}
}
public void setLeftOnClickListener(Vie.OnClickListener leftOnClickListener) {
mLeftOnClickListener = leftOnClickListener;
}
public void setTittle(String title){
mTittleVie.setText(title);
}
}
说明
(1)代码中对外提供了两个接口,一是动态设置标题,二是使用者可以自定义返回按钮的点击事件。
(2)CustomTitleVie的构造函数,要选择两个参数的,选择其它参数的构造函数会报错。这一点是笔者开发机测试的结果,暂时不清楚是不是所有手机上都是这样。
(3)这里是继承的FrameLayout,继承LinearLayout,RelativeLayout等系统布局控件都可以。之所以要继承这些系统现成的VieGroup,是因为这样可以不用再重写onMeasure,onLayout等,这样省事很多。由于这里是一个布局控件,要用LayoutInflater来填充,所以需要继承VieGroup,如果继承Vie的直接子类,编译会不通过。所以,CustomTitleVie自己就是一个容器,完全可以当成容器使用,此时CustomTitleVie自身的内容会和其作为父布局添加的子控件,效果会叠加,具体的叠加效果是根据继承的容器特性决定的。
3、在Activity的布局文件中添加CustomTitleVie。
在Activity的布局文件activity_custom_vie_pose_demo.xml中,像使用系统控件一样使用CustomTitleVie即可。CustomTitleVie自己就是继承的现成的系统布局,所以它们拥有的属性特性,CustomTitleVie一样拥有。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android./apk/res/android"
android:layout_idth="match_parent"
android:layout_height="match_parent">
<.example.demos.customviedemo.CustomTitleVie
android:id="@+id/customvie_title"
android:layout_idth="match_parent"
android:layout_height="rap_content">
</.example.demos.customviedemo.CustomTitleVie>
</RelativeLayout>
4、在Activity中操作CustomTitleVie,代码如下
1 public class CustomVieComposeDemoActivity extends AppCompatActivity { 2 3 private CustomTitleVie mCustomTitleVie; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentVie(R.layout.activity_custom_vie_pose_demo); 8 mCustomTitleVie = findVieById(R.id.customvie_title); 9 mCustomTitleVie.setTittle("This is Title");10 mCustomTitleVie.setLeftOnClickListener(ne Vie.OnClickListener() {11 @Override12 public void onClick(Vie v) {13 finish();14 }15 });16 17 }18 }
在第8行中,获取到CustomTitleVie实例,第9行设置标题文字,第10行自定义“Back”按钮点击事件。
5、效果图
按照如上的4步,就通过组合控件完成了一个比较简单的自定义标题栏。
以上就是长沙家政网小编今天的分享了,希望可以帮助到大家。
家电上门维修
- apple官方售后维修中心 芜湖apple官方售后维修中心
- 24小时上门修手机 闪修侠上门维修电话
- 戴尔电脑售后维修服务中心 戴尔笔记本电脑售后
- 北京上门维修电脑服务 北京上门维修电脑服务电
- apple官方售后维修点查询 apple官方售后维修点查询
- 24小时上门维修电话 宿州爱玛24小时上门维修电话
- 创维电视维修 创维电视维修收费标准
- 宝珀售后维修中心服务 宝珀售后维修中心服务内
- 24小时上门维修水电电话 附近上门水电维修电话
- 宝玑维修费用 宝玑维修费用多少钱
- 联想电脑售后维修服务网点 上海联想电脑售后维
- 维修变速箱费用多少钱 维修瑞虎8变速箱费用多少
- 雅典维修点:雅典维修点过年放假文案
- 微软surface维修服务中心 surface官方维修中心地址
- 江诗丹顿售后维修中心电话 江诗丹顿官方售后网
- 雅典售后维修电话 雅典售后维修电话号码