目录
我们在布局管理器中已经知道了ImageView、TextView、Button等组件,在这里我们将会详细的介绍Android中基本组件。
文本框组件的作用是在页面中添加一些文本信息
文本框的基本代码
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/login"
- android:textSize="19sp"
- android:textColor="#FF0000"
- android:singleLine="true"
- android:maxWidth="180dp"
- />
编辑框组件的作用是提供给用户输入一些信息
- <EditText
- android:id="@+id/it"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:hint="密码"
- android:inputType="textPassword"
- android:drawableLeft=""
- android:drawableRight=""
- android:drawableBottom=""
- android:drawabletop=""
- android:drawablePadding=""
- -- 向下拖动-->
- android:lines=""
- />
我们可以在java类中通过
- public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- EditText editText = findViewById(R.id.it);
- Editable text = editText.getText();
- }
- }
按钮的更多作用时触发事件监听器
- public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- Button button = findViewById(R.id.b1);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Toast.makeText(MainActivity.this,"单击了",Toast.LENGTH_SHORT).show();
- }
- });
- }
- }
- public void onClick(View view){
- Toast.makeText(MainActivity.this,"单击了",Toast.LENGTH_SHORT).show();
- }
使用这种方法需要在布局文件中指定声明才能使用
- <Button
- android:id="@+id/b2"
- android:onClick="myClick"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="按钮2"
- />
- <ImageButton
- android:id="@+id/b2"
- android:src="@drawable/p1"
- android:onClick="myClick"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="#0000"
- android:text="按钮2"
- />
单选按钮的xml文件设置
- <RadioGroup
- android:id="@+id/button1"
- android:layout_height="166dp"
- android:layout_width="79dp">
- <RadioButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="男"
- />
- <RadioButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="女"
- />
- <RadioButton
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="其他"
- />
- RadioGroup>
- <Button
- android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="提交"
- />
java代码
- package com.example;
-
- import android.view.View;
- import android.widget.Button;
- import android.widget.RadioButton;
- import android.widget.RadioGroup;
- import android.widget.Toast;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
-
- public class MainActivity extends AppCompatActivity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- RadioGroup radioGroup = (RadioGroup) findViewById(R.id.button1);
- radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(RadioGroup group, int checkedId) {
- RadioButton radioButton = findViewById(checkedId);
- CharSequence text = radioButton.getText();
- Toast.makeText(MainActivity.this, "性别" + text, Toast.LENGTH_SHORT).show();
- }
- });
- Button button = findViewById(R.id.button2);
- button.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- for (int i = 0; i < radioGroup.getChildCount(); i++) {
- RadioButton r = (RadioButton) radioGroup.getChildAt(i);
- if(r.isChecked()){
- Toast.makeText(MainActivity.this, "性别" + r.getText(), Toast.LENGTH_SHORT).show();
- }
- }
- }
- });
-
- }
-
- }
复选框按钮的xml文件
- <CheckBox
- android:id="@+id/cb1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="跳水"
- />
- <CheckBox
- android:id="@+id/cb2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="游泳"
- />
- <CheckBox
- android:id="@+id/cb3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="羽毛球"
- />
java程序代码
- package com.example;
-
- import android.view.View;
- import android.widget.*;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
-
- public class MainActivity extends AppCompatActivity {
- CheckBox checkBox;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- checkBox = (CheckBox) checkBox.findViewById(R.id.cb1);
- checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-
- }
- });
-
-
- }
- }
xml文件代码
- "1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <DatePicker
- android:id="@+id/date"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
-
- LinearLayout>
java程序代码
- package com.example;
-
-
- import android.app.Activity;
- import android.widget.DatePicker;
- import android.widget.Toast;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
-
- import java.util.Calendar;
-
- public class MainActivity extends Activity {
- int year, mouth, data;
- DatePicker datePicker;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- datePicker = (DatePicker) findViewById(R.id.date);
- Calendar calendar = Calendar.getInstance();
- year = calendar.get(Calendar.YEAR);
- mouth = calendar.get(Calendar.MONTH);
- data = calendar.get(Calendar.DAY_OF_MONTH);
- datePicker.init(year, mouth, data, new DatePicker.OnDateChangedListener() {
- @Override
- public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
- MainActivity.this.year = year;
- MainActivity.this.mouth = monthOfYear;
- MainActivity.this.data = dayOfMonth;
- show(year,mouth,data);
- }
-
- });
- }
- public void show(int year,int mouth,int date){
- String s = "年:" + year + "月:" + (mouth+1) + "日:" + date;
- Toast.makeText(MainActivity.this,s, Toast.LENGTH_LONG).show();
- }
- }
xml文件代码
- "1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <TimePicker
- android:id="@+id/date"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
-
- LinearLayout>
java程序代码
- package com.example;
-
-
- import android.app.Activity;
- import android.widget.DatePicker;
- import android.widget.TimePicker;
- import android.widget.Toast;
- import androidx.appcompat.app.AppCompatActivity;
- import android.os.Bundle;
-
- import java.util.Calendar;
-
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- TimePicker timePicker = findViewById(R.id.date);
- //24小时设置
- timePicker.setIs24HourView(true);
- timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
- @Override
- public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
- String s = "时:" + hourOfDay + "分" + minute;
- Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();
- }
- });
-
- }
- }

xml文件代码
- "1.0" encoding="utf-8"?>
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <Chronometer
- android:id="@+id/date"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="#E91E63"
- android:layout_marginTop="10dp"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
- android:layout_alignParentRight="true"
- android:format="已用时间:%s"
- />
-
- RelativeLayout>
java程序代码
- package com.example;
-
-
- import android.app.Activity;
- import android.os.SystemClock;
- import android.view.WindowManager;
- import android.widget.Chronometer;
-
- import android.os.Bundle;
-
- import java.util.Calendar;
-
- public class MainActivity extends Activity {
- Chronometer chronometer;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- chronometer=findViewById(R.id.date);
- //设置系统时间
- chronometer.setBase(SystemClock.elapsedRealtime());
- //设置计时器的格式
- chronometer.setFormat("%s");
- //开启计时器
- chronometer.start();
- //设置监听器
- chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
- @Override
- public void onChronometerTick(Chronometer chronometer) {
- if(SystemClock.elapsedRealtime() - chronometer.getBase() >= 60000){
- chronometer.stop();
- }
- }
- });
-
-
- }
- }

水平进度条(实时加载)
圆形进度条(正在加载)
进度条与线程搭配才能实现实施更新,在anroid中handler的作用是给主线程发送消息,因为主线程不支持android的activity在主线程中更新UI。
xml文件
- "1.0" encoding="utf-8"?>
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="horizontal"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <ProgressBar
-
- style="?android:attr/progressBarStyleHorizontal"
- android:max="100"
- android:progress="50"
- android:id="@+id/date"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_marginBottom="30sp"
- />
-
- RelativeLayout>
java程序代码
- package com.example;
-
-
- import android.app.Activity;
- import android.os.Handler;
- import android.os.Message;
- import android.os.SystemClock;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.Chronometer;
-
- import android.os.Bundle;
- import android.widget.ProgressBar;
- import android.widget.Toast;
- import androidx.annotation.NonNull;
-
- import java.util.Calendar;
- import java.util.Random;
-
- public class MainActivity extends Activity {
- private ProgressBar progressBar;
- private int mprogress = 0;
- private Handler mhandler;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- ProgressBar progressBar = findViewById(R.id.date);
- mhandler = new Handler(){
- @Override
- public void handleMessage(@NonNull Message msg) {
- if(msg.what == 0x111){
- progressBar.setProgress(mprogress);
- }else{
- Toast.makeText(MainActivity.this, "耗时操作完成", Toast.LENGTH_SHORT).show();
- progressBar.setVisibility(View.GONE);
- }
- }
- };
- new Thread(new Runnable() {
- @Override
- public void run() {
- while (true){
- mprogress=dowork();
- //更新进度条的进度
- Message m = new Message();
- if(mprogress < 100){
- m.what=0x111;
- mhandler.sendMessage(m);
- }else{
- m.what=0x110;
- mhandler.sendMessage(m);
- break;
- }
- }
- }
-
- private int dowork() {
- mprogress+= Math.random()*10;
- try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- return mprogress;
- }
- }).start();
-
- }
- }
实现一个图片的透明度
xml文件代码
- "1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <ImageView
- android:id="@+id/img"
- android:layout_width="match_parent"
- android:layout_height="500dp"
- android:src="@mipmap/ic_launcher"
- />
- <SeekBar
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/date"
- android:max="10"
- android:layout_alignParentBottom="true"
- android:thumb="@mipmap/ic_launcher"
- android:progress="5"
-
- />
-
- LinearLayout>
java程序代码
- package com.example;
-
-
- import android.app.Activity;
- import android.os.Handler;
- import android.os.Message;
- import android.os.SystemClock;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.*;
-
- import android.os.Bundle;
- import androidx.annotation.NonNull;
-
- import java.util.Calendar;
- import java.util.Random;
-
- public class MainActivity extends Activity {
- private ImageView imageView;
- private SeekBar seekBar;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- imageView = findViewById(R.id.img);
- seekBar = findViewById(R.id.date);
- seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- imageView.setImageAlpha(progress);
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
-
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
-
- }
- });
- }
- }
xml文件
- "1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <RatingBar
- android:id="@+id/ratebar"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:numStars="5"
- android:rating="2"
- android:stepSize="0.5"
- android:isIndicator="false"
- />
-
- LinearLayout>
java程序代码
- package com.example;
-
-
- import android.app.Activity;
- import android.os.Handler;
- import android.os.Message;
- import android.os.SystemClock;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.*;
-
- import android.os.Bundle;
- import androidx.annotation.NonNull;
-
- import java.util.Calendar;
- import java.util.Random;
-
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
- RatingBar ratingBar = findViewById(R.id.ratebar);
- //刚开始几颗星星
- String s = String.valueOf(ratingBar.getRating());
- Toast.makeText(this, "Rating:" + s, Toast.LENGTH_SHORT).show();
- String s1 = String.valueOf(ratingBar.getStepSize());
- Toast.makeText(this, "StepSize" + s1, Toast.LENGTH_SHORT).show();
- String s2 = String.valueOf(ratingBar.getProgress());
- Toast.makeText(this, "getProgress" + s2, Toast.LENGTH_SHORT).show();
- }
- }
xml文件
- <ImageView
- android:layout_width="500dp"
- android:layout_height="200dp"
- android:src="@drawable/ic_launcher_background"
- android:background="#FFFFFF"
- android:maxWidth="300dp"
- android:maxHeight="300dp"
- android:adjustViewBounds="true"
- -- 布局-->
- android:scaleType="fitXY"
- android:tint="#FFFF00"
- android:layout_margin="30dp"
-
-
- />
java程序代码类似于前面
连接后端数据和前端数据的接口

ArrayAdapter:数组适配器将数组的多个值包装成列表项,显示一行文字
SmipleAdapter:简单适配器将list的值包装成列表项
SmipleCusorAdapter:将数据库的内容以列表的形式展示出来
BaseAdapter:对列表项进行定制
- "1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <GridView
- android:id="@+id/grid"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
-
- LinearLayout>
- <Spinner
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:entries="@array/str"
- />
values资源文件
- "1.0" encoding="utf-8"?>
- <resources>
- <string-array name="str">
- <item>全部item>
- <item>电影item>
- <item>图书item>
- <item>游戏item>
- string-array>
- resources>
- package com.example;
-
-
- import android.app.Activity;
- import android.os.Handler;
- import android.os.Message;
- import android.os.SystemClock;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.*;
-
- import android.os.Bundle;
- import androidx.annotation.NonNull;
-
- import java.util.*;
-
- public class MainActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- String[] s = {"全部","美术","体育","音乐"};
- ArrayAdapter
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item,s); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- Spinner spinner = findViewById(R.id.spi);
- spinner.setAdapter(arrayAdapter);
- }
- }
xml文件
- <ListView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:entries="@array/str"
- />
values资源文件
- "1.0" encoding="utf-8"?>
- <resources>
- <string-array name="str">
- <item>全部item>
- <item>电影item>
- <item>图书item>
- <item>游戏item>
- string-array>
- resources>
- package com.example;
-
-
- import android.app.Activity;
- import android.os.Handler;
- import android.os.Message;
- import android.os.SystemClock;
- import android.view.LayoutInflater;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.WindowManager;
- import android.widget.*;
-
- import android.os.Bundle;
- import androidx.annotation.NonNull;
-
- import java.util.*;
-
- public class MainActivity extends Activity {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- String[] s = {"全部","美术","体育","音乐"};
- ArrayAdapter
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,s); - arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- ListView listView = findViewById(R.id.img1);
- listView.setAdapter(arrayAdapter);
- }
- }
xml文件垂直滚动
- <ScrollView
- android:id="@+id/img1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="20dp"
- android:text="@string/movie"
- />
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="20dp"
- android:text="@string/music"
- />
- />
xml文件水平滚动
- "1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:orientation="vertical"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
- <HorizontalScrollView
- android:id="@+id/img1"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="20dp"
- android:text="@string/movie"
- />
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="20dp"
- android:text="@string/music"
- />
- />
-
- LinearLayout>