Android第一行代码-UI

Posted 钢铁-程序猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android第一行代码-UI相关的知识,希望对你有一定的参考价值。

文章目录

UI开发的点点滴滴

一、常用控件的使用方法

1、TextView

如:

<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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_view"
        android:text="This is TextView"></TextView>
</LinearLayout>

TextView的部分属性:

  • 1、android:id:给当前控件定义一个唯一标识符
  • 2、android:layout_width:指定控件宽度
  • 3、android:layout_height:指定控件高度
  • 4、android:text:指定TextView中显示的文本内容
  • 5、android:textSize:指定文字的大小,在android中字体大小使用sp作为单位。
  • 6、android:textColor:指定文字的颜色
  • 7、android:gravity:[ˈɡrævəti] 引力,重力,指定文字的对齐方式

TextView中的文本内容虽然显示,但是在左上角,因为TextView中的文字默认是左上角对齐的。

使用android:gravity指定文字的对齐方式,可选值有top、bottom、left、right、center。可以用"|"来同时指定多个值。

<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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text_view"
        android:gravity="center"
        android:text="This is TextView"></TextView>
</LinearLayout>

Button

Button是程序用于和用户进行交互的一个重要控件。属性和TextView差不多,可以在activity_main.xml中这样加入Button:

<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:text="Button"></TextView>
</LinearLayout>

虽然在布局文件中设置的文字为Button,但是最终显示却是”BUTTOM“,这是由于系统会对Button中的所有英文字母自动进行大写转换。但是可以配置禁用这个默认属性,在Button中修改android:textAllCaps=“false”

android:textAllCaps="false"

可以为Button的点击事件注册一个监听器。

public class MainActivity extends AppCompatActivity
	@Override
	protected void onCreate(Bundle savedInstanceState)
		super.onCreate(saveInstanceState);
		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(saveInstanceState);
		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;
		
	

EditText

一些属性:

  • android:hit:输入框提示内容,一旦输入,提示内容消失
  • andorid:maxLines:指定EditText的最大行数。

程序和用户进行交互的另外一个重要控件。
修改activity_main.xml中的代码:

<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"
        />
</LinearLayout>

一般在输入框显示一些提示性的文字,一旦用户输入了任何内容,这些文字提示就会消失。可以通过android:hint属性进行设置。

使用点击按钮获取EditText中输入的内容

package com.example.uiwidgettest;

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 implements View.OnClickListener


    private EditText editText;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button)findViewById(R.id.button);
        editText = (EditText)findViewById(R.id.edit_text);
        button.setOnClickListener(this);
    

    @Override
    public void onClick(View v) 
        switch (v.getId()) 
            case R.id.button:
                //getText方法获取输入的内容
                String inputText = editText.getText().toString();
                Toast.makeText(MainActivity.this, inputText, Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        
    


ImageView(在页面上展示图片的控件,图片防止在res下的以drawable开头的目录中)

图片通常放在以drawable开头的目录下,目前项目中有一个空的drawable目录,但没有指定具体分辨率。所以一般不使用它来放置图片。在res目录下新建一个drawable-xhdpi目录。

在activity_main.xml中添加标签:

<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/image_view"
        android:src="@drawable/img_1" />
package com.example.uiwidgettest;

import androidx.appcompat.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.Toast;

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 = (Button)findViewById(R.id.button);
        editText = (EditText)findViewById(R.id.edit_text);
        imageView = (ImageView)findViewById(R.id.image_view);
        button.setOnClickListener(this);
    

	//通过按钮点击事件将将显示的img_1图片修改为img_2图片
    @Override
    public void onClick(View v) 
        switch (v.getId())
            case R.id.button:
                imageView.setImageResource(R.drawable.img_2);
                break;
            default:
                break;
        
    

ProgressBar(进度条,表示程序正在加载一些数据)

用于在页面上显示一个进度条,表示我们的程序正在加载一些数据。

常用属性

android:visibility属性的值:

  • 1、visible:控件可见的
  • 2、invisible:控件不可见,但是仍然占据着原来的位置和大小,可以理解成控件编程透明状态
  • 3、gone:控件不可见,而且不占用任何屏幕空间。

通过style属性可以将它指定成水平进度条(如果不设置是箭头旋转的样式)
android:max属性用于给进度条设置一个最大值。

如何让进度条加载完消失?(Android控件的可见属性,所有的Android控件都具有这个属性,android:visibility)

在activity_main.xml中添加标签。

<!--进度条样式为水平进度条,最大值为100-->
<ProgressBar
        android:id="@+id/progress_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        />

我们可以通过代码设置控件的可见性,使用的是setVisibility()方法,可以传入View.VISIBLE、View.INVISIBLE和View.gone

package com.example.uiwidgettest;

import androidx.appcompat.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 = (Button)findViewById(R.id.button);
        progressBar = (ProgressBar)findViewById(R.id.progress_bar);
        button.setOnClickListener(this);
    

    //通过按钮点击事件设置进度条,如果进度条可见就将其隐藏,否则将其显示出来。
    //通过xml可以看出将进度条修改成了水平进度条样式,每次点击会将进度条的值加10.
    @Override
    public void onClick(View v) 
        switch (v.getId())
            case R.id.button:
            	int progress = progressBar.getProgress();
            	progress = progress+10;
            	progreeBar.setProgress(progress);
                if(progressBar.getVisibility() == View.GONE) 
                    progressBar.setVisibility(View.VISIBLE);
                else 
                    progressBar.setVisibility(View.GONE);
                
                break;
            default:
                break;
        
    

AlertDialog(不需在主活动中添加标签。可以在当前页面弹出一个对话框,这个对话框置顶于所有页面元素之上,能够屏蔽掉其他控件的交互能力)

package com.example.uiwidgettest;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
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 = (Button)findViewById(R.id.button);
        progressBar = (ProgressBar)findViewById(R.id.progress_bar);
        button.setOnClickListener(this);
    

    @Override
    public void onClick(View v) 
        switch (v.getId())
            case R.id.button:
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                //设置对话框标题
                dialog.setTitle("This is Dialog");
                dialog.setMessage("Something important.");
                dialog.setCancelable(false);
                //设置确定按钮的点击事件
                dialog.setPositiveButton("ok", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 

                    
                );
                //设置取消按钮的点击事件
                dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
                    @Override
                    public void onClick(DialogInterface dialog, int which) 

                    
                );
                //将对话框显示出来。
                dialog.show();
            default:
                break;
        
    

ProgressDialog

ProgressDialog和AlertDialog有点类似,都会在界面上弹出一个对话框,都能够屏蔽掉其它控件的交互能力。不同的是,ProgressDialog会在会话框中显示一个进度条。

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 = (Button)findViewById(R.id.button);
        editText = (EditText)findViewById(R.id.edit_text);
        imageView = (ImageView)findViewById(R.id.image_view);
        progressBar = (ProgressBar)findViewById(R.id.progress_bar);
        button.setOnClickListener(this);
    

    @Override
    public void onClick(View v) 
        switch (v.getId())
            case R.id.button:
                ProgressDialog progressDialog = new ProgressDialog(MainActivity.this);
                //设置标题
                progressDialog.setTitle("This is ProgressDialog");
                //设置内容
                progressDialog.setMessage("Loading

以上是关于Android第一行代码-UI的主要内容,如果未能解决你的问题,请参考以下文章

Android第一行代码-UI

Android第一行代码--Service(四大组件之一)

第一行代码第二版(郭霖著)笔记之第三章(UI开发的点点滴滴)

Android第一行代码--Service(四大组件之一)

Android第一行代码--Service(四大组件之一)

Android第一行代码--Service(四大组件之一)