张若萱 学习笔记1

Posted by SIPC Android's Blog on May 24, 2019

泛型

泛型的存在是为了可以让我们在写自己的java文件时就能让编译器查出错误,方便修改

比如说

list a=new arraylist;
a.add("123");
a.add(123);
string s=a.get(1);

这个时候编译器不会报错,但在运行时会报错 出现编译错误比运行错误好的多,使程序有更好的可读性和安全性

可以在list后面加然后a.add(123)下面会有一条线 ###泛型类

public class A<T>
{
private T a;
public T getA{
return a;
   }
}

###泛型方法 可以定义在普通类中,也可以定义在泛型类中

public <T> T geta()....

调用方法时,要把<类型名>写在方法前面

###类型擦除 无论何时定义一个泛型类型都自动提供了一个相应的原始类型,原始类型就是删去类型参数后的泛型类型的名字, 擦除类型变量,并替换为限定类型,无限定就是object

下面这个例子表示用getclass方法时总是返回原始类型

arrayList<string> a=new arrayList();
arrayList<Interger> b=new arrayList();
bollean c=(a.getClass()==b.getClass())//true

通配符

1.? extends … 若使用的该种通配符,调用set或者其他需要传入这个泛型类设定的类的参数时,编译器会报错,因为他不知道那些是 entends 后设定的父类

2.? super … 这个限制为…的父类若写入(调用set 方法)不能接受其父类或者object 类的对象,只能传递他本身的对象或者他 的子类型对象 如果返回(get 方法)只能给Object

带有超类型限定的通配符可以向泛型对象写入,带有子类型限定 的通配符可以从泛型对象中读取

匿名内部类和接口回调

匿名内部类

new 父类构造器(参数列表)|实现接口()
{
}

所以看他的格式可以知道我们必须要继承一个父类或者实现一个接口,必须实现其抽象父类或者接口里的所有方法 匿名内部类中不能定义构造函数,不能存放任何的静态变量和方法// ###接口回调 我理解的接口回调就是要完成一件事情需要向一个方法中传入另一个方法(这个方法可以是匿名内部类实现)

public interface Callback{public void work();}
public class A{
   ....
B b=new B ();
   public void call()
{
      b.calllll(new Callback()
     {
         public void work(){}
      }
)
   }
}
public class {   
....
Callback callback;
publlic void callll(Callback callback)
    {
      this.callback=callback;
   }
}
这个时候在A 中用匿名内部类定义了callback 中的方法,再向B中传入,B中的方法使用了这个传入的方法,完成后回到A

布局

布局属性

【android:id】为控件指定相应的ID

【android:text】指定控件当中显示的文字
【android:gravity】指定View组件的对齐方式,比如说居中,居右等位置 这里指的是控件中的文本位置并不是控件本身
【android:textSize】指定控件当中字体的大小
【android:background】指定该控件所使用的背景色,RGB命名法
【android:width】指定控件的宽度控件与组件
【android:height】指定控件的高度```
还有像padding这种在html里出现过的

PS: sp 在不同的屏幕中相对大小不一致 一般给文字大小用 dp 会根据屏幕分辨率自动匹配大小 一般给控件大小用

###线性布局(LinearLayout) 1.

LinearLayout按照①垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后 。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。

andriod :orientation="vertical"

LinearLayout按照①垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列, 那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。 这个表示垂直属性,比如说在里面加三个button,这三个将在页面中上下排列 如果将vertical改为horizontal他们就会出现在同一行上

2. android:layout_gravity=”center”

这个时当前内容在其对应方式上的设置 还有left,right,bottom,top

相对布局RelativeLayout

他的一些属性

相对父容器,值是true或false

android:layout_alignParentLeft ------相对于父靠左
android:layout_alignParentTop-------相对于父靠上
android:layout_alignParentRight------相对于父靠右
android:layout_alignParentBottom ---相对于父靠下
android:layout_centerInParent="true" -------相对于父即垂直又水平居中
android:layout_centerHorizontal="true" -----相对于父即水平居中
android:layout_centerVertical="true" --------相对于父即处置居中

也可以用数值来表示其位置

android:layout_margin="10dp"
android:layout_marginLeft
android:layout_marginRight
android:layout_marginTop
android:layout_marginBottom

还有相对于别的控件定位,这个时候需要用到别的控件的id值,要写成“@id/……”

android:layout_above----------位于给定DI控件之上
android:layout_below ----------位于给定DI控件之下
android:layout_toLeftOf -------位于给定控件左边
android:layout_toRightOf ------位于给定控件右边

控件

textview

andriod:text指定TestVeiw中显示的文本内容 textSize文字大小textColor文字颜色

botton

用andriod:text 显示上面的文字 可以在MainActivity中为Button注册一个监听器