Android 自定义控件(二)
来源:互联网 发布:java开源库存管理系统 编辑:程序博客网 时间:2024/06/16 12:45
自定义控件的方式有很多种,在自定义控件(一)中记录的是自定义属性后在控件的java代码中实例化原生控件,这次记录下通过引入布局文件自定义组合控件。
依然以传统的头部视图为例,左侧返回按钮,中间标题,右侧文字
第一步,实现布局文件。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:background="#ff7428" android:layout_height="44dp"> <ImageView android:id="@+id/iv_widget_header_left" android:layout_width="wrap_content" android:layout_height="match_parent" android:paddingLeft="15dp" android:paddingRight="15dp" android:src="@mipmap/icon_back" /> <TextView android:id="@+id/tv_widget_header_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="页面标题" android:textColor="#ffffff" android:textSize="18sp" /> <TextView android:id="@+id/tv_widget_header_right" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:paddingLeft="15dp" android:paddingRight="15dp" android:gravity="center" android:text="取消" android:textColor="#ffffff" android:textSize="15sp" /> </RelativeLayout> <View android:id="@+id/widget_header_bottom" android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea"/></LinearLayout>
第二步,在控件的java代码中引入布局控件,设计常用的方法设置标题或者点击事件监听器等。
public class HeaderWidget extends LinearLayout { private ImageView leftIV; private TextView titleTV; private TextView rightTV; public HeaderWidget(Context context) { super(context); init(context); } public HeaderWidget(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context){ LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.widget_header, null); leftIV = (ImageView) view.findViewById(R.id.iv_widget_header_left); titleTV = (TextView) view.findViewById(R.id.tv_widget_header_title); rightTV = (TextView) view.findViewById(R.id.tv_widget_header_right); addView(view); } public void setOnLeftListener(OnClickListener leftListener){ leftIV.setOnClickListener(leftListener); } public void setTitle(String title){ titleTV.setText(title); } public void setOnRightListener(OnClickListener rightListener){ rightTV.setOnClickListener(rightListener); }}
注意,此处只是简单演示怎么设计,在项目中使用的时候需求会各种各样,大家再添加相应的方法。
第三部,在Activity的布局文件中使用此控件。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.superman.prettygirl.widget.HeaderWidget android:id="@+id/hw_header" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
第四步,在Activity中获取此控件并根据需要进行设置
public class TextHeaderWidgetActivity extends Activity { private HeaderWidget headerWidget; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_widget_header); headerWidget = (HeaderWidget) findViewById(R.id.hw_header); headerWidget.setOnLeftListener(new View.OnClickListener() { @Override public void onClick(View view) { finish(); } }); headerWidget.setTitle("测试页面"); headerWidget.setOnRightListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(TextHeaderWidgetActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); }}
附加,再次升级一下,头部视图用的比较多,每次在布局文件中都写太重复了,使用include导入会方便很多。
<?xml version="1.0" encoding="utf-8"?><com.superman.prettygirl.widget.HeaderWidget xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/hw_header" android:layout_width="match_parent" android:layout_height="wrap_content" />
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/include_header_widget"/></LinearLayout>一行代码,复制粘贴即可。
0 0
- Android 自定义控件(二)
- android 自定义控件(二)
- android 自定义控件(二)
- Android自定义控件(二)
- Android自定义控件(二)组合控件
- Android自定义控件二
- Android自定义控件<二>
- Android 自定义控件开发入门(二)
- Android 自定义控件开发入门(二)
- android自定义控件二(转载)
- Android常用自定义控件(二)
- android的自定义控件简单(二)
- Android自定义组合控件(二)
- Android深入浅出自定义控件(二)
- Android自定义控件(二):提高篇
- Android--自定义控件解析(二)
- Android自定义控件View(二)继承控件
- Android自定义控件系列二:自定义开关按钮(一)
- MyBatis代码生成工具mybatis-generator在Myeclipse10中的使用
- ╮(╯▽╰)╭发现好难( ⊙ o ⊙ )啊!
- 方便查询用
- iOS 动态文本
- MyBatis基本配置
- Android 自定义控件(二)
- IE与Safari浏览器不支持第三方cookies的解决办法
- 开篇
- 写出一个能创建多级目录的PHP函数(新浪网技术部)
- Jpush消息广播无法接收到
- Java线程详解
- 如何搭建IPv6测试你的APP
- Java中字符串中子串的查找方法的总结
- JAVA学习(8)创建对象数组