文章目录
- 1 Android中的基础控件
- 1.1 控件的通用属性
- 2 TextView
- 2.1 TextView的继承关系
- 2.2 TextView的常用属性
- 3 EditText
- 3.1 常用属性
- 4 Button
- 4.1 添加按钮点击事件的方式
- 4.1.1 自定义内部类
- 4.1.2 匿名内部类
- 4.1.3 当前Activity去实现事件接口
- 4.1.4 在布局文件中添加点击事件属性
- 5 ImageView
- 6 ProgressBar
- 7 综合案例
1 Android中的基础控件
首先来看一下常用的基础控件(View):
- 处理文本内容的View(TextView)
- 被点击的View(Button)
- 处理图片内容的View(ImageView)
- 接收用户信息输入的View(EditText)
- 进度条类的View(ProgressBar)
1.1 控件的通用属性
注意:
- padding指内边距
- margin指外边距
注意:
- layout_gravity指相对于父容器的对齐方式。
- gravity指其中内容相对于当前控件的对齐方式。
2 TextView
2.1 TextView的继承关系
如下:
2.2 TextView的常用属性
<!--长文本
android:text="" 指定文本控件的文本内容
android:textSize="26sp" 指定字体大小
android:textColor="#00ffff" 指定字体颜色
android:lineSpacingExtra="15dp" 行间距(具体大小)
android:lineSpacingMultiplier="1" 行间距(倍数)
可以将TextView放到滚动条下,滚动条下只能放一个直接子控件!
如果ScrollView中想放置两个控件怎么办呢?可以在ScrollView中放置1个布局,然后再在布局中放置控件。
-->
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/long_txt"
android:textSize="26sp"
android:textColor="#00ffff"
android:lineSpacingMultiplier="1.5"/>
跑马灯效果可以通过如下进行设置:
<!--
android:lines="" 设置行数
android:single="true" 设置单行
android:ellipsize="" 设置省略号
android:focusable="true" 设置可以获取焦点
android:focusableInTouchMode="true"设置在触摸时获取焦点
android:marqueeRepeatLimit="marquee_forever" 设置跑马灯持续运行
-->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/long_txt"
android:singleLine="true"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"/>
3 EditText
3.1 常用属性
<!--
android:inputType 输入类型
textPassword 密码
number 只能正整数
numberSigned 整数
numberDecimal 小数
上面的类型是可以使用|进行组合使用的。
android:hint 提示文字
android:maxLength 最长长度
-->
4 Button
4.1 添加按钮点击事件的方式
4.1.1 自定义内部类
package com.example.uidemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
//1.获取按钮
Button btn1 = findViewById(R.id.btn1);
//点击事件:被点击时被触发的事件
MyClickListener mcl = new MyClickListener();
btn1.setOnClickListener(mcl); //2.为按钮注册点击事件监听器
}
class MyClickListener implements View.OnClickListener{
@Override
public void onClick(View view) {
//在控制台输出一条语句
Log.e("TAG","按钮被点击了!");
}
}
}
4.1.2 匿名内部类
实现方式如下:
//匿名内部类适用于有唯一操作的按钮
Button btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//在控制台输出
Log.e("TAG","==========匿名内部类==========");
}
});
4.1.3 当前Activity去实现事件接口
记得去实现View.OnClickListener接口:
package com.example.uidemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class ButtonActivity extends AppCompatActivity implements View.OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button);
Button btn3 = findViewById(R.id.btn3);
btn3.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.e("TAG","用本类实现了OnClickListener");
}
}
4.1.4 在布局文件中添加点击事件属性
只需要在xml中设置android:onClick=“register_btn_clicked” :
然后在相应的Activity中实现函数:
public void register_btn_clicked(View view)
{
Log.e("tip", "register btn is clicker!");
}
5 ImageView
用来显示和控制图像的控件,可以对它进行放大,缩小,旋转等操作。
在Android Stdio中我们通常把图片文件放到mipmap文件夹中,因为对于图片的缩放支持比drawable的更好。
6 ProgressBar
进度条,默认情况下是圆形,没有刻度,只是一个不断旋转的动画效果。通过设置style,可以显示传统的水平带刻度进度条:
下面看一下代码:
<!--
进度条:默认样式是转圈。修改样式需设置风格
style 设置风格progressBarStyleHorizontal(水平进度条)
android:progress="" 设置进度
android:max="" 设置最大值,默认100
android:indeterminate="true" 设置进度条一直滚动
-->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:progress="30"
android:max="200"/>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:indeterminate="true"/>
<ProgressBar
android:id="@+id/progress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"/>
java代码如下:
package com.example.uidemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ProgressBar;
public class ProgressBarActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress_bar);
final ProgressBar progressBar = findViewById(R.id.progress);
progressBar.setProgress(80);
//在Android中,4.0以后是不能直接在线程中操作控件的
//进度条是个特例
new Thread(){
@Override
public void run() {
for(int i = 1 ; i <= 100 ; i++) {
progressBar.setProgress(i);
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
7 综合案例
下面看下如下界面:
首先看下xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="@mipmap/bg"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign Up"
android:textSize="36sp"
android:textColor="#ffffff"
android:layout_marginTop="70dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Imooc Imooc Imooc Imooc\nImooc Imooc Imooc"
android:layout_margin="20dp"
android:textSize="28sp"
android:textColor="#ffffff"
android:gravity="center_horizontal"/>
<!--
android:src="" 指定前景图片资源
android:background="" 设置背景
-->
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/add_photo" />
<!--<ImageButton-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:src="@mipmap/add_photo"/>-->
<!--
android:inputType 输入类型
textPassword 密码
number 只能正整数
numberSigned 整数
numberDecimal 小数
-->
<ProgressBar
android:id="@+id/pro_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"
android:visibility="invisible"
android:layout_margin="10dp"/>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:hint="Name and Surname"
android:gravity="center"
android:textColorHint="#cccccc"
android:background="@mipmap/border"/>
<EditText
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="25dp"
android:hint="Email Address"
android:gravity="center"
android:textColorHint="#cccccc"
android:background="@mipmap/border"/>
<EditText
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="25dp"
android:hint="Phone"
android:gravity="center"
android:textColorHint="#cccccc"
android:background="@mipmap/border"/>
<EditText
android:id="@+id/pwd"
android:layout_width="match_parent"
android:layout_height="68dp"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="25dp"
android:hint="Password"
android:gravity="center"
android:textColorHint="#cccccc"
android:background="@mipmap/border"
android:inputType="textPassword"
android:maxLength="12"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginRight="30dp"
android:layout_marginTop="40dp"
android:background="@mipmap/btn"
android:text="Register"
android:onClick="register"/>
</LinearLayout>
再来看下java文件:
package com.example.uidemo;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void register(View v){
//1.判断姓名、密码是否为空
EditText nameEdt = findViewById(R.id.name);
EditText pwdEdt = findViewById(R.id.pwd);
final ProgressBar proBar = findViewById(R.id.pro_bar);
String name = nameEdt.getText().toString();
String pwd = pwdEdt.getText().toString();
if(name.equals("") || pwd.equals("")) {
//2.如果为空,则提示
//无焦点提示
//参数1:环境上下文 参数2:提示性文本 参数3:提示持续时间
Toast.makeText(this,"姓名或密码不能为空",Toast.LENGTH_SHORT).show();
}else {
//3.都不为空,则出现进度条
proBar.setVisibility(View.VISIBLE);
new Thread(){
@Override
public void run() {
for(int i = 0 ; i <= 100 ; i++){
proBar.setProgress(i);
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
}