日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 原理 组合控件_Android_组合方式自定义控件

發布時間:2025/3/13 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 原理 组合控件_Android_组合方式自定义控件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用組合的方式自定義一個導航欄,功能:

左邊個back被點擊時,用監聽的方式告訴系統自己被點擊了了;右邊個back被點擊時,進入下一個界面。

a.png

在MainActivity中用代碼實現:

定義一個xml資源文件,定義button控件的背景顏色和形狀

android:shape="rectangle">

定義一個wll類,繼承于RelativeLayout ,用于定義倆個button的屬性

import android.content.Context;

import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.RelativeLayout;

import androidx.core.content.res.ResourcesCompat;

public class wll extends RelativeLayout {

// 將兩個控件全局化、私有化

private Button back_button;

private Button back_button1;

// 定義控件監聽者

private backButtonDidClickedListener listener;

// 實現RelativeLayout 的兩個必須實現的方法

public wll(Context context) {

this(context,null);

}

public wll(Context context, AttributeSet attrs) {

super(context, attrs);

init(context,attrs);

}

public void init(Context context, AttributeSet attrs){

setBackgroundColor(Color.MAGENTA);

setBack_button(back_button);

setBack_button1(back_button1);

}

// 實現button的set、get方法

public void setBack_button(Button back_button) {

this.back_button = back_button;

// 創建控件

back_button = new Button(getContext());

// 創建button的布局

LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(10 * getResources().getDisplayMetrics().density);

params.topMargin = (int)(10 * getResources().getDisplayMetrics().density);

// 取出之前定義的xml資源文件,用于設置button的背景

Drawable drawable1 = ResourcesCompat.getDrawable(getResources(), R.drawable.back_shape, null);

back_button.setBackground(drawable1);

back_button.setText("Back");

// 給button添加監聽事件

back_button.setOnClickListener(new OnClickListener() {

// 給button添加點擊事件

@Override

public void onClick(View view) {

if (listener != null) {

listener.ButtonDidClicked();

}

}

});

// 添加控件

addView(back_button,params);

}

public void setBack_button1(Button back_button1) {

this.back_button1 = back_button1;

back_button1 = new Button(getContext());

LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(300 * getResources().getDisplayMetrics().density);

params.topMargin = (int)(10 * getResources().getDisplayMetrics().density);

Drawable drawable1 = ResourcesCompat.getDrawable(getResources(), R.drawable.back_shape, null);

back_button1.setBackground(drawable1);

back_button1.setText("Back");

back_button1.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View view) {

if (listener != null) {

listener.changeMainActivity();

}

}

});

addView(back_button1,params);

}

public Button getBack_button() {

return back_button;

}

public Button getBack_button1() {

return back_button;

}

// 定義接口

public interface backButtonDidClickedListener{

void ButtonDidClicked();

void changeMainActivity();

}

// 添加監聽者

public void addbackButtonDidClickedListener(backButtonDidClickedListener listener){

this.listener = listener;

}

}

在MainActivity中調用wll類實現具體的功能

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 定義一個wll類的對象

wll yk = new wll(this);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,200);

// 實現接口定義的兩個方法

yk.addbackButtonDidClickedListener(new wll.backButtonDidClickedListener() {

@Override

public void ButtonDidClicked() {

System.out.println("被點擊了");

}

@Override

public void changeMainActivity() {

goToNext();

}

});

setContentView(yk,params);

}

// 跳轉界面

public void goToNext(){

// 創建一個intent,確定跳轉的界面

// intent:意圖

// 顯式意圖(調到自己的界面)、隱式意圖(調到別人的界面中)我定義的第二個界面命名為:Main2Activity

Intent intent = new Intent(this, Main2Activity.class);

// 跳轉

startActivity(intent);

}

}

使用xml的方式實現:

首先展示效果圖:

展示Back

不展示Back

創建一個wll類,繼承于LinearLayout

public class wll extends LinearLayout {

// 全局化三個button

private Button back1;

private Button back2;

private Button back3;

private boolean isShowBack = false;

int state = 0;

// 繼承LinearLayout 中的方法

public wll(Context context) {

this(context,null);

}

public wll(Context context, AttributeSet attrs) {

super(context, attrs);

init(context,attrs);

}

private void init(Context context, AttributeSet attrs) {

setOrientation(LinearLayout.HORIZONTAL);

setBackgroundColor(Color.GRAY);

boolean isShow1 = false;

// 獲取自定義的屬性

if (attrs != null) {

TypedArray array =context.obtainStyledAttributes(attrs,R.styleable.wll1);

isShow1 = array.getBoolean(R.styleable.wll1_isShow_back,true);

}

// 調用button控件的set方法,并將自定義的屬性傳遞給控件(只有back1使用了自定義的屬性)

setBack1(back1,isShow1);

setBack2(back2);

setBack3(back3);

}

// 實現控件的set、get方法

public void setBack1(Button back1,boolean isShow) {

this.back1 = back1;

// 自定義的屬性如果為true,顯示控件back1,否則不顯示

if (isShow == true) {

// 調用自定義的創建控件的方法

initButton(back1,"Back",5);

}

}

public void setBack2(Button back2) {

this.back2 = back2;

// 調用自定義的創建控件的方法

initButton(back2,"主頁",65);

}

public void setBack3(Button back3) {

this.back3 = back3;

// 調用自定義的創建控件的方法

initButton(back3,"跳轉",65);

}

public Button getBack1() {

return back1;

}

public Button getBack2() {

return back2;

}

public Button getBack3() {

return back3;

}

// 封裝創建控件的方法,需要參數:button、button的標題、button之間的間距

public void initButton(Button button,String text,int margin){

button = new Button(getContext());

button.setText(text);

LinearLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

params.leftMargin = (int)(margin * getResources().getDisplayMetrics().density);

addView(button,params);

}

創建自定義屬性的xml文件:

在MainActivity_xml中調用wll類:

android:layout_width="match_parent"

android:layout_height="100dp"

app:isShow_back = "false"

/>

總結

以上是生活随笔為你收集整理的android 原理 组合控件_Android_组合方式自定义控件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级特级片 | 午夜精品久久久久久久99热浪潮 | 亚洲国产第一区 | 国产人妻黑人一区二区三区 | 91在线综合 | 大度亲吻原声视频在线观看 | 大奶子情人 | 伊人动漫| 久久中文字幕在线观看 | 亚洲作爱视频 | 亚洲乱人伦 | 国产亚洲精品久 | 最新日韩在线视频 | 国产又白又嫩又爽又黄 | 亚洲欧洲综合av | 欧美日韩中文在线观看 | 国产成人无遮挡在线视频 | 美女视频在线免费观看 | 在线观看日本一区 | 91成人在线观看高潮 | 天堂bt在线| 波多野结衣一区 | 欧美成人精品一区二区免费看片 | 国产精品国产三级国产专区53 | 亚洲第一网站 | 国产成人高清视频 | 尹人综合网| 日本精品一二区 | 日本亚洲欧洲色 | 黄色xxx| 三级欧美视频 | 国产麻豆精品一区 | 少妇太紧太爽又黄又硬又爽 | 精品国产免费视频 | 久久久久欧美 | 亚洲综合黄色 | 国精品无码人妻一区二区三区 | 欧美精品一级片 | 可以免费看的毛片 | 性猛交ⅹxxx富婆视频 | 亚洲v| 久久青青操 | 乱老熟女一区二区三区 | 黄视频网站在线观看 | 久久99久久99精品蜜柚传媒 | 污污网站在线免费观看 | 欧洲性猛交 | 午夜国产在线观看 | www.天堂av| 国产露脸91国语对白 | 精品3p| 日韩精品免费播放 | 中文字幕一区二区久久人妻网站 | 亚洲社区一区二区 | 国产人成在线观看 | 亚洲精品久久久久久国产精华液 | 日韩一级欧美 | 久久精品99久久久久久 | wwwwww色| 日本老熟妇毛茸茸 | 中国丰满老妇xxxxx交性 | 神马午夜dy888 | 三年中文免费观看大全动漫 | 97超碰免费在线 | 人妻精品久久久久中文 | 国产黄频 | 少女视频的播放方法 | 99爱免费| 激情久久av一区av二区av三区 | 制服丝袜先锋影音 | 青青草华人在线视频 | 一区二区三区在线观看av | 国产精品对白 | 欧美激情二区三区 | 久久日视频| 午夜性福利 | 欧美日韩精品电影 | 97精品国产97久久久久久粉红 | 黑人干亚洲 | 99精品视频免费在线观看 | 俺去日| 国产一区二区h | 制服诱惑一区二区 | 国产chinesehd天美传媒 | 99视频免费在线观看 | 国产五十路 | 日本五十肥熟交尾 | 成人国产精品免费观看 | av亚州| 亚洲欧美日韩综合在线 | 制服丝袜在线播放 | 成人免费视频网站 | 爱av在线 | 性欢交69精品久久久 | 亚洲视频一区在线观看 | av网子 | 天堂√8在线中文 | 成人av一区二区在线观看 | 亚洲二区在线视频 |