用户界面基础
了解UI界面
UI是User Interface的简称,是人和工具之间交互的工具,小到手机端的应用,大到计算机上的软件,都有它的参与。
UI设计则是指对软件的人机交互、操作逻辑、界面美观的整体设计。
View
View在Android中可以理解位视图。他占据屏幕上的一块矩形区域,负责提供组件绘制和时间处理的方法。
View类是所有的widgets组件的基类,例如,TextView(文本框),EditText(编辑框),和Button(按钮)都是widgets组件
View类位于android.view包中,文本框组件TextView是View类的子类,位于android.widget包中
ViewGroup
容器。ViewGroup类继承自View类,它是View类的扩展,是用来容纳其他组件的容器,但是由于ViewGroup是一个抽象类,所以在实际中通常是使用ViewGroup的子类来作为容器的。
ViewGroup控制其子组件的分布时还经常依赖于ViewGroup.Layout Params和ViewGroup.MarginLayoutParams两个累不累。
ViewGroup.LayoutParams类封装了布局的位置、高和宽等信息。它支持android:layout_height和android:layout_width两个XML属性,他们的属性值,可以使用精确的数值,也可以使用FILL_PARENT(表示与父容器相同)、MATCH_PARENT(表示与父容器相同,需要API8或以上版本才支持)或者WRAP_CONTENT(表示包裹其自身的内容)指定
ViewGroup.MarginLayoutParams类
ViewGroup.MarginLayoutParams类用于控制其子组件的外边距的。
Padding和Margins
Padding表示在View的顶部、底部、左侧和右侧的填充像素,它也被称为内边距。它设置的是内容与View边缘的距离。Padding将占据View的宽度和高度。设置指定的内边距后,视图内容将偏离View边缘指定的距离。
Margins表示组件的顶部、底部、左侧和右侧的空白区域,称为外边距。它设置的是组件与其父容器的距离。Margins不占据组件的宽度和高度。为组件设置外边距后,该组件将远离父容器指定的距离,如果还有相邻的组件,那么也将远离其相邻组件指定的距离。
px、dp、和sp
px(Pixels,像素):每个px对应屏幕上的一个点。
dp(设置独立像素)一种基于屏幕密度的抽象单位,也可以使用dip.在每英寸160点的显示器上,1dp=1px.但随着屏幕密度的改变,dp与px的换算也会发生改变
sp(比例像素):主要处理字体的大小,可以根据用户字体大小首选项进行缩放
界面布局
Android提供了相对布局、线性布局、帧布局、表格布局和网格布局进行详细介绍
相对布局
在相对布局中,放入其中的组件式相对于兄弟组件,或者父容器的位置进行排列的。
android:gravity
用来设置布局管理器中各子组件的摆放位置
android:ignoreGravity
用于指定哪个组件不受gravity属性的影响
线性布局
排列方式由android:orientation属性来控制,对齐方法由android:gravity属性来控制
horizontal水平排列
vertical垂直排列
android:gravity:属性用于设置布局管理器内组件的显示位置
android:layout_width:用于设置该组件的基本宽度
android:layout_height:用于设置该组件的基本高度
android:id用于当前组件指定一个id属性
android:background该组件设置背景
android:layout_gravity:用于设置组件在父容器中的位置
android:layout_weight用于设置组件所占的权重,即用于设置组件占父容器剩余空间的比例。
帧布局
android:foreground设置该帧布局容器的前景图像
android:goregroundGravity定义绘制前景图像的gravity属性,也就是前景图像显示的位置
表格布局
表格布局使用< TableLayout >(表格布局管理器)定义,在表格布局中,可以添加多个< TableRow>标记,每个< TableRow>标记占用一行,由于< TableRow>标记也是容器,所以在该标记中还可以添加其他组件,在< TableRow>标记中,每添加一个组件,表格就会增加一列。
网格布局
GridLayout
android:columnCount:用于指定网格的最大列数
android:orientation
用于没有为放入其中的组件分配行和列时,指定其排列方式。其属性值为horizontal表示水平排列,vertical表示垂直排列
android:rowCount用于指定网格的最大行数
android:useDefaultMargins用于指定是否使用默认的边距,其属性值设置为true时,表示使用,为false时,表示不使用
android:aligbnebtMode:用于指定该布局管理器采用的对齐模式,其属性值为alignBounds时,表示对其边界;值为alignMargins时,表示对齐边距,默认值为alignMargins
android:rowCount用于指定网格的最大行数
android:useDefaultMargins用于指定是否使用默认的边距,其属性值设置为true时,表示使用,为false时,表示不使用
android:alignmentMode用于指定该布局管理器采用的对齐模式,其属性值为alignBounds时,表示对齐边界;值为alignMargins时,表示对齐边距,默认值位alignMargins
android:layout_column用于指定该子组件位置网格的第几列
android:layout_columnSpan用于指定该子组件横向跨几列
android:layout_columnWeight用于指定该子组件在水平方向上的权重,即该组件分配水平剩余空间的比例
android:layout_gravity:用于指定该子组件采用什么方式占据该网格的空间。
android:layot_row用于指定该子组件位置网格的第几行
android:layout_rowSpan用于指定该子组件纵向跨几行
android:layout_rowWeight:用于指定该子组件在垂直方向上的权重,即该组件分配垂直剩余空间的比例
界面组件:
imageButton
android:src=@drawable/图片文件名"
TextView
TextView是文本框组件,用于在屏幕上显示文本,这与Java中的文本框组件不同,它相当于Java中的标签,也就是JLable.
EditText
EditText是编辑框组件,用于在屏幕上显示文本输入框,这与java中的文本框组件功能类似。android中的编辑框组件可以输入当行文本,也可以多行,还可以输入指定格式的文本
android:inputType属性,可以帮助输入法显示合适的类型,textPassword为密码
RadioButton
RadioButton为单选按钮,继承了Button
RadioButton的代码题
<RadioGroup>
android:id="@+id/radioGroup1"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<RadioButton
android:layout_height="wrap_content"
android:id="@+id/radio0"
android:text="男"
android:layout_width="wrap_content"
android:checked="true"/>
<RadioButton
android:layout_height="wrap_content"
android:id="@+id/radio1"
android:text="女"
android:layout_width="wrap_content"/>
</RadioGroup>
//在改变单选按钮组的值时获取
RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup1);
sex.setOnCheckedChangListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group,int checkedId){
RadioButton r=(RadioButton)findViewById(chekedId);
r.getText();
}
});
//在单击其他按钮是获取
final RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup1);
Button button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
for(int i=0;i<sex.getChildCount();i++){
RadioButton r=(RadioButton)sex.getChildAt(i);
if(r.isChecked(){
r.getText();
break;
}
}
}
});
//在之前的那个例子里面改变单选按钮组的值时获取
final RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup1);
sex.setOnCheckedChangeListener(new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(RadioGroup group,int checkedId){
RadioButton r=(RadioButton)findViewById(checkedId);
Log.i("单选按钮","您的选择是:"+r.getText());
}
});
//单击“提交”按钮时获取
Button button=(Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
for(int i=0;i<sex.getChildCount();i++){
RadioButton r=(RadioButton)sex.getChildAt(i);
if(r.isChecked()){
Log.i("单选按钮","性别:" +r.getText());
break;
}
}
}
});
Spinner
<Spiner
android:prompt="@string/info"
android:entries="@array/数组名称"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/ID号”
>
</Spinner>
GridView
网格视图是按照行、列分布的方式来显示多个组件,通常用于显示图片或是图标等。在使用网格视图时,