文章目录

  • 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 控件的通用属性

Android常见控件 android基本控件_android


注意:

  • padding指内边距
  • margin指外边距

Android常见控件 android基本控件_进度条_02

注意:

  • layout_gravity指相对于父容器的对齐方式。
  • gravity指其中内容相对于当前控件的对齐方式。

2 TextView

2.1 TextView的继承关系

如下:

Android常见控件 android基本控件_Android常见控件_03

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,可以显示传统的水平带刻度进度条:

Android常见控件 android基本控件_android_04


下面看一下代码:

<!--
        进度条:默认样式是转圈。修改样式需设置风格
        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 综合案例

下面看下如下界面:

Android常见控件 android基本控件_Android常见控件_05


首先看下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();
        }
    }
}