一、常用控件的使用方法
1.1TextView
TextView可以说是Android中最简单的一个控件了,它主要用于在界面上显示一段文本信息,比如在第1章看到的“Hello world!”。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="Center"
android:textSize="24sp"
android:textColor="#00ff00"
android:text="This is TextView" />
</LinearLayout>
android:gravity 来指定文字的对齐方式,可选值有top、bottom、left、right、center等,可以用“|”来同时指定多个值;
android:textSize 属性可以指定文字的大小
android:textColor 属性可以指定文字的颜色,在Android中字体大小使用sp作为单位
1.2Button
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="false"
android:text="Button" />
</LinearLayout>
android:textAllCaps 禁止将小写转为大写
在MainActivity中为Button的点击事件注册一个监听器(使用匿名类的方式注册),如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 在此处添加逻辑
}
});
}
}
这样每当点击按钮时,就会执行监听器中的onClick() 方法,我们只需要在这个方法中加入待 处理的逻辑就行。
也可以使用实现接口的方式注册监听器,代码如下:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button:
// 在此处添加逻辑
break;
default:
break;
}
}
}
1.3EditText
EditText是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="hahaha"
android:maxLines="2"
/>
</LinearLayout>
android:hint 属性指定了一段提示性的文本,当输入任何内容的时候,这段文本就会消失
android:maxLines指定了EditText的最大行数
1.4ImageView
用于在界面上展示图片的一个控件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<ImageView
android:id="@+id/iamge_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img_1"//给ImageView指定了一张图片
/>
</LinearLayout>
imageView.setImageResource(R.drawable.img_2);//将图片改成img_2
1.5ProgressBar
用于在界面上显示一个进度条,表示正在加载一些数据
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"//指定为水平进度条
android:max="100"
/>
</LinearLayout>
Android控件的可见性:
可以通过android:visibility进行指定,可选值有三个:visible(可见)、invisible(不可见,但仍占据原来的位置)、gone(不可见,不占用任何屏幕空间)
还可以通过代码来设置:setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE、 View.GONE
在代码中动态更新进度条的进度:
int progress=progressBar.getProgress();
progress=progress+10;//每点击一次按钮,获取当前进度,在现有进度上加10作为更新后的进度
progressBar.setProgress(progress);
1.6AlertDialog
在当前界面弹出一个对话框,这个对话框置顶于所有界面元素之上,能够屏蔽掉其他控件的交互能力,用来提示重要的内容或警告信息
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("This is Dialog");//为这个对话框设置标题
dialog.setMessage("Something important.");//设置内容
dialog.setCancelable(false);//可否用Back键关闭对话框
dialog.setPositiveButton("OK",new DialogInterface).//OK的点击事件
OnClickListener(){
@override
public void onClick(DialogInterface dialog,int which){
}
});
dialog.setNegetiveButton("CANCEL",new DialogInterface).//CANCEL的点击事件
OnClickListener(){
@override
public void onClick(DialogInterface dialog,int which){
}
});
dialog.show();
1.7ProgressDialog
在界面上弹出对话框,对话框中显示一个进度条,一般用于表示当前操作比较耗时,让用户耐心等待
ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setTitle("This is progressDialog");//为这个对话框设置标题
progressDialog.setMessage("Loading...");//设置内容
progressDialog.setCancelable(true);//可否用Back键关闭对话框
如果传入了false,则需调用ProgressDialog的dismiss()方法来关闭对话框
progressDialog.show();
二、详解4种基本布局
2.1LinearLayout线性布局
布局中的控件在线性方向上依次排列,默认控件水平方向排列
android:orientation=”horizontal”水平方向
控件宽度不能设置为android:layout_width=“match_parent”,会把水平方向占满,其他控件无法放置
android:orientation=”vertical”垂直方向
控件高度不能设置为android:layout_width=“match_parent”
android:layout_gravity=left,right,top,bottom,center指定控件的对齐方式
android:layout_weight指定控件的大小
2.2RelativeLayout相对布局
通过相对定位的方式让布局中控件可以出现在布局的任何位置
android:layout_margin指定控件在上下左右方向上的偏移
(Left、Right、Top、Bottom)离某方向的距离
android:layout_alignParent****(Left、Right、Top、Bottom)相对于布局定位
android:layout_below让一个控件位于另一个控件下方,需要为这个属性指定相对控件id
android:layout_above让一个控件位于另一个控件的上方,需要为这个属性指定相对控件id
例:android:layout_above=“@id/button3"
android:layout_to(Left、Right)Of让一个控件位于另一个控件的左边
android:layout_align(Left、Right、Top,Bottom)让一个控件的某边缘和另一个控件的某边缘对齐
2.3帧布局
所有控件都会默认摆放在左上角,后面的会覆盖前面的,每一个组件都代表一个画面
可以用android:layout_gravity=left,right,top,bottom,center指定控件的对齐方式
三、自定义控件
3.1引入布局
所有的控件都是直接或者间接继承自View,所有的布局都是直接或间接继承自ViewGroup
android:background用于为布局或控件指定一个背景,可以使用颜色或图片进行填充
※通过include语句将标题栏布局引入需要添加标题栏的布局就可以了:
<include layout="@layout/title"/>
3.2创建自定义控件
新建TitleLayout继承自LinearLayout,成为我们自定义的标题栏控件
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);
}
}
现在自定义控件已经创建好了,然后我们需要在布局文件中添加这个自定义控件,修改 activity_main.xml中的代码,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.example.uicustomviews.TitleLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
※添加自定义控件的时候,需要指明控件的完整包名,不可省略
为标题栏中的按钮注册点击事件,修改TitleLayout中的代码,如下所示:
public class TitleLayout extends LinearLayout {
public TitleLayout(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.title, this);
Button titleBack = (Button) findViewById(R.id.title_back);
Button titleEdit = (Button) findViewById(R.id.title_edit);
titleBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
((Activity) getContext()).finish();
}
});
titleEdit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "You clicked Edit button",Toast.LENGTH_SHORT).show();
}
});
}
}