XML布局属性
样式、主题及主题属性
样式:style 是XML资源文件,含有用来描述组件行为和外观的属性定义。
主题:theme 是各种样式的集合。是属性指向其它样式资源的一种样式资源。
主题属性引用:可将预定义的应用主题样式添加给指定组件。如
?android:listSeparatorTextViewStyle。
dp、sp以及屏幕像素密度
dp:density-independent pixel 的缩写,也有写作dip的,意为密度无关像素。布局时常用这种单位,1dp单位在设备屏幕上宗师等于1/160英寸。
sp:scale-independent pixel的缩写,意为缩放无关像素。会受到用户字体偏好设置的影响。通常用于设置字体大小。
布局参数
名称不以layout_开头的属性作用于组件。组件生成时,会调用某个方法按照属性及属性值进行自我配置。
名称以layout_开头的属性则作用于组件的父组件。将这些属性统称为布局参数,通知父布局如何在内部安排自己的子元素。
边距与内边距
边距:也称作外边距,android:layout_margin(XXX),XXX是指left、right、top、bottom四个方向,不添加方向的话就是指四个方向都添加同样的边距。属于布局参数,决定了组件之间的距离。
内边距:android:padding(XXX),XXX是指left、right、top、bottom四个方向,不添加方向的话就是指四个方向都添加同样的内边距。告诉组件,在绘制自身时,要比所含内容大多少。
android:layout_weight属性的工作原理
该属性告诉LinearLayout如何进行子组件的布置安排。在决定子组件视图的宽度时,LinearLayout使用的是layout_width(height)与layout_weight参数的混合值。
1.LinearLayout查看组件的layout_width属性值(竖直方向看layout_height属性值)占据多少空间;
2.LinearLayout根据layout_weight属性值对剩余空间进行分配。
Fragment启动Activity
基本等同于从Activity启动另一个Activity的实现方式,调用Fragment.startActivity(Intent intent)。
获取Extra信息
1.直接获取
getActivity().getIntent().getExtra(),如果是序列化对象就是getSerializableExtra()。
弊端:牺牲了fragment的封装性,fragment总是由某个Activity托管着,不再是可复用的构建单元。
2.fragment argument
每个Fragment实例都可附带一个Bundle对象,该对象包含键值对,一个键值对即一个argument。
创建fragment argument之前,先创建Bundle对象,使用Bundle限定类型的put方法,将argument添加到bundle中。如:
Bundle args = new Bundle();
args.putSerializable("xxx",yyy);
2.1.附加argument给fragment
调用Fragment.setArguments(Bundle bundle)。注意:该过程必须在Fragment创建后,添加给Activity之前完成。
2.2.获取argument
先调用Fragment.getArguments()获取argument,再调用Bundle限定类型的get方法。如:
YYY yyy = getArguments().getSerializable("xxx");
无需getActivity(),即无需托管Activity的上下文,这保留了Fragment的独立性。
通过Fragment获取返回结果
Fragment.startActivityForResult()
Fragment.onActivityResult()
注意:fragment能够重Activity中接收返回结果,但其自身无法产生返回结果,只有Activity拥有返回结果,所以Fragment没有setResult()。