android开发中,对于复用率较高的多个控件,采用组件的方式可能更加方便,首先定义一个xml文件:
文件名:lyt_customer_service_phone.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="25dp"
android:layout_gravity="center_horizontal"
android:background="@drawable/person_center_block_bg_frame" >
<ImageView
android:layout_width="25.5dp"
android:layout_height="25dp"
android:layout_marginRight="10dp"
android:src="@drawable/personal_center_call_image" />
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="10dp"
android:gravity="center"
android:text="客服电话:4006601360"
android:textColor="@color/g333333"
android:textScaleX="1.05"
android:textSize="16sp" />
</LinearLayout>
然后在java代码中创建一个自定义视图,并且引用它:
文件名:CustomerServicePhone.java
package cn.czl.view;
import cn.czl.R;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
public class CustomerServicePhone extends LinearLayout {
public CustomerServicePhone(final Context context, AttributeSet attrs) {
super(context, attrs);
((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
R.layout.lyt_customer_service_phone, this);
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:4006601360")));
}
});
}
public CustomerServicePhone(Context context) {
super(context);
}
}
这样我们就创建成功了,实现了一个包含图片的textview,点击即可拨打电话的组件,下面我们在xml中引用它:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#e8e8e8"
android:orientation="vertical" >
<RelativeLayout
android:id="@+id/title_bar"
android:layout_width="fill_parent"
android:layout_height="@dimen/top_bar_height"
android:background="#FFFFFF"
android:gravity="center_vertical" >
<RelativeLayout
android:id="@+id/title_bar_menu_btn"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:background="#FFFFFF"
android:orientation="vertical" >
<ImageView
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_alignParentTop="true"
android:layout_marginTop="5dp"
android:src="@drawable/topbar_back_selector" />
<TextView
android:layout_width="28dp"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="6.5dp"
android:gravity="center"
android:text="返回"
android:textColor="#333333"
android:textSize="12sp" />
</RelativeLayout>
<TextView
android:id="@+id/title_bar_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:ellipsize="end"
android:gravity="center"
android:paddingLeft="75.0dip"
android:paddingRight="75.0dip"
android:singleLine="true"
android:text="我的课程"
android:textColor="#333333"
android:textSize="16sp" />
</RelativeLayout>
<cn.czl.view.CustomerServicePhone
android:id="@+id/lyt_customer_service_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="29dp"
android:layout_marginLeft="72.5dp"
android:layout_marginRight="73dp"
android:layout_marginTop="20dp" />
</RelativeLayout>
这样我们在java代码中,就不需要每次去定义这个视图的动作了,实现了一个地方定义,多个地方引用的目的。