一、Android中的布局(layout)
1.线性布局 - Linear Layout:按排列的方向(orientation)分为垂直线性布局(android:orientation=“vertical”)和水平线性布局(android:orientation=“horizontal”//水平线性布局)。
线性布局定义了排列方向后,会一直沿着该方向一直排列下去,除非利用嵌套再重新定义。
我们的计算器界面就是如此,在原有的垂直布局里进行了几个嵌套式的水平布局。
常用代码:
android:layout_weight="数字" //表示剩余空间该控件所占的百分比,通常用于平均几个控件之间的位置,定义为1
android:gravity="right"//android:gravity:是对控件本身来说的,是用来设置“控件自身的内容”应该显示在“控件自身体积”的什么位置,默认值是左侧。
android:layout_gravity="right"//android:layout_gravity:是相对于控件的父元素来说的,设置该控件在它的父元素的什么位置。
android:layout_gravity="fill"//表示的是水平拉伸,占满父空间;或者垂直拉伸,占满父空间
android:layout_width="match_parent"
android:layout_height="wrap_content"
//上面两个分别是设置控制键宽和高的方法;注意的是:
//match_parent表示继承父类的最大长度;Android2.2及以后的版本中match_parent和fill_parent是一个意思 .两个参数意思一样,match_parent更贴切,于是从2.2开始两个词都可以用。那么如果考虑低版本的使用情况你就需要用fill_parent了
//wrap_content表示设置为适应文本大小的长度;设置一个视图的尺寸为wrap_content将强制性地使视图扩展以显示全部内容。以TextView和ImageView控件为例,设置为wrap_content将完整显示其内部的文本和图像。布局元素将根据内容更改大小。设置一个视图的尺寸为wrap_content大体等同于设置Windows控件的Autosize属性为True。
//fill_parent设置一个构件的布局为fill_parent将强制性地使构件扩展,以填充布局单元内尽可能多的空间。这跟Windows控件的dockstyle属性大体一致。设置一个顶部布局或控件为fill_parent将强制性让它布满整个屏幕。
相对布局 Relative Layout:
android:layout_alignParentLeft="true" //位于父容器左上角
android:layout_alignParentBottom
android:layout_alignParentTop
android:layout_alignParentRight //只能在父控件为RelativeLayout时才起作用,而对于像LinearLayout这样的布局不起作用
android:layout_centerInParent="true" //位于布局容器的中央位置;
layout_centerHorizontal//位于布局容器水平居中位置;
layout_centerVertical//位于布局容器垂直居中位置
//被参照控件:控件与控件之间位置:
android:layout_below="@id/***" //位于***组件下方
android:layout_toLeftOf="@id/###" /*位于###组件左则,紧贴并列*/
//控件与控件之间对齐方式:
android:layout_alignLeft="@id/***" //与***组件左边界紧贴对齐,叠在一起;
android:layout_alignTop="@id/###" /*与###组件上边界对齐*/
表格布局 Table Layout:
表格布局模型以行列的形式管理子控件,每一行为一个TableRow的对象,当然也可以是一个View的对象。TableRow可以添加子控件,每添加一个为一列。N个TableRow之间是以N行的行数的方式纵向排列。
android:shrinkColumns="n":/*设置第n+1列为可收缩的列。当可收缩的列太宽(内容过多)不会被挤出屏幕。当需要设置多列为可收缩时,将列序号用逗号隔开。*/
android:stretchColumns="n":/*设置第n+1列为可伸展的列,以填满剩下的多余空白空间,若有多列需要设置为可伸展,请用逗号将需要伸展的列序号隔开。 */
// 列元素(Button)属性,定义子控件。
android:layout_colum:/*设置该控件在TableRow中指定的列。*/
android:layout_span:/*设置该控件所跨越的列数。*/
网格布局 Graid Layout:
android:rowCount="5" //定义行最大格数为5
android:columnCount="4"//列最大格数为4的格子
android:layout_columnSpan="4"//设置了该组件在横向上跨了几列
//android:layout_width和android:layout_columnSpan功能其实并不重叠,前者设置的是在视觉上横向的宽度,后者则是不管前者多宽,android:layout_columnSpan设置的范围内都不允许其他组件占用。
android:layout_rowSpan="3"//表示=的该格子占了3行
android:layout_gravity="fill"//如果需要往水平或竖直方向填充该控件,这句话不写,会多空出两个格子,但不会充满三个格子/>
绝对布局 AbsoluteLayout:
绝对布局的子控件需要指定相对于此坐标布局的横纵坐标值,手机应用需要适应不同的屏幕大小,而这种布局模型不能自适应屏幕尺寸大小,应用的相对较少。
android:layout_x="10px"//水平绝对位置
android:layout_y="10px"//垂直绝对位置
帧布局 FrameLayout:
帧布局,默认针对左边位置的(可用android:layout_gravity="center"定义位置)。所有的控件都有各自的坐标位置来显示
框架布局是最简单的布局形式。所有添加到这个布局中的视图都以层叠的方式显示。第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆盖下一层的控件。这种显示方式有些类似于堆栈。
二、Android中activity文件中的方法:
private boolean isChar = false;//Boolean(布尔)对象用于将非布尔值转换为布尔值(true 或者 false)。检查布尔对象是 true 还是 false。
StringBuffer// 类的对象能够被多次的修改,并且不产生新的未使用对象。
//StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。
super.onCreate(savedInstanceState)//是调用父类Activity的onCreate()方法
以下是 StringBuffer 类支持的主要方法:
digtalB = new StringBuffer();
digtalB.append(0);
StringBuffer append(boolean b)//将 boolean参数的字符串表示附加到序列中。
StringBuffer append(char c)//将 char参数的字符串表示附加到此序列。
StringBuffer append(char[] str)//将 char数组参数的字符串表示附加到此序列。
StringBuffer append(char[] str, int offset, int len)//将 char数组参数的子阵列的字符串表示附加到此序列。
StringBuffer append(CharSequence s)//追加指定的 CharSequence到这个序列。
StringBuffer append(CharSequence s, int start, int end)//追加指定的序列 CharSequence到这个序列。
StringBuffer append(double d)//将 double参数的字符串表示附加到此序列。
StringBuffer append(float f)//将 float参数的字符串表示附加到此序列。
StringBuffer append(int i)//将 int参数的字符串表示附加到此序列。
StringBuffer append(long lng)//将 long参数的字符串表示附加到此序列。
StringBuffer append(Object obj)//追加 Object参数的字符串表示。
StringBuffer append(String str)//将指定的字符串附加到此字符序列。
StringBuffer append(StringBuffer sb)//将指定 StringBuffer这个序列。
StringBuffer appendCodePoint(int codePoint)//将 codePoint参数的字符串表示法附加到此序列。
StringBuffer delete(int start, int end)//删除此序列的子字符串中的字符。
StringBuffer deleteCharAt(int index)//删除 char在这个序列中的指定位置。
StringBuffer insert(int offset, boolean b)//在此序列中插入 boolean参数的字符串表示形式。
StringBuffer insert(int offset, char c)//在此序列中插入 char参数的字符串表示形式。
StringBuffer insert(int offset, char[] str)//在此序列中插入 char数组参数的字符串表示形式。
StringBuffer insert(int index, char[] str, int offset, int len)//在此序列中插入 str数组参数的子阵列的字符串表示形式。
StringBuffer insert(int dstOffset, CharSequence s)//将指定的 CharSequence这个序列。
StringBuffer insert(int dstOffset, CharSequence s, int start, int end)//将指定的子序列 CharSequence这个序列。
StringBuffer insert(int offset, double d)//在此序列中插入 double参数的字符串表示形式。
StringBuffer insert(int offset, float f)//在此序列中插入 float参数的字符串表示形式。
StringBuffer insert(int offset, int i)//将第二个 int参数的字符串表示插入到此序列中。
StringBuffer insert(int offset, long l)//在此序列中插入 long参数的字符串表示形式。
StringBuffer insert(int offset, Object obj)//将 Object参数的字符串表示插入到此字符序列中。
StringBuffer insert(int offset, String str)//将字符串插入到此字符序列中。
StringBuffer replace(int start, int end, String str)//用指定的String中的字符替换此序列的子字符串中的 String 。
StringBuffer reverse() //导致该字符序列被序列的相反代替。
序号 | 方法描述 |
---|---|
1. | public StringBuffer append(String s)将指定的字符串追加到此字符序列。 |
2. | public StringBuffer reverse() 将此字符序列用其反转形式取代。 |
3. | public delete(int start, int end)移除此序列的子字符串中的字符。 |
4. | public insert(int offset, int i)将 int 参数的字符串表示形式插入此序列中。 |
5. | replace(int start, int end, String str)使用给定 String 中的字符替换此序列的子字符串中的字符。 |
Bundle SavedInstanceState保存状态:
当按到home键,退出了程序界面,或者回收了应用的进程,这种情况下使用Bundle SavedInstanceState 就可以再次打开应用的时候恢复到原来的状态.
当Activity 变得容易被销毁时,Activity的onSaveInstanceState 就会被执行
除非是 用户自己按了back按键。
btnAdd = (Button) this.findViewById(R.id.btnAdd);//通过id进行查找