Android Studio 創(chuàng)建自定義控件的方法
我們知道,當(dāng)系統(tǒng)控件并不能滿足我們的需求時(shí),我們就需要來(lái)創(chuàng)建自定義控件,主要有兩種方法
(1)引入布局
下面來(lái)自定義一個(gè)控件,iPhone的標(biāo)題欄,創(chuàng)建一個(gè)標(biāo)題欄并不是什么難事,加入兩個(gè)button一個(gè)TextView就行了,可是在我們的應(yīng)用中,有很多頁(yè)面都是需要這樣的標(biāo)題欄,我們不可能每個(gè)活動(dòng)都寫(xiě)一遍布局,這個(gè)時(shí)候我們就可以用引用布局的方法,新建一個(gè)title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#817D7D"
>
<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"/>
<TextView
android:id="@+id/title_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:textColor="#c0c0c0"
android:textSize="24sp"
android:text="title text" />
<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:textColor="#fff"
android:text="edit" />
</LinearLayout>
現(xiàn)在標(biāo)題欄已經(jīng)寫(xiě)好了,接下來(lái)就要在程序中使用,修改activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/title"/> </LinearLayout>
我們只要通過(guò)一句include語(yǔ)句引進(jìn)來(lái)就行了
<include layout="@layout/title"/>
最后我們需要在MainActivity中將系統(tǒng)自帶的標(biāo)題欄屏蔽
package com.example.ch03;
import android.drm.DrmStore;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//屏蔽系統(tǒng)自帶狀態(tài)欄
ActionBar actionBar = getSupportActionBar();
if(actionBar != null){
actionBar.hide();
}
}
}
最后來(lái)看一下效果

(2)注冊(cè)點(diǎn)擊事件
在上面我們看到,每個(gè)界面的返回按鈕功能都是一樣的,即銷(xiāo)毀當(dāng)前活動(dòng),我們不可能在每個(gè)活動(dòng)中都重新注冊(cè),所以使用自定義控件的方式來(lái)解決
新建TitleLayout,成為標(biāo)題欄控件
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs){
super(context,attrs);
LayoutInflater.from(context).inflate(R.layout.title,this);
我們重寫(xiě)了LinearLayout中帶參數(shù)的構(gòu)造函數(shù),引入TitleLayout控件就會(huì)調(diào)用這個(gè)構(gòu)造函數(shù),然后對(duì)標(biāo)題欄進(jìn)行動(dòng)態(tài)加載,就需要借助LayoutInflater實(shí)現(xiàn)。通過(guò)LayoutInflater的from方法構(gòu)建一個(gè)LayoutInflater對(duì)象,調(diào)用inflate()方法動(dòng)態(tài)加載一個(gè)布局文件
然后在布局文件中添加自定義控件,修改activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.ch03.TitleLayout android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
重新運(yùn)行一下,效果是一樣的
下面來(lái)給按鈕注冊(cè)點(diǎn)擊事件,修改TitleLayout中的代碼
package com.example.ch03;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs){
super(context,attrs);
LayoutInflater.from(context).inflate(R.layout.title,this);
Button titleBack = findViewById(R.id.title_back);
Button titleEdit = findViewById(R.id.title_edit);
titleBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) getContext()).finish();
}
});
titleEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(),"You click edit button",
Toast.LENGTH_LONG).show();
}
});
}
}
重新運(yùn)行一下,然后點(diǎn)擊edit按鈕

到此這篇關(guān)于Android Studio 創(chuàng)建自定義控件的方法的文章就介紹到這了,更多相關(guān)Android Studio自定義控件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框(二)
- Android自定義控件實(shí)現(xiàn)通用驗(yàn)證碼輸入框
- Android自定義控件橫向柱狀統(tǒng)計(jì)圖
- Android自定義控件之圓形進(jìn)度條動(dòng)畫(huà)
- Android自定義控件之水平圓點(diǎn)加載進(jìn)度條
- Android自定義控件之刻度尺控件
- Android開(kāi)發(fā)自定義控件之折線圖實(shí)現(xiàn)方法詳解
- Android自定義控件實(shí)現(xiàn)時(shí)鐘效果
- Android自定義控件仿ios下拉回彈效果
- Android運(yùn)動(dòng)健康睡眠自定義控件的實(shí)現(xiàn)
相關(guān)文章
Android實(shí)現(xiàn)長(zhǎng)圖文截圖功能實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)長(zhǎng)圖文截圖功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
viewpager+photoview實(shí)現(xiàn)圖片查看器
這篇文章主要為大家詳細(xì)介紹了viewpager+photoview實(shí)現(xiàn)圖片查看器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
實(shí)例分析Android中HandlerThread線程用法
本篇文章主要給大家介紹了Android HandlerThread使用介紹以及源碼解析,有需要的朋友參考學(xué)習(xí)下吧。2017-12-12
Android開(kāi)發(fā)實(shí)現(xiàn)瀏覽器全屏顯示功能
這篇文章主要介紹了Android開(kāi)發(fā)實(shí)現(xiàn)瀏覽器全屏顯示功能,涉及Android布局修改及相關(guān)屬性動(dòng)態(tài)設(shè)置操作技巧,需要的朋友可以參考下2017-09-09
Android 通過(guò)Messager與Service實(shí)現(xiàn)進(jìn)程間雙向通信案例詳解
這篇文章主要介紹了Android 通過(guò)Messager與Service實(shí)現(xiàn)進(jìn)程間雙向通信案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
Android開(kāi)發(fā)之繪制平面上的多邊形功能分析
這篇文章主要介紹了Android開(kāi)發(fā)之繪制平面上的多邊形功能,結(jié)合實(shí)例形式分析了Android多邊形圖形繪制的原理、步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2017-09-09
談?wù)剬?duì)Android View事件分發(fā)機(jī)制的理解
本篇文章主要介紹了談?wù)剬?duì)Android View事件分發(fā)機(jī)制的理解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01

