1. 程式人生 > >android studio引入一個自定義的佈局,自定義控制元件,避免每一個活動中都編寫一樣佈局程式碼的問題

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>

總結:就是把自定義的佈局,自定義的控制元件單獨寫出一個檔案當中,想用的時候引入就可以了。