Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 結合Android命名空間,自定義一個橫向柱狀圖

結合Android命名空間,自定義一個橫向柱狀圖

編輯:關於Android編程

話不多說先上圖:

\

類似於這樣的效果,很簡單。這是一個listview,item是自定義的view,有兩個特點:

 

傳入長度,動態改變柱狀圖的長度;根據長度改變色值,長度越長越紅,反之越黃。

 

用到的知識點無非是paint在canvas上畫圖,這裡不贅述,想了解但是不了解的童鞋可以看我上一篇日志。

 

 

在這裡最想提到的一點是關於Android命名空間的使用。

是怎麼想到的呢,我發現當我想往自定義的view中傳入一個值如果按照常規的方式,只能使用setXXX()方法,但這個前提是此view對象已經被創建出來而且需要主動調用setXXX方法。怎麼樣才能在初始的時候就能像構造方法一樣根據給定的值創建這個View呢?因為view的使用是在xml中使用的,不能去調用構造方法。那我們怎麼辦呢,這時候就需要使用命名空間了。也就是像xml中android:layout_height=20dp這樣給view賦值一樣,這是二級結構的前面的android就是命名空間,只不過這個是android自己的而已。我們需要做的就是自己定義一個命名空間,我們可以拿過來用。

一、創建一個attrs.xml

 




    
        
        
        
        
        
    


like this,declare-styleable,顧名思義,聲明一個styleable類型,在我們下面的java代碼中,我們還需要從這裡邊將屬性取出來。

這裡我們定義了兩個int值:bar_height,bar_width,一個字符串值text。在下面我們馬上就能用到它們。

 

二、布局文件中

 

xmlns:myxmlns=http://schemas.android.com/apk/res/com.example.simple
    android:layout_width=wrap_content
    android:layout_height=match_parent >

    myxmlns:bar_height=40 >
    

 

這是listview中作為item的view,注意紅色部分,xmlns:myxmlns=http://schemas.android.com/apk/res/com.example.simple。使用的規則為,首先定義命名空間xmlns:namespace-prefix=namespaceURI。Android中xml中的使用是:xmlns:前綴=http://schemas.android.com/apk/res/ 應用程序包路徑;然後使用的時候按格式:namespace-prefix(前綴):屬性

myxmlns可以隨便寫,但要與下面的保持一致。這裡我們就可以使用在上面的attrs.xml中定義的屬性了,包括bar_height,bar_width,text等等上面你自定義的屬性。

 

三、在代碼中使用上面我們預設的屬性

 

 public BarChartView(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BarChartView);
        chartHeight = a.getInt(R.styleable.BarChartView_bar_height, 20);
        chartWidth = a.getResourceId(R.styleable.BarChartView_bar_width, 10);
        a.recycle();
        chartHeight = DisplayUtils.Dp2Px(context, chartHeight);
    }

我們可以在自定義的view的構造方法中將我們預設的值用上面的方法得到,使用我們第一步中聲明的styleable中將我們需要的屬性得到。

 

這樣我們的目的就達到了,使用了xml中預設的屬性,不用再使用setXXX方法去傳遞view中的參數。

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved