创建自定义控件

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { font: 11.0px Helvetica }
span.s2 { }
span.s3 { font: 11.0px "PingFang SC" }

1.引入布局

新建一个title.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    >

    <Button
        android:id="@+id/title_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:text="Back"
        android:textColor="#fff"
        />

    <TextView
        android:id="@+id/title_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:text="Title Text"
        android:textColor="#aaa"
        android:textSize="24sp"
        />

    <Button
        android:id="@+id/title_edit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_margin="5dp"
        android:text="Edit"
        android:textColor="#fff"
        />

</LinearLayout>

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { font: 11.0px "PingFang SC" }
span.s2 { }

修改activity_main.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <include layout="@layout/title" />

</LinearLayout>

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px }
span.s1 { }
span.s2 { font: 11.0px "PingFang SC" }

通过<include layout=“”>来调用布局

同时修改MainActivity.java代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionbar = getSupportActionBar();
        if (actionbar != null) {
            actionbar.hide();
        }
    }

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #000000 }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000; min-height: 13.0px }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { font: 11.0px Helvetica }
span.s2 { }
span.s3 { font: 11.0px "PingFang SC" }

2.创建自定义控件

新建一个Title_Layout继承LineraLayout

public class TitleLayout extends LinearLayout {
    public TitleLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title, this);
    }
}

重写LinearLayout中带有来那个参数的构造函数,然后通过LayoutInflater的form方法构建一个LayoutInflater对象,调用inflate()方法动态加载布局,inflate方法可以接受两个参数,一个是要加载的布局文件id即我们传入的R.layout.title,还有一个为指定的TitleLayout,直接写入this。

修改activity_main.xml中代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <com.example.uilayouttest.TitleLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />
</LinearLayout>

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { font: 11.0px "PingFang SC" }
span.s2 { }

修改TitleLayout中代码

import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

/**
 * Created by Andy on 2017/5/28.
 */

public class TitleLayout extends LinearLayout {
    public TitleLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        LayoutInflater.from(context).inflate(R.layout.title, this);
        Button titleBack = (Button) findViewById(R.id.title_back);
        Button titleEdit = (Button) findViewById(R.id.title_edit);
        titleBack.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ((Activity) getContext()).finish();
            }
        });
        titleEdit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(), "You clicked Edit button",
                    Toast.LENGTH_SHORT).show();
            }
        });
    }
}

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Helvetica; color: #000000 }
span.s1 { font: 11.0px "PingFang SC" }
span.s2 { }

其中通过findViewById()方法获取到按钮的实例,分别调用setOnClickListener()方法

时间: 2024-10-11 13:27:49

创建自定义控件的相关文章

android:创建自定义控件

在前面两节我们已经学习了 Android 中的一些常见控件以及基本布局的用法,不过当时 我们并没有关注这些控件和布局的继承结构,现在是时候应该看一下了,如图 3.26 所示. 图   3.26 可以看到,我们所用的所有控件都是直接或间接继承自 View 的,所用的所有布局都是 直接或间接继承自 ViewGroup 的.View 是 Android 中一种最基本的 UI 组件,它可以在屏幕 上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是 在 View 的基础之上又

android学习七(创建自定义控件)

前面学习的是android的基本控件和布局的使用,但是基本的控件和布局有时候并不能实现复杂的布局.我们来看下各种控件和布局的关系. 可见所有的控件都是直接或者间接的继承自View的,所有的布局都是直接或者间接基础自ViewGroup的.View是Android中一种最基本的UI组件,它可以在屏幕的上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在View的基础上又添加了各种各自特有的功能.而ViewGroup则是一种特殊的View,它可以包含很多的View和子Vi

android嵌入式布局并创建自定义控件

一.如何在android中嵌入布局文件: 新建一个布局title.xml,该文件为公共文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@draw

Andriod - 创建自定义控件

控件和布局的继承结构: 可以看到,我们所用的所有控件都是直接或间接继承自 View的,所用的所有布局都是直接或间接继承自 ViewGroup 的.View 是 Android 中一种最基本的 UI 组件,它可以在屏幕上绘制一块矩形区域,并能响应这块区域的各种事件,因此,我们使用的各种控件其实就是在 View的基础之上又添加了各自特有的功能.而 ViewGroup 则是一种特殊的 View,它可以包含很多的子 View 和子 ViewGroup,是一个用于放置控件和布局的容器.这个时候我们就可以思

duilib开发基础:创建自定义控件的过程

转载请说明原出处,谢谢~·http://blog.csdn.net/zhuhongshu/article/details/45362751 用Duilib开发界面时,很多情况下库自带的控件不满足需求,就需要基于Duilib建立自定义控件(自绘新的控件,或者用来封装win32的子窗体,来显示视频.网页等). 在群里经常会有刚接触Duilib的朋友问题怎么建立自己的自定义控件,或者建立的控件无法正常创建出来.我简单写一篇博客,把创建自定义控件的完整过程,和一些注意事项说明一下.另外说一下如果把win

如何在Swift中创建自定义控件

更新通知:这篇引导教程由Mikael Konutgan使用iOS 8和Swift语言重新制作,在Xcode6和7上测试通过.原始教程是由Colin Eberhardt团队制作的. 用户界面控件是许多应用的重要组成部分.使用这些控件,可以让用户查看应用的内容或与他们的应用进行交互.苹果提供了一个控件集,像UITextField, UIButton 和 UISwitch.灵活使用这些工具箱中已经存在的控件,可以让你创建各种各样的用户界面. 但是,有的时候你可能需要做一些与众不同的事情:库中的控件已经

android创建自定义控件

新建一个布局title.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content&q

Android第五天--&gt;创建自定义控件

1.仿 iPhone 的风格,在界面的顶部放置一个标题栏. <?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=&quo

《Android第一行代码》学习记录008 - 创建自定义控件

一.关于View与布局,首先上图 从图中可以看到: View是Android中最基本的UI组件,它可以在屏幕上绘制一块矩形区域,并能响应这个区域的各种事件: ViewGroup是一种特殊的View,它可以包含很多子View和子ViewGroup,是一种用于放置控件和布局的容器: 我们所使用的所有控件都是直接或间接继承View的,各种控件其实就是在View的基础上添加了各自的功能: 所有布局都是直接继承自ViewGroup的: 二.定义自定义控件需要: 自定义控件的布局文件: 自定义控件的类: 以