自定義元件研究
接下來繼續研究我們的自定義元件。
有自定義元件< 二> 可以看出declear-styleable這個Android自己給我們提供的屬性標識很重要。declare-styleable的主要作用是給自定義控制元件新增自定義屬性時用的。
比如定義一個attr.xml問價件:
<declare-styleable name="mygridview">
<attr name="titles" format="reference|string" />
<attr name="title_iv" format="reference"/>
<attr name="return_icon" format="reference"/>
<attr name="setting_icon" format="reference"/>
</declare-styleable>
其中,format型別在上篇章節中已經提到:當format="dimension"/>來說,其屬性的名稱為"myTextSize",format指定了該屬性型別為dimension,只能表示字型的大小。
format還可以指定其他的型別比如;
reference 表示引用,參考某一資源ID string 表示字串 color 表示顏色值
dimension 表示尺寸boolean 表示布林值 integer 表示整型值 float 表示浮點值 fraction 表示百分數 enum 表示列舉值 flag 表示位運算
例如:
- <?xml version="1.0" encoding="utf-8"?>
- <resources>
- <declare-styleable name="lyTextView">
- <attr name="fontSize" format="dimension" />
- </declare-styleable>
- </resources>
我們只需要在xml佈局中引入我們的自定義類即包名.類名。
<包名.類名>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
</包名.類名>
其中,attr.xml怎樣引入呢,其是就是so easy的事了。
其中有2中方法可以用。實質上也是一種方式。即:
lyTextView:fontSize
= "40dp" lyTextView:font
Size = "textsize = 40dp"
由此可以看出,我們所自定義的屬性的引用類似於系統 的一樣,即android :fontSize = "";
因為系統的也是人寫出來的罷了,只是大牛寫出來整合到官方網上去,供我們使用而已。比葫蘆畫瓢誰不會?
另外:只要你在佈局中引入之後:例如:
public class MyGridView extends GridView{
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
setGirdView();
}
private void setGirdView() {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
setLayoutParams(params);
setNumColumns(3);// 設定每行列數
setGravity(Gravity.CENTER);// 位置居中
setVerticalSpacing(1);// 垂直間隔
setHorizontalSpacing(1);// 水平間隔
setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
setBackgroundColor(getResources().getColor(R.color.color));
WindowManager windowManager = ((Activity)mContext).getWindowManager();
Display display = windowManager.getDefaultDisplay();
int left = dip2px(mContext, 10);
int width_grid = display.getWidth()-2*left;
int i = width_grid / 7;
int j = width_grid - (i * 7);
int x = j / 2;
setColumnWidth(dip2px(mContext, i+x));
//setPadding(dip2px(mContext, 1), 0,dip2px(mContext, 1), 0);// 居中
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<!-- -->
<com.example.customgridviewdemo.view.MyGridView
android:id="@+id/application_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
在引入我們的自定義元件之後,自動的呼叫構造方法,並可以呼叫構造方法裡的我們所定義的普通方法。
比如setGirdView();就一樣。
你當然也可以設定其他屬性,這裡我做的是自定義GridView,可以在構造方法裡面新增所有用自定義屬性的方法。
你還可以重寫其onMeasure();使其重新計算其大小。這是要根據需要加入其要重寫的幾個方法。
在以後的講解中我專門會給大家講解如何自定義GridView。來實現專案中所需要的格子布局。
老於始終堅信:
沒有做不到的,只有想不到了。
相關文章
- Android自定義控制元件之自定義組合控制元件Android控制元件
- vue自定義全域性元件(或自定義外掛)Vue元件
- Android自定義控制元件——自定義屬性Android控制元件
- svelte元件:Svelte3自定義Navbar+Tabbr元件|svelte自定義外掛元件
- 4. 自定義控制元件(4) --- 自定義屬性控制元件
- Android自定義控制元件之自定義屬性Android控制元件
- Android 自定義UI元件AndroidUI元件
- Laravel 自定義檢視元件Laravel元件
- 自定義Switch控制元件控制元件
- 自定義控制元件ViewPager控制元件Viewpager
- vue 自定義報警元件Vue元件
- 控制元件自定義位置控制元件
- 如何自定義控制元件控制元件
- 自定義周選擇元件、年選擇元件元件
- Preference元件探究之自定義Preference元件
- Flutter 之 自定義控制元件Flutter控制元件
- uniapp 自定義彈窗元件APP元件
- iOS自定義控制元件 AlertViewiOS控制元件View
- iOS自定義控制元件 SegmentiOS控制元件
- WPF Blend 自定義控制元件控制元件
- 自定義彈幕控制元件控制元件
- 自定義分頁控制元件控制元件
- winform 自定義容器控制元件ORM控制元件
- 元件間通訊--自定義事件元件事件
- Android自定義組合控制元件之自定義屬性Android控制元件
- WPF 自定義控制元件的坑(蠢的:自定義控制元件內容不顯示)控制元件
- android 自定義控制元件 自定義屬性詳細介紹Android控制元件
- 自定義控制元件之歌詞RCL控制元件控制元件
- Flutter 自定義縮放控制元件Flutter控制元件
- Flutter動畫之自定義動畫元件-FlutterLayoutFlutter動畫元件
- 自定義react資料驗證元件React元件
- iOS自定義控制元件 SlideriOS控制元件IDE
- Qt實現自定義控制元件QT控制元件
- 自定義百度地圖元件地圖元件
- Vue + Element 自定義上傳封面元件Vue元件
- flutter - 自定義 Drawer 元件(不依賴 Scaffold)Flutter元件
- android:建立自定義控制元件Android控制元件
- 自定義UIView UITableViewCell等控制元件UIView控制元件