zoukankan      html  css  js  c++  java
  • Android中自己定义组件和它的属性

    好长时间没有更新博客了。本来想积累点有深度的东西发,但一直没有找到非常好的点。所以。写一些基础的东西。就当积累吧。

    Android开发中难免会用到自己定义的组件。以下以ImageButton为例来介绍怎么自己定义组件和它的属性:

    第一步、在values/attrs.xml中为组件自己定义属性:
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <declare-styleable name="CustomBtn">
            <attr name="text" format="string"/>
            <attr name="textColor" format="color" />
            <attr name="textSize" format="dimension" />
        </declare-styleable>
    </resources>

    第二步、重写ImageButton类:
    public class CustomBtn extends ImageButton
    {
     private Paint paint;
     private String text;
     
     public CustomBtn(Context context, AttributeSet attrs)
     {
      super(context, attrs);
     
      paint=new Paint();
      TypedArray typeArray=context.obtainStyledAttributes(attrs,R.styleable.CustomBtn);
      int color=typeArray.getColor(R.styleable.CustomBtn_textColor,Color.WHITE);
      float textSize=typeArray.getDimension(R.styleable.CustomBtn_textSize,20);
      text=typeArray.getString(R.styleable.CustomBtn_text);
     
      paint.setTextAlign(Align.CENTER);
      paint.setColor(color);
      paint.setTextSize(textSize);
      typeArray.recycle();
     }
     
     @Override
     protected void onDraw(Canvas canvas)
     {
      super.onDraw(canvas);
      canvas.drawText(text,canvas.getWidth()/2,canvas.getHeight()/2+10, paint);
     }

     public String getText() {
      return text;
     }

     public void setText(String text) {
      this.text = text;
     }
    }

    第三步、在布局文件里使用CustomBtn:
    当中xmlns:custombtn中为AndroidManifest.xml中的包名

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custombtn="http://schemas.android.com/apk/res/com.yeahis.shuyudragstore"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="@dimen/market_category_height"
    android:background="@drawable/mall_category_item">

    <com.yeahis.shuyudragstore.widget.CustomBtn
    android:id="@+id/mall_category_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:background="@android:color/transparent"
    android:src="@drawable/mall_category_title"
    custombtn:text="@string/mall_category_title"
    custombtn:textColor="@android:color/black"
    custombtn:textSize="15sp"/>

    </RelativeLayout>

    第四步、假设想要在程序中动态改变CustomBtn上的文字则在程序中这样:
    比如CustomBtn customBtn=(CustomBtn) convertView.findViewById(R.id.mall_category_btn);

    customBtn.setText("在程序中加入的文字");


  • 相关阅读:
    判断ios版本
    DBL_EPSILON和 FLT_EPSILON的用法
    __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
    ios俩个APP之间跳转、传值,以及直接跳转到指定app页面 或者 app 评价页面 的方法
    如何参与GitHub开源项目
    第202题:快乐数
    第217题:存在重复元素
    第234题:回文链表
    第242题:有效的字母异位词
    JAVASRIPT
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5251625.html
Copyright © 2011-2022 走看看