Android_UI01_用户界面设计

XML 属性及 Java 对应的方法详见 API。

UI设计的相关概念

View 视图

  Android 比喻成窗户,每块玻璃就是一个 view。

  占据屏幕上的一块矩形区域,负责提供组件绘制和事件处理的方法。

  View 类是所有UI组件的基类,位于 android.view 包中;文本框组件 TextView 是 View 类的子类,位于 android.widget 包中。

  View 类及其子类的相关属性可在XML布局文件中进行设置,也可以通过成员方法在 Java 代码中动态设置

ViewGroup 容器

  相当于窗户框,用于控制玻璃的安放。

  继承 View 类,是 View 类的扩展,是用来容纳其他组件的容器。但 ViewGroup 是一个抽象类使用其子类作为容器

  ViewGroup 控制其子组件的分布时(例如,设置子组件的内边距、宽度和高度等),还经常依赖于 ViewGroup.LayoutParamsViewGroup.MarginLayoutParams 两个内部类

  ViewGroup.LayoutParams 类 extends Object

    封装了布局的位置、高和宽等信息。

    XML属性只有 2 个 

      android:layout_height

      android:layout_width  属性值可以是精确的数值,也可以是 match_parent(与上级视图一样)或 warp_content(与内部视图一样)。

  ViewGroup.MarginLayoutParams 类  extends ViewGroup.LayoutParams

    用于控制其子组件的外边距。

    XML属性 6 个

      android:layout_marginLeft    设置左外边距

      android:layout_marginTop    设置顶外边距

      android:layout_marginRight    设置右外边距

      android:layout_marginBottom    设置底外边距

      android:layout_marginStart     设置左外边距

      android:layout_marginEnd    设置右外边距

在 Android 中,所有的 UI 界面都是由 View 类、ViewGoup 类及其子类组合而成的。ViewGoup 类,可以包含 View 类,也可以再次包含 ViewGoup  类。

控制UI界面(4种方法)

1.使用 XML 布局文件控制 UI 界面

  比较方便、快捷,但有失灵活。

2.使用 Java 代码控制 UI 界面

  比较灵活,但开发过程比较烦琐。

3.使用 XML 和 Java 代码混合控制 UI 界面

  习惯上把变化小、行为比较固定的组件放在XML布局文件中,把变化较多、行为控制比较复杂的组件交给Java代码来管理。

4.开发自定义的 View

  当 Android 提供的继承 View 类的 UI 组件不足以满足程序需要时,我们可通过继承 View 类来开发自己的组件。开发自定义的 View 组件大致分为以下 3 个步骤:

    1)、创建一个继承 android.view.View 类的类,并重写构造方法

    2)、根据需要重写其他方法。Androidstudio 在代码中单击鼠标右键,选择 Generate 菜单项,选择 Override Methods 菜单项。

    3)、在 activity 中创建并实例化自动以的 View 类,并添加到布局管理器中。

  实例:通过自定义 View 组件实现跟随手指的小兔子

    activity_main.xml 文件内容:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    android:id="@+id/fl_frameLayout">


</FrameLayout> <!-- 使用 FrameLayout -->

    RabbitView.java 文件内容:重写带一个参数 context 的构造方法和 onDraw() 方法

public class RabbitView extends View {
    public float bitmapX; // 默认显示位置的X坐标
    public float bitmapY; // 默认显示位置的Y坐标
    // 重写构造方法,设置图片的默认显示位置
    public RabbitView(Context context) {
        super(context);
        bitmapX = 260;
        bitmapY = 130;
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        Bitmap bitmap = BitmapFactory.decodeResource(this.getResources(), R.mipmap.ic_launcher);
        canvas.drawBitmap(bitmap, bitmapX, bitmapY, paint);
        /*if (bitmap.isRecycled()) { // 如果此位图已被回收,则返回true。
            bitmap.recycle(); // 释放与此位图关联的本机对象,并清除对像素数据的引用。
        }*/
    }
}

    MainActivity.java 文件内容:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FrameLayout frameLayout = findViewById(R.id.fl_frameLayout); // 获取帧布局管理器
        final RabbitView rabbit = new RabbitView(this); // 创建并实例化 RabbitView 类
        // 为 rabbit 添加触摸事件监听
        rabbit.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                // 设置 rabbit 的显示位置
                rabbit.bitmapX = event.getX();
                rabbit.bitmapY = event.getY();
                rabbit.invalidate(); // 重绘 rabbit 组件
                return true;
            }
        });
        frameLayout.addView(rabbit); // 将 rabbit 添加到布局管理器中
    }
}

布局管理器

Android 提供了五种布局管理器:

  相对布局管理器(RelativeLayout):通过相对定位的方式来控制组件的摆放位置。

  线性布局管理器(LinearLayout):是指在垂直或水平方向依次摆放组件。

  帧布局管理器(FrameLayout):没有任何定位方式,所有的组件都会摆放在容器的左上角,逐个覆盖。

  表格布局管理器(TableLayout):使用表格的方式按行、列来摆放组件。

  绝对布局管理器(AbsoluteLayout):通过绝对定位(x、y坐标)的方式来控制组件的摆放位置。Android 2.0 中被标记为已过期,可使用帧布局相对布局代替

  网格布局管理器(GridLayout):实现跨行或跨列摆放组件。Android 4.0 以后提供。

Android 提供的布局管理器均直接或间接继承自 ViewGroup,因此,所有布局管理器都可以作为容纳其他组件的容器,也可以相互嵌套。

  

1.相对布局管理器

 

posted on 2017-11-05 10:13  JonSnows  阅读(159)  评论(0)    收藏  举报

导航