Android最简单的自定义控件示例

Android自定义控件常见的有如下几种方式

  • 继承View

  • 继承Button等已有的控件

  • 继承ViewGroup

  • 继承LinearLayout等已有的ViewGroup

其中第四种是最简单也是最常用的方式,通过继承LinearLayout等已有的ViewGroup,里面再放一些Buttong、TextView等其他已有的控件或ViewGroup,把他们组装起来就形成了一个新的自定义控件,再通过自定义的属性就可以对控件的一些属性进行赋值,达到复用的效果

虽然说很简单,但是每次写要重新百度下怎么写,这里写一个自定义的标题栏当做备忘,也分享给大家

public class TitleView extends FrameLayout {
     private TextView title;
     private TypedArray typedArray;
     public TitleView(Context context, AttributeSet attrs) {
          super(context, attrs);
          LayoutInflater.from(context).inflate(R.layout.title_bar_layout, this, true);
          typedArray=context.obtainStyledAttributes(attrs, R.styleable.title_bar);
          initTitle();
          typedArray.recycle();
     }
    
     /**
     * 初始化标题。
     */
     private void initTitle() {
          title = (TextView) findViewById(R.id.title_bar_title);
          String titleName = typedArray.getString(R.styleable.title_bar_title_name);
          title.setText(titleName);
     }
    
     
     public void setTitle(String titleName) {
          title.setText(titleName);
     }
    
     public void setTitle(int titleName) {
          title.setText(titleName);
     }
}

布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
        android:id="@+id/title_bar_title"
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="45dp"/>
</FrameLayout>

自定义属性,定义在values/attrs.xml文件中

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="title_bar">
        <attr name ="title_name" format= "string"/>
    </declare-styleable >
</resources>

使用

<?xml version="1.0" encoding= "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    //命名空间的名字随意,后面的值由http://schemas.android.com/apk/res/+应用的包名
    //xmlns:app="http://schemas.android.com/apk/res-auto"(这种格式也行)
    xmlns:app="http://schemas.android.com/apk/res/cn.himmy.title"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#EFEFE7"
    android:gravity="center_horizontal"
    android:orientation="vertical" >
       <com.imcore.yunming.common.ui.TitleView
          android:id="@+id/mine_edit_title"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          //前缀和命名空间的命名一致,属性名在value/attrs资源文件中定义。
          app:title_name="野原新一"/>
</LinearLayout>

代码很简单,功能也很简单,就是一个标题栏,可以通过app:title_name自定义属性设置标题,虽然简单,但是写法很通用

只要写法懂了,可以通过这种方式组装出任何复杂的自定义控件

比如可以在这个自定义控件左边加一个返回按钮,右边加一个功能按钮等等

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值