创建Android自定义组合控件
2016-01-04 17:32
429 查看
最近Android刚入门的我,正在学习自定义控件,刚开始觉得为什么要写自定义的控件呢,想要实现的布局可以直接在xml文件中实现就好啊,后来我们组的大神跟我说这可是Android开发者的必备技能!在一个项目中,页面布局有一些都是差不多的,每个页面既然都差不多的布局,我们还要为每一个相似的布局编写相似的xml文件,这必然会造成项目大量冗余代码,所以不说废话了,还是看看让我最近纠结了一段时间的自定义控件实现吧!
首先我们要编写自定义控件的布局item.xml,我们要实现以下这种效果:
然后编写一个类CustomWidget.java,这个类的类名就是我们所自定义的控件的名字,有了这个类我们就可以像使用其他安卓控件一样使用我们自己定义的控件了。
接下来就可以来应用我们已经定义的控件,在activity_main.xml文件和MainActivity.java中,我们编写如下代码:
最后运行程序,效果如下:
本人安卓刚入门,纯属菜鸟,如有错误,请给予指出指导,谢谢了!
首先我们要编写自定义控件的布局item.xml,我们要实现以下这种效果:
然后编写一个类CustomWidget.java,这个类的类名就是我们所自定义的控件的名字,有了这个类我们就可以像使用其他安卓控件一样使用我们自己定义的控件了。
<?xml version="1.0" encoding="utf-8"?> package com.sun.customwidgetdemo; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; public class CustomWidget extends RelativeLayout{ private ImageView mIcon; private ImageView mArrow; private TextView mText; private View mLine; public CustomWidget(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public void initView(Context context) { LayoutInflater.from(context).inflate(R.layout.item, this); mIcon = (ImageView)findViewById(R.id.iv_icon); mArrow = (ImageView)findViewById(R.id.iv_arrow); mText = (TextView)findViewById(R.id.tv_text); mLine = (View)findViewById(R.id.v_line); } public void setItemText(CharSequence text) { mText.setText(text); } public void setIconId(int resId) { mIcon.setVisibility(VISIBLE); mIcon.setImageResource(resId); } public void setArrowVisibility(int visibility) { mArrow.setVisibility(visibility); } public void setLineVisibility(int visibility) { mLine.setVisibility(visibility); } }
接下来就可以来应用我们已经定义的控件,在activity_main.xml文件和MainActivity.java中,我们编写如下代码:
<?xml version="1.0" encoding="utf-8"?> package com.sun.customwidgetdemo; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.os.Build; public class MainActivity extends ActionBarActivity { private CustomWidget mItem1, mItem2, mItem3; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } public void initView() { mItem1 = (CustomWidget)findViewById(R.id.cw_item1); mItem2 = (CustomWidget)findViewById(R.id.cw_item2); mItem3 = (CustomWidget)findViewById(R.id.cw_item3); mItem1.setItemText("我是自定义布局1"); mItem2.setItemText("我是自定义布局2"); 883a mItem3.setItemText("我是自定义布局3"); } }
最后运行程序,效果如下:
本人安卓刚入门,纯属菜鸟,如有错误,请给予指出指导,谢谢了!
相关文章推荐
- [Android实例] SlidingPaneLayout实现最新版QQ主页面效果
- Picasso的使用及原理详解
- android 应用更新升级模块 升级会卡 引发CF
- [Android实例] 波浪动画效果,正弦曲线绘制
- android集成websocket下载方式
- Android的学习笔记1
- 给 Android 开发者的 RxJava 详解
- Android 调用系统相册 并回调所选的图片
- Android多线程下载原理
- Android多线程下载原理
- [Android实例] ListView悬浮标题,类似QQ列表显示
- android开发游记:通过xml配置快速实现点击热点效果和渐变动画(不用java代码)
- 快速下载android sdk
- Android Studio Jni开发详细入门,Aes加密demo
- 关于Android VideoView seekTo不准确的问题
- Android 下拉刷新上拉载入效果功能
- Android-Activity 启动模式解析
- Android练兵--自定义Material进度条
- [Android实例] 仿Easy Touch,实现Home键,锁屏,清理内存功能
- 屏幕监听