Android创建组合控件
来源:互联网 发布:淘宝的拍照权限设置 编辑:程序博客网 时间:2024/06/05 16:40
Android创建组合控件
大家有时候做Android练习的时候就可以感觉出Android框架给出的ui控件有点不是很够用了,更别说在实际项目中, 很多人会想要使用自定义View来完成,这是非常不错的方法,同时如果你觉得android框架原有的ui控件稍微的变一下,或者多个ui控件组合在一起就可以达到了你想要的效果岂不是更方便。。
下图为效果图加源布局文件:
通过这张图可以看出, 我们还是自定义了一个View, 只不过这个自定义View里面使用的都是源Android框架提供的控件。
该类的逻辑效果为:
这是一个TextView与ImageView的集合,如果该控件用户指定了图片,那么就把该控件当成ImageView来用,如果没有指定图片资源,那么就当成TextView来用。。。
(就是这么一个简单的逻辑、、
很明显,我们定义的这个类里面就只是集成了TextView与ImageView, 其中两个都不用你自己写,只要调用即可。
1、定义一个类(ImageTextButton)继承于FrameLayout
public class ImageTextButton extends FrameLayout
2、在该类中把需要的控件给声明出来
private ImageView mImageView;private TextView mTextView;
3、实现该构造方法
public ImageTextButton(Context context) { this(context, null); } public ImageTextButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ImageTextButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, android.R.attr.buttonStyle); }构造函数有三个,分别对应于不同的创建方式。
只有一位参数的构造函数对应于使用Java代码创建的调用。
具有两位参数的构造函数对应于使用XML布局创建的调用。
具有三位参数的构造函数对应于使用XML布局创建并且制定了Style属性的调用!
(看清楚每个构造的调用方式)
(看清楚每个构造的调用方式)
4、在第三个构造函数中,进行我们的代码逻辑控制
4.1) 进行我们的类属性初始化
mImageView = new ImageView(context, attrs, defStyleAttr);
mTextView = new TextView(context, attrs, defStyleAttr);在创建的时候,把那几个参数丢进行可以使用我们在XML中原有的属性,从而不需要我们自己进行声明
4.2) 创建我们控件的布局方式
// 创建视图的布局对其方式 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER); addView(mImageView, params); addView(mTextView, params);这块代码就不解释了, 不懂的可Google
4.3) 逻辑实现
其实我们的代码实现的逻辑非常的简单,就是判断一下该view是否制定了android:text属性即可,如果没有就把它给隐藏和显示
/** * 两种模式来回切换*/ if (mImageView.getDrawable() == null) { mImageView.setVisibility(View.GONE); mTextView.setVisibility(View.VISIBLE); } else { mImageView.setVisibility(View.VISIBLE); mTextView.setVisibility(View.GONE); }
非常简单啊。。。。。 这就完成了。
以下部分就是完整的源代码:
public class ImageTextButton extends FrameLayout { private ImageView mImageView; private TextView mTextView; public ImageTextButton(Context context) { this(context, null); } public ImageTextButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ImageTextButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, android.R.attr.buttonStyle); /** * 初始化数据 */ mImageView = new ImageView(context, attrs, defStyleAttr); mTextView = new TextView(context, attrs, defStyleAttr); // 创建视图的布局对其方式 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, Gravity.CENTER); addView(mImageView, params); addView(mTextView, params); /** * 两种模式来回切换 */ if (mImageView.getDrawable() == null) { mImageView.setVisibility(View.GONE); mTextView.setVisibility(View.VISIBLE); } else { mImageView.setVisibility(View.VISIBLE); mTextView.setVisibility(View.GONE); } } }
0 0
- Android创建组合控件
- Android 如何创建组合控件
- 创建Android自定义组合控件
- Android自定义组合控件
- android自定义组合控件
- Android组合控件
- Android组合控件EditText
- Android自定义组合控件
- android组合自定义控件
- android 自定义组合控件
- android 自定义组合控件
- android 自定义组合控件
- Android自定义组合控件
- android自定义组合控件
- Android 自定义组合控件
- android自定义组合控件
- android 自定义组合控件
- Android 组合控件
- C# 中线程资源访问互斥量
- android自定义一个带进度条的button
- android提高进程优先级的若干方法
- 单元测试一NUnit
- 克服VR眩晕之帧数:提升UE4内容实时渲染效率
- Android创建组合控件
- hadoop伪分布式ha框架搭建
- 开发人员系统功能设计常用办公软件分享
- 剑指offer-面试题4:替换空格
- [疯狂Java笔记]AWT容器简介
- 蓝桥杯 打印图形(分型法)
- vim下一些好用插件
- 119. Pascal's Triangle II
- ViewPager的三个注意事项(bug)