UI组件的基本属性
android:id 指定该控件的唯一标识,可通过findViewById("id")获取指定的界面组件
android:layout_width 指定该组件的宽度.match_parent与父容器具有相同的宽度;wrap_content能包裹内容即可;
android:layout_height 指定该组件的高度
android:layout_marginBottom:指定该组件下边的页边距
android:layout_marginLeft:指定该组件左边的页边距
android:layout_marginRight:指定该组件右边的页边距
android:layout_marginTop:指定该组件上边的页边距
组件
View组件:所有UI控件,容器控件的基类。调用Activity的setContentView()方法显示
Activity:负责与用户交互,只能通过setContentView(View)来显示指定组件
Service:后台运行
BroadcastReceiver:事件监听器
ContentProvider:数据交换
Intent:通信载体
IntentFilter:声明
简单图片浏览器实例
activity.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" tools:context=".MainActivity" android:id="@+id/root" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> </LinearLayout>
MainActivity.java
package com.example.myapplication; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.ImageView; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { //定义一个访问图片的数组 int [] images=new int[] { R.drawable.java, R.drawable.javaee, R.drawable.swift, R.drawable.ajax, }; int CurrentImg=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取LinearLayout布局容器 LinearLayout main = (LinearLayout) findViewById(R.id.root); //程序创建ImageView组件 final ImageView image = new ImageView(this); //将ImageView组件添加到LinearLayout布局容器中 main.addView(image); //初始化第一张图片 image.setImageResource(images[0]); image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //改变ImageView里显示的图片 image.setImageResource(images[++CurrentImg % images.length]); } }); } }
跟随手指运动的小球实例
CustomViewActivity
package com.example.myapplication1; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.widget.LinearLayout; public class CustomViewActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取布局文件中的LinearLayout容器 //LinearLayout root=(LinearLayout)findViewById(R.id.root); //创建DrawView组件 //final DrawView draw=new DrawView(this); //设置自定义组件的最小宽度、高度 //draw.setMinimumWidth(300); //draw.setMinimumHeight(500); //root.addView(draw); } }
DrawView
package com.example.myapplication1; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import java.util.jar.Attributes; import static android.os.Build.VERSION_CODES.P; public class DrawView extends View { public float currentX=40; public float currentY=50; //定义并创建画笔 Paint p=new Paint(); public DrawView(Context context) { super(context); } public DrawView(Context context, AttributeSet set) { super(context,set); } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); //设置画笔的颜色 p.setColor(Color.RED); //绘制一个小圆(作为小球) canvas.drawCircle(currentX,currentY,15,p); } //为该组件的触碰事件重写事件处理方法 @Override public boolean onTouchEvent(MotionEvent event) { //修改currentX,currentY两个属性 currentX=event.getX(); currentY=event.getY(); //通知当前组件重绘自己 invalidate(); //返回true表明该处理方法已经处理该事件 return true; } }
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/root"> <com.example.myapplication1.DrawView android:layout_width="match_parent" android:layout_height="match_parent"/> </LinearLayout>