文章目录
参考书籍:第一行代码:Android(第二版)(郭霖):第三章
一、常用控件使用方法
1、初学暂时使用的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
2、TextView
TextView可以说是Android中最简单的一个控件,它主要用于在界面上显示一段文本信息,比如第一章中的HelloWorld,更多的使用方法如下
<!--
android:id:该组件的唯一标识符
android:layout_width:宽
android:layout_height:高
三个值可选:match_parent(当前控件的大小和父布局一样)、fill_parent(意思同上)、wrap_content(当前控件的大小刚好包含住里面的内容)
android:text:指定在TextView中显示的文本内容(文字默认是居左上角对齐)
android:gravity:指定组件内文字的对齐方式,可选top\bottom\left\right\center等
可以用"|"来同时指定多个值,center的效果等同于center_vertical|center_horizontal(竖直和水平都居中)
android:textSize:设置文字的大小(sp为单位)
android:textColor:设置文字颜色
android:textStyle:设置字体风格:italic(斜体),bold(加粗),normal(默认)
android:background:设置控件的背景颜色
android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用
android:shadowDx:设置阴影再说水平方向的偏移,就是水平方向阴影开始的横坐标位置
android:shadowDy:设置阴影再说竖直方向的偏移,就是水平方向阴影开始的纵坐标位置
android:shadowRadius:设置阴影的模糊程序,设为0.1就变成字体颜色,建议使用3.0
跑马灯如下:
android:singleLine:内容单行显示
android:focusable:是否可以获取焦点
android:focusableInTouchMode:用于控制视图在触摸模式下是否可以聚焦
android:ellipsize:在哪里省略文本(marquee滚动、start省略号在前面、end省略号在后面、middle省略号在中间、none)
android:marqueeRepeatLimit:字幕动画重复的次数marquee_forever无限次数
以下代码实现跑马灯
-->
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:text="HelloWorldHelloWorldHelloWorldHelloWorldHelloWorldHelloWorld"
android:background="#BBC8C3"
android:textStyle="italic"
android:textSize="24sp"
android:textColor="#229000FF"
android:shadowColor="@color/purple_700"
android:shadowDx="15.0"
android:shadowDy="15.0"
android:shadowRadius="10.0"
android:singleLine="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"/>
2、Button
Button是程序用于用户进行交互的一个重要控件
<!--以下内容写在布局<LinearLayout></LinearLayout>里面-->
<!--配置和TextView差不多
注意系统会对Button中的所有英文字母自动进行大写转换,可以使用
android:textAllCaps="false"禁止这个特性
-->
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button"
android:textAllCaps="false"/>
3、EditText
是程序用于和用户进行交互的另一个重要控件,它允许用户在控件里输入和编辑内容,并可以在程序中对这些内容进行处理
<!--以下内容写在布局<LinearLayout></LinearLayout>里面-->
<!--
android:hint:指定了输入框中的提示性文本
android:maxLines:指定最大行数,当输入内容超过最大行数时,文本就会向上滚动
-->
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="提示文本"
android:maxLines="2"/>
4、小案例:EditText和Button结合使用
//MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 通过点击按钮来获取EditText中输入的内容
* */
Button button=(Button) findViewById(R.id.button1);
editText=(EditText) findViewById(R.id.edit_text);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button1:
String inputText=editText.getText().toString();
//消息提示
Toast.makeText(MainActivity.this,inputText,Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
});
}
}
运行结果:
5、ImageView
ImageView是用于在界面上展示图片的一个控件,它可以让我们的程序界面变得更加丰富多彩,这个控件需要提前准备好一些图片,图片通常存放在以“drawable”开头的目录下,目前项目中有一个空的drawable目录,但是这个目录没有指定分辨率,所以一般不使用它来放置图片,这里在res目录下新建一个drawable-xhdpi目录,然后将准备好的两张图片img1.png和img2.png复制到该目录中。
<!--ImageView每个只能显示一张图片
android:src:图片存放的路径
-->
<ImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/img1" />
6、ProgressBar
用于在界面上显示一个进度条,表明程序正在加载一些数据,运行之后会看到屏幕中有一个圆形的进度条正在旋转
<!--
android:visibility:控制是否可见visible(可见),invisible(不可见),gone(不可见且不占用地方)
style="@style/Widget.AppCompat.ProgressBar.Horizontal":设置水平进度条
android:max="100":进度条长度
-->
<ProgressBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="visible"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:max="100"/>
<!--触动按钮时可以停止转动,部分Java代码-->
progressBar=(ProgressBar)findViewById(R.id.progress);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.button1:
String inputText=editText.getText().toString();
//消息提示
Toast.makeText(MainActivity.this,inputText,Toast.LENGTH_SHORT).show();
//通过按钮监控加载进度
// if(progressBar.getVisibility()==View.GONE){
// progressBar.setVisibility(View.VISIBLE);
// }else{
// progressBar.setVisibility(View.GONE);
// }
//动态修改水平进度条数据,每点击一次按钮进度条就加10
int projress=progressBar.getProgress();
projress=projress+10;
progressBar.setProgress(projress);
break;
default:
break;
}
}
});
7、AlertDialog
可以在当前的界面弹出一个对话框,这个对话框是置顶于所以界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般都是用于提示一些非常重要的内容或者警告信息,例如防止用户误删重要内容,在删除前弹出一个确认对话框
//onCreate()方法里面添加此代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=(Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
首先通过AlertDialog.Builder创建一个AlertDialog的实例,然后可以为这个话题框设置标题、内容、
可否使用back键关闭对话框等属性,接下来调用setPositiveButton()方法为对话框设置确定按钮的点击事件
调用setNegativeButton()方法设置取消按钮的点击事件,最后调用show()方法将对话框显示出来
*/
switch(view.getId()){
case R.id.button1:
AlertDialog.Builder dialog=new AlertDialog.Builder(MainActivity.this);
dialog.setTitle("This is a dialog");
dialog.setMessage("Something important.");
//设置是否可以用back键返回
dialog.setCancelable(false);
dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
dialog.show();
break;
default:
break;
}
}
});
}
}
运行结果:
8、ProgressDialog
和AlertDialog有点类似,都可以在界面上弹出一个对话框,都能够屏蔽掉其他控件的交互能力。不同的是,ProgressDialog会在对话框中显示一个进度条,一般用于标识当前操作比较耗时,让用户耐心等待。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 通过点击按钮来获取EditText中输入的内容
* */
Button button=(Button) findViewById(R.id.button1);
editText=(EditText) findViewById(R.id.edit_text);
progressBar=(ProgressBar)findViewById(R.id.progress);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*
* 这里也是先构建一个ProgressDialog对象,然后同样可以设置标题,内容
* 可否取消等属性最后调用show()方法显示出来
* progressDialog.setCancelable(true)如果填了false则不能通过back键取消
* 就需要再数据加载出来之后使用dismiss()方法来关闭对话框,不然ProgressDialog会一直在
* */
switch(view.getId()){
case R.id.button1:
ProgressDialog progressDialog=new ProgressDialog(MainActivity.this);
progressDialog.setTitle("This is ProgressDialog");
progressDialog.setMessage("Loading......");
progressDialog.setCancelable(true);
progressDialog.show();
break;
default:
break;
}
}
});
}
运行结果: