Android 自定义复合组件Demo
在新的混合组件的构造函数中,首先,调用所有的父类的构造函数,传入对应的参数。然后可以设置你的混合组件的其他的一些方面,在哪创建EditText组件,又在哪创建PopupList组件。注意:你同时也可以在XML文件中引入一些自己的属性和参数,这些属性和参数也可以被你的混合组件所使用。
你也可以创建时间监听器去监听新组件中View类触发的事件,例如,对List选项单击事件的监听,你必须在此时间发生后更新你EditText的值。
你可能创建自己的一些属性,带有访问和修改方法。例如,允许设置EditText初始值并且提供访问它的方法。
在Layout的派生类中,你没有必要去重载onDraw()和onMeasure()方法,因为Layout会有比较好的默认处理。但是,如果你觉得有必要你也可以重载它。
你也可能重载一些on系列函数,例如通过onKeyDown()的重载,你可以通过按某个键去选择列表中的对应的值。
总之,把Layout类作为基类有下面几个优点:
onDraw()函数和onMeasure()函数是没有必要重载的,两个函数已经做得很好了。
你可以很快的创建你的混合组件,并且可以像单一组件那样使用。
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
public class TextExt extends LinearLayout {
private TextView tv;
private ImageButton ib;
private onExtClickListener clickListener;
public TextExt(Context context, String text, int imgres) {
super (context);
// TODO Auto-generated constructor stub
this .setOrientation(VERTICAL);
tv = new TextView(context);
tv.setText(text);
addView(tv, new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
ib = new ImageButton(context);
ib.setImageResource(imgres);
ib.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (clickListener != null ) {
clickListener.onclickListenr(getText());
}
}
});
addView(ib, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
}
public void setText(String text) {
tv.setText(text);
}
public String getText() {
return tv.getText().toString();
}
public void setImage( int res) {
ib.setImageResource(res);
}
public Drawable getDrawable() {
return ib.getDrawable();
}
public void setDrawable(Drawable dd) {
ib.setImageDrawable(dd);
}
public void setOnExtClickListener(onExtClickListener click) {
this .clickListener = click;
}
}
public void onclickListenr(String text);
}
import com.terry.custom.widget.TextExt;
import com.terry.custom.widget.onExtClickListener;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
public class CustomActivity extends Activity {
boolean isChange = true ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextExt te = new TextExt( this , " 自定义组件 " , R.drawable.icon);
te.setOnExtClickListener( new onExtClickListener() {
@Override
public void onclickListenr(String text) {
// TODO Auto-generated method stub
Toast.makeText(CustomActivity. this , text, 1000 ).show();
}
});
LinearLayout ly = (LinearLayout) findViewById(R.id.testWidget);
ly.addView(te);
Button btn = (Button) findViewById(R.id.Button01);
Button btn2 = (Button) findViewById(R.id.Button02);
btn.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (isChange) {
te.setImage(android.R.drawable.btn_dialog);
} else {
te.setDrawable(getResources().getDrawable(R.drawable.icon));
}
isChange = ! isChange;
}
});
btn2.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
te.setText( " 只可以改变一次喔 " );
}
});
}
}
微信关注我们
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源腾讯云软件源
为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。
Nacos
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。
Spring
Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。
Rocky Linux
Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。