android中自定义组合组件(一)
来源:互联网 发布:淘宝客服怎么做好 编辑:程序博客网 时间:2024/06/04 19:28
1.为什么自定义:
在应用开发中,存在许多很相似的格局,我们如果都用类似的代码去挨个实现,难免代码量较多,并且显得不专业。为此,我们通常采用自定义一个组合组件来实现。
2.本文实现自定义后的效果:
在自定义后,下图的界面只需要一个组件即可完成:
单击图中任意地方(也就是单击所自定义的组件),效果如下:
3.代码:
(闲话不多说,直接上代码)
(1)先写出实现上述界面的布局文件
在res/layout文件夹下新建activity_example.xml布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="10dp" android:paddingTop="5dp" > <TextView android:id="@+id/startGps" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="点击开启GPS" android:textColor="#000000" android:textSize="20dp" /> <TextView android:id="@+id/GpsMode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="GPS已打开" android:layout_below="@id/startGps" android:textSize="18dp" android:textColor="#938192" /> <CheckBox android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:gravity="center_vertical" android:paddingRight="10dp" android:text="" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" android:checked="true" /> </RelativeLayout></RelativeLayout>
(2)接着自定义view,继承一个ViewGroup(这里继承RelativeLayout)
在src目录下新建MyRelativeLayout.java文件,并继承RelativeLayout:
import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.widget.CheckBox;import android.widget.RelativeLayout;import android.widget.TextView;public class MyRelativeLayout extends RelativeLayout { private TextView startGps,GpsMode; private CheckBox checkBox; //添加RelativeLayout的三个构造方法 public MyRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); InitView(); } public MyRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); InitView(); } public MyRelativeLayout(Context context) { super(context); InitView(); } //将布局文件example填充到MyRelativeLayout中 public void InitView(){ View.inflate(getContext(), R.layout.activity_example, this); startGps=(TextView) findViewById(R.id.startGps); GpsMode=(TextView) findViewById(R.id.GpsMode); checkBox=(CheckBox) findViewById(R.id.check); } //设置接口,用于改变格局中的某些组件的值 public boolean Checked(){ if(checkBox.isChecked()){ return true; } return false; } public void setGpsMode(String string){ GpsMode.setText(string); } public void setCheck(boolean b){ checkBox.setChecked(b); }}
(3)主页面的布局文件
activity_main.xml代码如下:
(com.person.maomao.MyRelativeLayout(类MyRelativeLayout的全路径)即是之前自定义的布局组件)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.person.maomao.MyRelativeLayout android:id="@+id/myRelativeLayout" android:layout_height="wrap_content" android:layout_width="match_parent" /></RelativeLayout>
(4)主页面java代码:
MainActivity.java代码如下:
import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;public class MainActivity extends Activity { MyRelativeLayout myRelativeLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myRelativeLayout=(MyRelativeLayout) findViewById(R.id.myRelativeLayout); myRelativeLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v){ // TODO Auto-generated method stub if(myRelativeLayout.Checked()){ myRelativeLayout.setGpsMode("GPS已关闭"); myRelativeLayout.setCheck(false); }else{ myRelativeLayout.setGpsMode("GPS已打开"); myRelativeLayout.setCheck(true); } } }); }}
(5)清单文件AndroidManifest.xml:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
4.结果:
之前在效果栏已经展示过,这里就不在上图了。
5.备注:
有问题的地方还请各位多多包含,不吝赐教。
0 0
- android中自定义组合组件(一)
- android中自定义组合组件(二)
- Android自定义组件(一)
- 组合组件のCusRelativeLayout(Android-自定义相对布局)
- Android自定义组合控件(一)
- Android自定义控件之自定义组合控件(一)
- Android自定义组件(一)(二)
- Android 自定义组合组件的总结
- Android自定义组件之简单组合
- android 中自定义组件
- Android自定义控件(一) 自定义组合控件
- Android自定义控件(一) 自定义组合控件
- Android自定义控件(一) 自定义组合控件
- Android中自定义组合控件
- Android中自定义组合控件
- android之自定义组件一
- 自定义组件(一)
- android自定义控件(一),组合控件Titlebar的定制
- POJ 1852 Ants
- HTTP 411 Content-Length required
- 蓝桥杯java -身份证号码升级
- 关于Java流的方式将数据写入到文件中
- C++ Map(list与数组的结合char型)(hash算法.)
- android中自定义组合组件(一)
- Qt浅谈之五十界面自定义
- 使用HttpURLConnection向服务器发送post和get请求
- String、StringBuffer与StringBuilder之间区别
- 学习进程:第二章2.9jsp脚本的9个内置对象
- python的数据类型
- iOS多线程开发系列之(三)Grand Central Dispatch(GCD)
- 去掉SQL数据库里重复的数据,并保留一条
- ubuntu的iscsi多路径环境搭建 (multipath)