Android自定義view實現個人中心設置界面帶點擊事件


前一篇博客寫了《Android實現個人中心設置界面》,發現許多朋友詢問怎么實現點擊事件,其實實現點擊事件又兩種方式實現,一種是自帶的setOnClickListener實現onclicklister接口就可以實現整個item的點擊事件。另外一種是在自定義view中暴漏一個接口給外界調用。

效果圖1:原生點擊事件

 

效果圖2:對外暴漏接口點擊事件

 

效果圖3:代碼設置每個item的左側圖標,標題文字,右側文字,以及右側小箭頭和下划線的顯示和隱藏(如圖,代碼設置用戶名item的圖標和修改標題以及描述和右側箭頭以及下划線隱藏)

 

提示:當然每個item的左側圖標,標題文字,右側文字,以及右側小箭頭和下划線的顯示和隱藏也可以不通過代碼,在我的自定義view中直接xml文件定義相應的屬性值也是可以修改的,所以提供了兩個方式修改這些屬性,看你的需求是什么樣子的。

下面說一下怎么實現的,至於頭部的磨砂效果可以參考上一篇的博客,就不在本篇贅述了,地址:

點擊打開鏈接

上頭部關鍵代碼:
gradle配置

implementation 'com.github.bumptech.glide:glide:3.7.0'
implementation 'jp.wasabeef:glide-transformations:2.0.1'
xml代碼:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">

<ImageView
android:id="@+id/h_back"
android:layout_width="match_parent"
android:layout_height="180dp" />

<ImageView
android:id="@+id/h_head"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_centerInParent="true" />

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/h_back"
android:layout_marginBottom="20dp"
android:orientation="horizontal">

<ImageView
android:id="@+id/user_line"
android:layout_width="1dp"
android:layout_height="25dp"
android:layout_centerHorizontal="true"
android:layout_marginLeft="15dp"
android:background="@android:color/white" />

<TextView
android:id="@+id/user_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/user_line"
android:text="張三"
android:textColor="@android:color/white"
android:textSize="17sp" />

<TextView
android:id="@+id/user_val"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:layout_toRightOf="@id/user_line"
android:text="182****5882"
android:textColor="@android:color/white"
android:textSize="17sp" />
</RelativeLayout>
Activity代碼

//設置背景磨砂效果
Glide.with(this).load(R.drawable.head)
.bitmapTransform(new BlurTransformation(this, 25), new CenterCrop(this))
.into(mHBack);
//設置圓形圖像
Glide.with(this).load(R.drawable.head)
.bitmapTransform(new CropCircleTransformation(this))
.into(mHHead);
以上就是實現頭部部分代碼,效果圖:

 

/****************************************分割線*****************************/
下面重點在item的點擊事件和動態設置屬性以及xml文件配置屬性設置
1.先寫一個item的布局,一個比較全面的item布局,就是所有的屬性都有的布局,然后在這個布局上面控制屬性的顯示和隱藏

 

相信這個布局很容易實現

2.在res-values下面新建attr.xml文件,定義控制每個item的相關屬性的參數

<declare-styleable name="ItemView">
<attr name="left_icon" format="integer"/>//設置左側圖標
<attr name="show_left_icon" format="boolean"/>//是否顯示左側圖標
<attr name="left_text" format="string"/>//左側標題文字
<attr name="right_text" format="string"/>//右側描述文字
<attr name="show_right_arrow" format="boolean"/>//是否顯示右側小箭頭
<attr name="show_bottom_line" format="boolean"/>//是否顯示下划線
</declare-styleable>
具體看每個后面的描述

3.獲取控件設置的屬性

TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ItemView);

isShowBottomLine = ta.getBoolean(R.styleable.ItemView_show_bottom_line, true);//得到是否顯示底部下划線屬性
isShowLeftIcon = ta.getBoolean(R.styleable.ItemView_show_left_icon, true);//得到是否顯示左側圖標屬性標識
isShowRightArrow = ta.getBoolean(R.styleable.ItemView_show_right_arrow, true);//得到是否顯示右側圖標屬性標識
leftIcon.setBackground(ta.getDrawable(R.styleable.ItemView_left_icon));//設置左側圖標
leftTitle.setText(ta.getString(R.styleable.ItemView_left_text));//設置左側標題文字
leftIcon.setVisibility(isShowLeftIcon ? View.VISIBLE : View.INVISIBLE);//設置左側箭頭圖標是否顯示 rightDesc.setText(ta.getString(R.styleable.ItemView_right_text));//設置右側文字描述
bottomLine.setVisibility(isShowBottomLine ? View.VISIBLE : View.INVISIBLE);//設置底部圖標是否顯示
rightArrow.setVisibility(isShowRightArrow ? View.VISIBLE : View.INVISIBLE);//設置右側箭頭圖標是否顯示
4.xml布局中添加引入每個item

<com.fang.mycenter.ItemView
android:id="@+id/sex"
android:layout_width="wrap_content"
android:layout_height="50dp"
app:left_icon="@drawable/ic_sex"
app:left_text="性別"
app:right_text="男" />

<com.fang.mycenter.ItemView
android:id="@+id/signName"
android:layout_width="wrap_content"
android:layout_height="50dp"
app:left_icon="@drawable/ic_sign_name"
app:left_text="個性簽名"
app:right_text="風一樣的男子" />
注意:頭部命名空間需要引入,
xmlns:app="http://schemas.android.com/apk/res-auto"

至此就可以實現我們的第一步,顯示這樣一個界面布局:

 

下面重點來了:

1.設置普通點擊事件
1)實例化控件,設置onClick點擊事件

//設置用戶名整個item的點擊事件
mNickName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "我是onclick事件顯示的", Toast.LENGTH_SHORT).show();
}
});

mNickName = (ItemView) findViewById(R.id.nickName);
這是頂部效果圖1的點擊事件的實現方式
2.自定義view中定義接口,對外暴漏接口,設置點擊事件
1)view中定義接口,設置點擊事件

public interface itemClickListener{
void itemClick(String text);
}
private itemClickListener listener;

//向外暴漏接口
public void setItemClickListener(itemClickListener listener){
this.listener=listener;
}
2)為整個item設置點擊事件

//給整個item設置點擊事件
rootView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
listener.itemClick(rightDesc.getText().toString());
}
});
3)Activity中實現接口事件

//設置用戶名整個item的點擊事件
mNickName.setItemClickListener(new ItemView.itemClickListener() {
@Override
public void itemClick(String text) {
Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
}
});
這是頂部效果圖2的點擊事件的實現方式
3.代碼中設置左側圖標,標題文字,下划線顯示隱藏,右側圖標隱藏等
1)view中寫相應設置方法

//設置左側圖標
public void setLeftIcon(int value) {
Drawable drawable=getResources().getDrawable(value);
leftIcon.setBackground(drawable);
}

//設置左側標題文字
public void setLeftTitle(String value) {
leftTitle.setText(value);
}

//設置右側描述文字
public void setRightDesc(String value) {
rightDesc.setText(value);
}
//設置右側箭頭
public void setShowRightArrow(boolean value) {
rightArrow.setVisibility(value ? View.VISIBLE : View.INVISIBLE);//設置右側箭頭圖標是否顯示
}

//設置是否顯示下畫線
public void setShowBottomLine(boolean value) {
bottomLine.setVisibility(value ? View.VISIBLE : View.INVISIBLE);//設置右側箭頭圖標是否顯示
}
2)Activity中設置屬性

mNickName.setLeftIcon(R.drawable.ic_phone);
//
mNickName.setLeftTitle("修改后的用戶名");
mNickName.setRightDesc("名字修改");
mNickName.setShowRightArrow(false);
mNickName.setShowBottomLine(false);
這是頂部效果圖3的點擊事件的實現方式

4.xml文件直接設置屬性的顯示隱藏以及文字等屬性
<com.fang.mycenter.ItemView
android:id="@+id/nickName"
android:layout_width="wrap_content"
android:layout_height="50dp"
app:left_icon="@drawable/ic_nick_name"
app:left_text="用戶名"
app:right_text="張三xx"
app:show_left_icon="false"
app:show_bottom_line="false"
/>


好了,至此所有點擊事件,設置屬性的兩種方式都已經實現,具體代碼下載,請點擊:

點擊打開鏈接,下載資源文件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM