一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

android初學者——自定義控件(繼承View)

 昵稱11482448 2013-08-22


對于像我一樣的新手,我們習慣用android自帶的控件和傳統(tǒng)的布局方式。
但對于高手,布局卻是如下:
<?xml version="1.0" encoding="utf-8"?>







其中A extends LinerLayout, B extends TextView.
上面的話引用自:http://blog.csdn.net/Android_Tutor/article/details/5499731
ok,不說廢話。
首先,我們來認識一下android自帶的控件構成。
比如button,我們知道,要添加一個button,我們首先應該在XML文件中聲明一個button,然后在下面定義它的id,文本大小,顏色,背景等屬性。之后我們要在java程序中引用這個button,就像下面:

1
2
3
4
5
6
public class MainActivity extends Activity {
    private Button button;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        button=(Button)this.findViewById(R.id.button1);

所以,對于我們的自定義控件來說,我們要做的有這么兩點:
1.我們需要一個屬性集,里面定義了一系列的屬性,比如顏色,字體大小之類。
2.需要一個類繼承View并覆寫它的一些方法,尤其是構造函數(shù)。
對于第一條,我們要在res/values目錄下新建一個文件,名字為attrs.xml,里面定義一些屬性,如下:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">  
        <attr name="textColor" format="color" />  
        <attr name="textSize" format="dimension" />  
    </declare-styleable>  
</resources>

說明:name="MyView"的意思是我們這個屬性集的名字為MyView。
attr name="textColor" format="color"的意思是有一個名為textColor的屬性,格式為color。(android有很多格式,自行百度吧)。后一句同理。
對于第二條,看代碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class Sss extends View {
    private Paint mPaint;  
       private Context mContext;  
       private int textColor;
       private float textSize;
      private static final String mString = "http://my./754060";   
      public Sss(Context context) {  
         super(context);  
         mPaint = new Paint();  
      }  
      public Sss(Context context,AttributeSet attr)  
    {  
        super(context,attr);  
        mPaint = new Paint();  
        //從myview這個屬性集(之前定義的名字)中取得屬性列表
        TypedArray a = context.obtainStyledAttributes(attr,  R.styleable.MyView);  
         /*從屬性集中獲得顏色 ,getcolor的兩個參數(shù)的含義是:當我們引用這個控件的XML文件中沒有給出這個值的話,就使用第二個參數(shù)(默認值),就比如我們button控件,如果我們在XML文件中沒有給出button的text屬性值的話就默認為"text1"。R.stytle.textcolor在attrs.xml定義之后自動生成。*/
        textColor = a.getColor(R.styleable.MyView_textColor,  0XFFFFFFFF);  
        textSize = a.getDimension(R.styleable.MyView_textSize, 36);  
        //Give back a previously retrieved StyledAttributes, for later re-use.
        a.recycle();  
      }  
    @Override  
    protected void onDraw(Canvas canvas) {  
        // TODO Auto-generated method stub  
        super.onDraw(canvas);  
        mPaint = new Paint();  
        //設置填充  
        mPaint.setStyle(Style.FILL);  
        mPaint.setColor(textColor);
        mPaint.setTextSize(textSize);
        //畫一個矩形,前兩個是矩形左上角坐標,后兩個是右下角坐標  
        canvas.drawRect(new Rect(10, 10, 100, 100), mPaint);  
        //繪制文字  
        canvas.drawText(mString, 10, 120, mPaint);  
    }  

到此我們的自定義控件算完成了,那怎么使用呢?
兩步,
1.在XML中聲明
2.java中引用這個控件
首先,看XML代碼:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas./apk/res/android"
    xmlns:asd="http://schemas./apk/res/com.example.test_1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <com.example.test_1.Sss
        android:id="@+id/sds"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        asd:textColor="#FFF"
        asd:textSize="50px" />
</LinearLayout>

說明:xmlns:asd="http://schemas./apk/res/com.example.test_1xmlns:asd為命名空間,asd隨便娶個名字,方便后面調用(asd:textColor="#FFF"中 asd:textSize="50px")
com.example.test_1.Sss為包名+類名
然后在java程序中與普通的控件一樣引用,只不過Button換成Sss,button1換成sds,你懂的~


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美大黄片在线免费观看| 日韩不卡一区二区在线| 厕所偷拍一区二区三区视频| 99热九九热这里只有精品| 亚洲视频偷拍福利来袭| 国产一区二区三区午夜精品| 成人精品网一区二区三区| 毛片在线观看免费日韩| 亚洲中文字幕免费人妻| 熟女少妇久久一区二区三区| 清纯少妇被捅到高潮免费观看| 亚洲一区二区三区精选| 日韩人妻有码一区二区| 国产欧美日韩一级小黄片| 色老汉在线视频免费亚欧| 亚洲精品有码中文字幕在线观看| 亚洲精品蜜桃在线观看| 色哟哟国产精品免费视频| 中文字幕亚洲精品乱码加勒比| 中文字幕亚洲视频一区二区| 超薄丝袜足一区二区三区| 91亚洲国产日韩在线| 福利视频一区二区在线| 国产成人精品午夜福利| 黄色三级日本在线观看| 国产精品日韩精品最新| 日韩精品一级片免费看| 精品al亚洲麻豆一区| 亚洲综合伊人五月天中文| 91欧美亚洲精品在线观看| 国产传媒一区二区三区| 欧美日韩成人在线一区| 亚洲一区二区三区中文久久| 欧美成人一区二区三区在线| 色丁香一区二区黑人巨大| 国产传媒一区二区三区| 欧美日韩国产精品黄片| 中文字日产幕码三区国产| 日本加勒比系列在线播放| 国产精品一区二区视频成人| 国产精品十八禁亚洲黄污免费观看|