Android 控件开发笔记(一)
1、 什么是Activity
Activity是一个应用程序组件,为应用程序提供一个可视化的界面,用户通过此界面与应用程序交互。
2、 介绍一下Mainifest 、 MainActivity 、Layout
-
Mainifest.xml 应用程序的主配置文件
-
MainActivity 主界面
-
Layout 布局文件
3、 Activity和Layout之间的关系
Activity通过调用findViewById()函数,引用页面布局的控件,将Activity与控件联系起来,通常括号中的是(R.id.xxx),xxx为页面布局中定义的控件ID名。此时,我们还要解释一下R,R.java文件是由aapt工具根据应用中的资源文件来自动生成的,因此我们可以吧R.java看成Android应用的资源字典,aapt生成R.java文件的规则主要是两条:每类资源对应R类的一个内部类。比如,所有界面布局资源对应于layout内部类;每个具体的资源项对应于内部类的一个public static final int类型的Field,若界面布局中用到了ok,show两个标识符,则R.id类里就包含了这两个Field。随着我们不断地向Android项目中添加资源,R.java文件的内容也会越来越多。
Activity和View之间的关系
在Activity onCreate方法中初始化了View 的时候, 调用了View 的onFinishInflate
在执行完 Activity的 onResume 方法之后,才真正开始了View的绘制工作:onMeasure --> onSizeChanged --> onLayout --> onDrawonMeasure,onSizeChanged,onLayout,onDraw可能由于setVisible或onresume调用多次,而onAttachedToWindow与onDetachedFromWindow在创建与销毁view的过程中只会调用一次
Activity执行onDestroy后,View执行onDetackedFromWindow
View 的生命周期为:
[改变可见性] --> 构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw -->
onDetackedFromWindow
4、什么时候在Layout中更改属性?什么时候在代码中修改属性
Activity通过调用findViewById()函数,引用页面布局的控件并进行修改
textView = (TextView)findViewById(R.id.MainTextView);
textView.setTextColor(2);
textView.setText(R.string.specialName);
System.out.print("是否获取成功: " + textView+ "");
5、 什么是View
在屏幕方块中显示的内容
6、 为View添加监听器
监听器是一个对象,用于捕获View的状态,当View的状态发生更改时,可使用监听器对其进行相应的操作。同一个控件可以设置多种监听器,对不同状态进行捕获监听。
操作步骤:
/**
* 1、布局文件中定义控件
* 2、Activity中获取代表控件的对象 button = (Button)findViewById(R.id.button)
* 3、定义一个类实现监听器接口,并重写其抽象方法 class ButtonListener implements View.OnClickListener public void onClick
*/
class ButtonListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//当控件被点击之后调用
sum ++ ;
System.out.print("当前点击次数为: " + sum);
}
}
button = (Button)findViewById(R.id.button);
buttonListener = new ButtonListener();
button.setOnClickListener(buttonListener);
Layout与ViewGroup之间的关系
/**
* Layout与ViewGroup之间的关系
* - ViewGroup是一个容器,而这个容器是继承自View的
* - ViewGroup是一个基类,并且是Layout和一些组件的基类
* - Linear Layout 线性布局 Relative Layout 相对布局 开发中用的是最多的
* - AdapterView(List View , Gird View) 已经封装好的布局视图
*/
/**
* match_parent 会填满父控件 fill_parent 在SDK2.0以下需要使用,普遍针对4.0以上的 warp_parent 包裹内容,由内容决定的 orientation排放的方向
* - Gravity
* - Android:gravity 用于设置该控件中内容相对于该控件的对齐方式
* - Android:layout_gravity: 用于设置该控件相对于父控件的对齐方式
* - Padding:用于设置该控件中内容相对于该控件的边距,即内边距
* - margin: 用于设置该控件相对于其他控件的边距,即外边距
* - weight: layout_weight的值用于在线性布局中指定父控件剩余空间的分配比例。
* - 所有的视图都有一个layout_weight值,默认为零,意思是需要显示 多大的视图就占据多大的屏幕空间。若赋一个高于零的值,则将父视 图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight 值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布 局的layout_weight值中所占的比率而定。
* 举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素. 该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。 如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分 在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2, 则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。
*/
/**
* - Andorid中像素单位 px dp sp
* - px:像素,全称图像元素,分辨率的尺寸单位
* - dpi:(dot per inch) 一般是指每英寸的像素,类似于密度,即每英寸图片上的像素点数量,用来表示图片的清晰度
* - dp:dip(Device Independent pixels),设备独立像素
* - sp:距离单位 -可缩放像素,一般用于指定字体大小。-当用户修改手机系统字体时,应用程序中的字体大小会随之变化。
*/
Screenshot_1507690638-w540
布局代码如下:
<?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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#6B8E23"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="东方网络金融"
android:layout_marginRight="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="信息服务部" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#ffb6c1"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="东方网络金融"
android:layout_marginBottom="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="信息服务部" />
</LinearLayout>
</LinearLayout>
如何定义一个Activity
-
创建一个Activity子类
-
重写Activity中的onCreate方法
-
在AndroidManifest.xml中对Activity进行注册
启动一个Activity
-
创建Intent意图对象
-
调用setClass 设置要启动哪个Activity
-
调用startActivity进行跳转
private Button button;
private int sum = 0;
private ButtonListener buttonListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//为当前的Activity设置当前显示的内容
setContentView(R.layout.activity_main);
//为button添加监听器
button = (Button)findViewById(R.id.button);
buttonListener = new ButtonListener();
button.setOnClickListener(buttonListener);
}
class ButtonListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//当控件被点击之后调用
sum++ ;
System.out.print("当前点击次数为:" + sum);
Intent intent = new Intent();
intent.setClass(MainActivity.this,OtherActivity.class);
startActivity(intent);
}
}
基础控件使用方法
TextView适用条件
- 当文本内容为电话、邮箱或者特定格式时
- 当文本内容超出控件宽度时
- 当需要更改文本字体类型和风格时
color:
1、导入color.xml文件至values文件夹下。
2、xml布局文件中,通过@color/对应颜色名称
drawable:
1、导入图片资源(.jpg/png)至drawable文件夹下(考虑适配的话,需要多张图片。不考虑的话,一张足矣)
2、xml布局文件中,通过@drawable/图片名称
string:
1、values文件夹下的strings.xml文件下,定义键值对。key:内容名 values:对应文字内容
2、xml布局文件中,通过@string/内容名(国际化、使xml布局文件更加整洁)
sp/dp:
实际开发中,有时为了美观、一致性 会使用dp来作为文字大小的单位。官方推荐使用sp。
autoLink:
设置特殊文字格式(web/phone/email/..)
ellipsize:
start/end/middle(一定要是singleline) 为显示不下的内容添加省略号
跑马灯:
- ellipsize:marquee
- singeline
- textIsSelectable
- marqueeRepeatLimit:forever..
- typeface:设置各种文字类型
- textSytle:设置文字风格
<?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">
<TextView
android:id="@+id/textview01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView基本属性解析" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/darkorange"
android:text="带有颜色的TextView" />
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@drawable/inter"
android:text="带有图片背景的TextView" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/more" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置文字大小、颜色"
android:textColor="@color/royalblue"
android:textSize="15sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:text="官网地址:http://www.dfjr888.com" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="email"
android:text="邮箱:xxxxxxxxx@163.com" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="phone"
android:text="电话:1234567980" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="map"
android:text="经纬度暂时无法使用,google地图已经退出啦。期待回归!" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableBottom="@drawable/ic_launcher"
android:drawableLeft="@drawable/ic_launcher"
android:drawableRight="@drawable/ic_launcher"
android:drawableTop="@drawable/ic_launcher"
android:gravity="center"
android:text="在我的周围添加图片吧!" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/magenta"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="@string/more"
android:textColor="@color/wheat"
android:textIsSelectable="true" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置字体风格"
android:textStyle="bold|italic" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="设置文字字体类型"
android:typeface="monospace" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#6B8E23"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="东方网络金融"
android:layout_marginRight="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="信息服务部" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#ffb6c1"
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="东方网络金融"
android:layout_marginBottom="10dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="信息服务部" />
</LinearLayout>
</LinearLayout>
Screenshot_1507710397