android studio引入一個自定義的佈局,自定義控制元件,避免每一個活動中都編寫一樣佈局程式碼的問題
本次演示的是標題欄上建立按鈕,即
引入自定義佈局和自定義控制元件的應用十分的廣泛,它的形成的效果很多的應用程式都有,我們可以自定義標題欄,因為普通的標題欄就是一行文字,但是,我們可以發現,很多手機軟體的標題欄上都有返回,或者 進入的按鈕,尤其是全面屏的手機。而且它還能解決一個問題,如果我們只是普通的在主佈局中直接寫一段佈局的程式碼,可能並不是每一個活動都可以用,也就說,我們必須在每一個佈局中都寫上同樣的佈局程式碼,為了解決這一問題,出現了引入佈局,自定義控制元件的方式,不需要在不同活動中編寫同樣的程式碼,我們只需要寫一次就可以解決,那麼,我們就開始吧。
一共分為兩大部分
第一部分:引入一個佈局,將圖形化介面構造出來,之後,每一個活動都會存在這個介面
第二部分:建立自定義控制元件的功能,圖形化的介面有了,但是它還沒有功能,所以得定義一下功能,之後,每一個活動都會存在這個功能。
下面來介紹一下它的具體實現步驟:
第一步,在layout資料夾下建立一個佈局原始檔,名字為title,root elements選擇LinearLayout,建立完成後加入如下程式碼
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/title_text" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:layout_weight="1" android:text="text" android:textColor="#fff" android:textSize="24sp" /> <Button android:id="@+id/title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="edit" android:textColor="#fff" /> <Button android:id="@+id/title_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="5dp" android:text="back" android:textColor="#fff" /> </LinearLayout>
其中的內容無非也就是設定id,長度,寬度,對其方式,大小,顏色,我們著重講一下weight,它的意思是權重的意思,在這裡,我們沒有設定Button的權重,而是把只設置了textview的權重為1,達到的效果就是兩個按鈕佔用適合文字大小,而textview會將剩餘的地方全部佔用,更加的合理。
第二步 將自己建立的title佈局加入到主佈局當中,在主佈局中加入如下程式碼,我用的是線性佈局,所以就加在了線性佈局的中間。
<include layout="@layout/title"/>
第三步 將android studio自帶的標題欄隱藏
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar=getSupportActionBar(); if(actionBar!=null) { actionBar.hide(); } }
自定義的標題欄佈局已經有了,但是裡邊的back什麼按鈕並沒有什麼功能,所以,現在讓我們來賦予它功能。
第四步 建立一個類,繼承線性佈局,在裡邊動態載入剛剛設定的佈局,然後寫入特定的功能,就完成一個自定義控制元件的設定。
public class TitleLayout extends LinearLayout
{
public TitleLayout(Context context, AttributeSet arrs)
{
super(context,arrs);
LayoutInflater.from(context),inflate(R.layout.title,this);
//LayoutInflater的from方法可以獲得一個LayoutInflater物件,之後inflate動態載入佈局
Button titleBack=findViewById(R.id.title_back);//下邊是對按鈕加入監聽器也就是功能
Button titleEdit=findViewById(R.id.title_edit);
titleBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view)
{
//加入back的處理動作
}
});
titleEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view)
{
//加入進入的處理動作
}
});
}
}
第五步 自定義控制元件已經定義好了,我們還需要把他載入到佈局當中,其中的包名不可省略,一定要用全稱
<example.com.myapplicat.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
</example.com.myapplicat.TitleLayout>
總結:就是把自定義的佈局,自定義的控制元件單獨寫出一個檔案當中,想用的時候引入就可以了。