UI 概论
--------(相关概念参考WPF的布局文件);
用户界面布局
java文件中调用XML文件方法:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
Java文件调用布局文件中控件:
Button myButton = (Button) findViewById(R.id.my_button);
//R.id.my_button为button控件的id
布局位置
控件常用属性用法
在Java文件中获取控件宽高:getMeasuredWidth() 和 getMeasuredHeight() (其获取的为控件想要在parent控件中占用的空间大小)
getWidth() 和 getHeight() (获取控件实际占用空间大小)
setPadding(left,top,right,bottom);(参考WPF相应控件中的Padding属性),也可单独设置四属性:setPaddingLeft()…
setMargins() -----参考对应的setPadding( , , , )用法;
常见布局
相对布局(RelativeLayout)
RelativeLayout以相对位置显示各子view的位置,每个view的位置通过相对它的兄弟view或者它的父view来进行定位.
具有Layout_(above,bottom,End,Left,alignParentBottom,toLeftOf)…属性;
android:layout_above 在指定控件的上边
android:layout_alignBaseline 同指定控件在同一基线上
android:layout_alignBottom 与指定控件底部对齐
android:layout_alignEnd 与指定控件的end对齐
android:layout_alignLeft 与指定控件的左边对齐
android:layout_alignParentBottom 值为true, 与父布局底部对齐
android:layout_alignParentEnd 值为true,与父布局的end对齐
android:layout_alignParentLeft 值为true, 与父布局的左边对齐
android:layout_alignParentRight 值为true,与父布局的右边对齐
android:layout_alignParentStart 值为true, 与父布局的start对齐
android:layout_alignParentTop 值为true, 与父布局的顶部对齐
android:layout_alignRight 同指定控件的右边对齐
android:layout_alignStart 同指定控件的start对齐
android:layout_alignTop 同指定控件的顶部对齐
android:layout_alignWithParentIfMissing 设置为true时,如果layout_toLeftOf, layout_toRightOf, etc的对齐对象缺失的时候,则改为父布局。
android:layout_below 在指定控件的下面
android:layout_centerHorizontal 值为 true, 在父布局的水平中间对齐
android:layout_centerInParent 值为 true, 在父布局的水平垂直对齐
android:layout_centerVertical 值为 true, 在父布局的垂直对齐
android:layout_toEndOf 在指定控件的末端
android:layout_toLeftOf 在指定控件的左边
android:layout_toRightOf 在指定控件的右边
android:layout_toStartOf 在指定空间的始端
线性布局(LinearLayout):
一种使用单个水平行或垂直行来组织子项的布局。它会在窗口长度超出屏幕长度时创建一个滚动条.
使用其orientation属性控制内部控件线性排列方式;
布局权重:是该布局对于layout空余空间的利用,权重最大为“1”,默认为“0”,(就是当parent控件的空间未被完全利用时,可以为layout控件的子控件设置layout_gravity属性,增加(减少)其本身的大小)(注:gravity属性是设置控件内容的对齐方式);
表格布局(TableLayout)
其表格个数由TableRow和包含最多元素的TableRow共同决定,无需设置高宽度;
控件位置由layout_column指定;
layout_span指定跨列的个数
android:collapseColumns 指定列折叠起来,在界面上看不到该列
android:shrinkColumns 当本列的定义总长度超出屏幕宽度时,指定列缩减跨度以适应屏幕
android:stretchColumns 当本列的定义总长度不足屏幕宽度时,指定列拉伸以充满屏幕
网格布局(GridLayout)
子控件位置:
Cell中的子控件可以通过android:layout_column及android:layout_row来确定它在网格中的位置,由android:layout_columnSpan和android:layout_rowSpan来确定该子控件占据多少列或多少行。
也可通过orientation, rowCount 及 columnCount自动定位。(orientation表示布局中Vieww的排列主序; rowCount表示行的个数, columnCount表示列的个数;)
帧布局(FrameLayout)
只能在屏幕左上角显示一个控件,如果添加多个控件,这些控件会按照顺序在屏幕的左上角重叠显示。(帧布局只有一个属性就是android:layout_gravity)
绝对布局(AbsoluteLayout)
绝对布局需要通过指定x、y坐标来控制每一个控件的位置,放入该布局的组件需要通过android:layout_x和android:layout_y两个属性指定其准确的坐标值,并显示在屏幕上。
其他布局(后期学习)
ConstraintLayout(约束布局)
属性使用:layout_constraint(Left_toRightOf,Baseline_toBaselineOf…)="@+id/‘idname’"
Margin
指相互约束的两个widget之间的空白,它的值只能是大于等于0的值:layout_margin(Start,End…)
偏移
使用layout_constraintHorizontal_bias,layout_constraintVertical_bias定义(结合layout_constraintLeft_toLeftOf,layout_constraintRight_toRightOf)使用;
扇形定位(Circular positioning)
layout_constraintCircle : 引用另一个widget的id
layout_constraintCircleRadius : 到另一个widget中心的距离
layout_constraintCircleAngle : 多大的角度(从 0 到 360) 通过三者定位出控件的位置;
空间(dimension)约束
1:可设置布局的高(宽)度最大(小)值(前提:ConstraintLayout设置为WRAP_CONTENT);
2:空间约束(widget)
取值:1,常量(0dp,相当于是MATCH_CONSTRAINT(充满));2,WRAP_CONTENT(自适应大小),
3:链(chains)
链头·:最左(上)边(layout_constraintHorizontal_chainStyle 或者 layout_constraintVertical_chainStyle(默认值:CHAIN_SPREAD)控制链的布局方式);
widget属性:
MATCH_CONSTRAINT:沾满constration剩余空间(layout_constraintHorizontal_weight 和 layout_constraintVertical_weight属性用于设置对空余空间的分配比例);
链上有多个控件设置widget值为MATCH_CONSTRAINT:则比例分配剩余空间:
CHAIN_SPREAD_INSIDE – 和上面的值相似,不过两端的节点不会伸展
CHAIN_PACKED – 链中所有的元素会压缩在一起;元素的水平或者垂直的偏移量会影响压缩链的位置。
添加
(@+id/’string‘:在R文件中添加string的唯一id,此为第一次使用时使用,其他不使用@+id);
hint:提示文字(文字使用项目中已定义的字符串资源(string文件夹中存在对该字符串的定义));
string文件添加字符串格式:
<string name="名称">My First App(内容)</string>
引用方法:@string/名称;
主体和样式
样式:(参考Web学习的CSS样式);
主题:应用于整个Activity或app的样式
(样式的优先于主题)
创建样式要点:
1,根节点必须为resource
2,样式创建需有style,其中包含item节点,item中name值为XML中控件的属性,content为控件值
3,样式调用格式:
style="@style/'样式名称'"
4,在某groupview上运用样式时,其内含的view不会继承该样式;
5,style的parent属性用于继承Android库中的样式(默认样式);
6,样式->主题:在activity结点上将其theme值引用指定样式;
7,对于XML中控件若不支持style中某些item,则其自动忽略掉;
8,通过改样式继承Android大部分样式,而改变自己指定的属性值;
(1),父样式更改样式
<style name="GreenText" parent="TextAppearance.AppCompat">
<item name="android:textColor">#00FF00</item>
</style>
(2),点样式更改样式
<style name="GreenText.Large">
<item name="android:textSize">22dp</item>
</style>
(父样式优先级高于点样式)
按钮(Button)
文字按钮:Button
图片按钮:ImageButton
两者都有:通过text属性设置文字,通过drawable(bottom,end,…(图片与文字的位置关系))属性设置图片
点击事件(onclick)
(1),在mainactivity.java文件中编辑响应事件(必须为public,返回类型(void),唯一参数(View view)),
//此内容在oncreate外编写
Button buttonname;
public void sendMessage(View view) {
// Do something in response to button click
}
(2),使用事件监听(实例化按钮)
先实例化按钮:
Button buttonname;
监听:
//此内容在oncreate中编写
Button button = (Button) findViewById(R.id.button_send);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Do something in response to button click
}
});
(3) 。。。。。。
按钮样式:参考WPF中的button样式;
文本框
inputType:控制输入内容时唤醒的键盘类型;
自动补全
复选按钮,单选按钮
*(参考WPF相应组件的使用方法相应响应事件参考button响应事件;
Picker,Spinner,
Toast
弹出提示信息;
Toast toast = Toast.makeText(context, text, duration).show();
//content(Contnet):app的content
//text(CharSequence):需要显示的文本
//duration(int): 控制显示时间
定位提示信息位置:
setGravity(int, int, int)
//参数一:对齐方式
//参数二:向右偏移
//参数三:向下偏移