其实最近的一个学习进度我已经脱离了布局这一章,但是俗话说的话,按着书上打是不会有用的,需要的是自己写,然后我就回头重写一下《第一行代码》中介绍关于布局的章节,这篇文章也是在那之上进行记录
Android中提供了相当多的UI控件可供开发者使用,我只是记录某几个基础控件的用户

文本类控件

Textview 负责展示文本,非编辑
这个控件其实在一开始新建项目的时候就会自动调用了,就是显示Hello World的那个

<Textview
    android:id="@+id/text_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:text="This is TextView"
    andoird:textColor="#00FF00"
    android:textSize="24sp"
     />

这就是一个标准的Textview写法
其中layout_width和layout_height你们应该也是知道的,是调整高度和宽度的,android所有的控件都有这两个属性
android:gravity是用来指定文字的对齐方式的,可以填入top、bottom、left、right、center等,甚至可以用“|”来输入多个值
剩下的textColor和textSize也很简单,代表着文字的大小和颜色
其他还有很多很多的属性,自己看文档去吧

Edittext 可编辑文本控件
这个控件就是比Textview就是所谓的输入框,也和用户经行交互的另外一个重要的控件,它允许用户在控件中输入和编辑内容,并可以在程序中对内容经行修改

<EditText
    android:id="@+id/edit_text"
    android:layout_width="math_parent"
    android:layout_height="wrap_content"
    android:hint="在这里输入文字"
    android:maxLines="2"
          />

很多的属性和上面说到的都重复我就不再赘述
但是说一个这个hint,这个和学习html的时候用到的placeholder一样,也是用于显示提示性的文字,当我们输入的时候,这段文字就会自动消失
maxLines是当输入的文字过多,文字框会越拉越长,这里就设置它的最大高度为2,当超出2行的时候就会自动向上滚动不再拉伸EditText

接下来结合Buttom和Edittext来完成提示Toast的功能
首先我依照上面的图,写了一个Textview、Edittext和Buttom,这里Textview先无视
修改主项目的代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定布局
        setContentView(R.layout.activity_main);
        //定义按钮
        Button button_1 = (Button)findViewById(R.id.Button_1);
        //定位输入框
        editText = (EditText)findViewById(R.id.edit_text);
        button_1.setOnClickListener(this);

    }
    public void onClick(View v){
        switch(v.getId()){
            case R.id.Button_1:
                //首先从输入框中取得输入的值,使用getText()获取,并使用toString转成字符串
                String inputText = editText.getText().toString();
                //然后再把这内容输出Toast
                Toast.makeText(MainActivity.this,inputText,Toast.LENGTH_SHORT).show();
            break;
            default:
            break;
        }
    }

图片都不放了,你们可以自己试试


图片控件

ImageView 顾名思义,就是用来显示图片的一个控件
这个控件一般先要准备好展示的图片,图片通常都是放在"drawable"开头的目录下
添加一个图片控件也很简单

<ImageView
    android:id="@+id/image_view"
    android:layout_width="wrap_content"
    android:layout_height="warp_content"
    android:src="@drawable/img_1"
           />

通过按钮动态更改图片:
修改mainActivity中的代码

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText editText;
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定布局
        setContentView(R.layout.activity_main);
        //定义按钮
        Button button_1 = (Button)findViewById(R.id.Button_1);
        //定位输入框
        editText = (EditText)findViewById(R.id.edit_text);
        //定义图片
        imageView = (ImageView)findViewById(R.id.image_view);
        button_1.setOnClickListener(this);

    }
    public void onClick(View v){
        switch(v.getId()){
            case R.id.Button_1:
                //首先从输入框中取得输入的值,使用getText()获取,并使用toString转成字符串
                String inputText = editText.getText().toString();
                //然后再把这内容输出Toast
                Toast.makeText(MainActivity.this,inputText,Toast.LENGTH_SHORT).show();
                //修改图片
                imageView.setImageResource(R.drawable.img_2);
            break;
            default:
            break;
        }
    }

进度条控件

ProgressBar 进度条
ProgressBar用于在界面上显示一个进度条,表示在加载中,用法也很简单

<ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_center"
        style="?android:attr/progressBarStyleHorizontal"
             android:max="100"
             />

这里我给进度条改了样式,并给它设置了最大值100,因为我等下要在代码中修改它的值
并且我们还需要对它的显示进行修改
android所有的控件都有一个可见属性的修改,可以通过android:visibility经行指定
而android:visibility有三个可选值:visible、invisible、gone
默认就是visible,它是代表可见的
invisible就是隐藏控件,但是它还占据原来的控件位置和大小,就当作是被改成透明的了
gone就是彻底隐藏,也不会再占用位置


接下来我们来修改mainAcitivity的代码,让进度条加满并且加到100之后隐藏,贴上完整的

package com.example.uiwidgettest;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private EditText editText;
    private ImageView imageView;
    private ProgressBar progressBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //绑定布局
        setContentView(R.layout.activity_main);
        //定义按钮
        Button button_1 = (Button)findViewById(R.id.Button_1);
        //定位输入框
        editText = (EditText)findViewById(R.id.edit_text);
        //定位图片
        imageView = (ImageView) findViewById(R.id.image_view);
        //定位加载条
        progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        button_1.setOnClickListener(this);
    }
    public void onClick(View v){
        switch(v.getId()){
            case R.id.Button_1:
                final String inputText = editText.getText().toString();
                //在这里添加逻辑
                //获取输入框得信息
                //改变图片
                imageView.setImageResource(R.drawable.img_2);
                /*默认的隐藏进度条
                if(progressBar.getVisibility() == View.GONE){
                    //VISIBLE是可见得
                    //GONE表示隐藏而且不占用空间
                    //invisible是隐藏并且占用
                    progressBar.setVisibility(View.VISIBLE);
                }else{
                    progressBar.setVisibility(View.GONE);
                }*/
                int progress = progressBar.getProgress();
                if(progress<100){//判断progress的值
                    progress = progress + 10;
                    progressBar.setProgress(progress);
                }else{
                    progressBar.setVisibility(View.GONE);
                }


                //加载progressDialog
            case R.id.Button_2:
              break;
            default:
        }
    }
}

对话框控件

AlertDialog弹出式对话框
AlertDialog可以在当前界面弹出一个对话框,这个对话框是置顶于所有界面元素之上
和之前学的那个Dialog一样,能够屏蔽其他控件的交互能力
一般来说可以用这个来防止用户误操作
比如不小心点击放回啊,不小心点到删除啊,可以让用户选择放回

 public void onClick(View v){
        switch(v.getId()){
            case R.id.Button_1:
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                //设置控件标题
                dialog.serTitle(Warning!!);
                //设置控件的内容
                dialog.setMessage("Are you sure?");
                dialog.setcancelable(false);
                //设置点击Yes的状态
                dialog.setPositiveButton("Yes",new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog,int which)
                });
                //设置点击No的状态
                dialog.setNegativeButton("No",new DialogInterface.OnClickListener(){
                    public void onClick(DialogInterface dialog,int which)
                });
                //然后传入show()显示
                dialog.show();

                break;
        }
    }


一只蠢莫