1.收獲
說實話,在上一次上課中,對于自定義控件和自定義屬性這一塊不是很理解,盡管上次結束之后自己又去看了一下,但是還是沒有理解,并且我知道這一塊是很重要的,但是就在最近的一次課中,我們又重新講了這個板塊,這對于我來說是一個非常好的機會,對于這塊的理解。雖然這天不是很正式的上課,沒有講什么新的知識,但是對于我來說算是一個非常好的一天吧。首先時由學姐們來給我們講解關于考研和保研的問題,對于此時的我來說 無疑是一個非常好的了解和怎樣去準備的機會。也許以前的自己真的不知道前方到底該朝哪個方向走在我明白了,有的事情是可以去搏一搏的,如果沒有成功,自己也不會后悔。
2.技術
(1)自定義控件
(2)自定義屬性
(3)接口
3.技術的實踐和應用
在自定義控件和屬性這一塊我們有兩種方式去創建:xml配置 代碼創建
(1)自定義控件
1.首先創建一個 類
2.然后在這個類中新建自己的一個類,使得這個類繼承于一個自己需要的布局方式,并且還要實現構造方法
public class xcfNavigation extends RelativeLayout {
//使用JAVA代碼創建控件
public xcfNavigation(Context context) {
/*super(context);
*/
this(context,null);
}
//使用xml創建控件
public xcfNavigation(Context context, AttributeSet attrs) {
super(context, attrs);
}
3.接下來我們需要個這個類的控件進行初始化
//初始化控件
private void init(Context context,AttributeSet attributeSet){
//設置背景
setBackgroundColor(Color.GRAY);
//判斷是不是xml創建的
if(attributeSet!=null){
//從attrs里面提取 xml里面配置的所屬屬性
TypedArray typedArray=context.obtainStyledAttributes(attributeSet,R.styleable.xcfNavigation);
//提取自己需要的屬性
int color=typedArray.getColor(R.styleable.xcfNavigation_xcf_background,Color.MAGENTA);
//使用數據
setXcf_background(color);
}
}
然后在這個類中調用這個初始化的方法
4.代碼創建控件
我們需要一個set get方法對外部傳來的屬性進行設置
public int getXcf_background() {
return xcf_background;
}
public void setXcf_background(int xcf_background) {
this.xcf_background = xcf_background;
//將外部傳過來的顏色 設置為背景顏色
setBackgroundColor(xcf_background);
}
我們在代碼里面創建一個控件,然后對這個控件進行屬性的設置
private void test(){
//代碼方式創建控件
xcfNavigation bar=new xcfNavigation(this);
//設置背景顏色
bar.setXcf_background(Color.GRAY);
//把當前控件作為activity的主視圖
setContentView(bar);
}
最后我們在那個創建界面的類里面調用這個函數
(2)自定義屬性
自定義屬性一般是在利用xml配置的時候用的
1.首先我們要新建一個自定義的xml文件
2.在這個xml里面進行添加屬性
3.我們在xml里面調用這些屬性
<!--用xml創建控件-->
<swu.xcf.a11navigationbbar.xcfNavigation
android:layout_width="match_parent"
android:layout_height="55dp"
app:xcf_background="#F32323"
/>
但是我們發現調用之后并沒發生什么改變,雖然我們將這些屬性設置出來了但是我們還沒有給他添加上去。于是我們還需要將這些屬性提取出來再添加上去。
4.然后我們在創建結免得類里面進行配置就可以了。
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//test();
}
這就是利用xml配置的屬性
5.同樣的,如果我們需要創建其他的控件屬性的話,方法和步驟和上面的是一樣的
(3)接口
接口在以前講過但是還是不知道怎末去用它,就知道它有事件回調的功能,通過今天的講解又讓我明白了,怎末去使用接口。
1.首先我們要定義一個接口
//定義接口 監聽返回按鈕被點擊了
public interface OnButtonClickedListener{
void backButtonClick();
}
2.然后我們需要知道監聽者是誰
記錄外部傳來的監聽者(監聽者一定是接口類型的)
//記錄監聽按鈕的對象
OnButtonClickedListener listener;
我們需要一個set方法給外部進行一個設置監聽者的機會
public void setListener(OnButtonClickedListener listener) {
this.listener = listener;
}
3.我們給這個監聽者監聽的對象添加事件
//給按鈕添加點擊事件
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(listener!=null){
listener.backButtonClick();//調用方法
}
}
});
4.我們在外面給對象進行設置監聽者
//設置監聽者
bar.setListener(this);
但是我們需要實現這個接口和接口中的方法
@Override
public void backButtonClick() {
Toast.makeText(this,"被點擊了",Toast.LENGTH_LONG).show();
}