Android 学习(一)

安卓基本学习

架构体系

安卓的系统体系架构采用的是分层的架构

Kemel层: Android平台的基础。有线程管理和内存管理等功能。
HAL层: HAL的目的是为了把framework与Kernel隔开,让Android不至于过度依赖kernel,对kernel的简单封装,向上提供接口,屏蔽底层的实现细节。
原生C/C++库及Android Runtime: 库文件。ART是虚拟机在5.0以后取代Dalvik虚拟机。
Framework层: Android的应用程序框架,为应用程序曾的开发者提供APIs,包括java和C++。
应用层: Android的应用程序,主要是用户界面(UI)方面的。
在这里插入图片描述

安卓四大组件

在这里插入图片描述
四大组件分别有:Activity、Service、BroadcastReceiver、ContentProvider。
Activity:界面,是开发者遇到的最频繁,也是Android当中最基本的组件之一。
Service:后台服务,可以和其他组件进行交互。Service是没有界面的。
BroadcastReceiver:接受广播,是跨进程通信的一种简单方式。
ContentProvider:存储和读取数据,相当于数据库。

目录结构

libs: 包含应用可能用到的so、jar、arr等库文件。
java: 包含项目中所有的.java源文件。
res/drawable: 这个目录下包括所有的drawable对象。
res/layout: 这个目录存放用于定义用户界面的文件。
res/values: 这个目录存放各种各样的包含一系列资源的XML文件,比如字符串和颜色的定义。
AndroidManifest.xml: 这个是应用程序的清单文件,描述了应用程序的基础特性,定义他的各种组件。
build.gradle: 编译配置相关的文件。

基础知识

UI

用户界面,是交互的媒介,实现信息的内部形式与人类可以接受形式之间的转换。
Android UI都是由ViewGroup和View 组成的。

布局(layout)

布局可定义应用中的界面结构(如Activity的界面结构)。布局中的所有元素均可以使用view和ViewGroup对象的层次结构进行构建。View通常绘制用户可查看并进行交互的内容。然而,ViewGroup是不可见容器,用于定义View和其他ViewGroup对象的布局结构。

View和ViewGroup

在Android App中,所有的UI都是由View 和ViewGroup的对象构成的。
View是绘制在屏幕上的,用户能与之交互的一个对象。
ViewGroup 则是一个用于存放其他View(和ViewGroup)对象的布局容器。
**Android为我们提供了一个View和ViewGroup子类的集合,集合中提供了一些常用的输入控件(比如Button和TextView)和各种各样的布局模式(比如LinearLayout或RelativeLayout)

在这里插入图片描述

一个App的用户界面上的每一个组件都是使用View和ViewGroup对象的层次结构来构成的。每个ViewGroup都是要给看不见的用户组织子View的容器,而它的子View可能是输入控件或者在UI上绘制了某块区域的小部件。有了层次树,你就可以根据自己的需要,设计简单或者复杂的布局了(布局越简单性能越好)

声明布局

常用的7种界面布局

  • 线性布局(LinearLayout):根据不同的排列,每行(列)仅包含一个界面元素
  • 框架布局(FrameLayout):如果有多个子元素,后放置的子元素将遮挡先放置的子元素。
  • 表格布局(TableLayout):网格的边界对用户不可见,网格布局支持嵌套(可以在其中添加其他界面布局)。
  • 相对布局(RelativeLayout):能够最大程度保证在各种屏幕尺寸的手机上正确显示界面布局。
  • 绝对布局(AbsoluteLayout):必须要指定坐标。不推荐,不能适应变化。
  • 网格布局(GridLayout):将界面划分成多个块,这些块是根据界面元素动态划分的。
  • 约束布局(ConstraintLayout):约束,就是要定义控件在某方面与其他控件的对其或者距离关系。

首先需要在layout的XML文件中声明界面的元素

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello"

        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


声明后就可以在界面中看到我们所添加的控件,但是我们的交互操作还没有写,需要在java文件夹下所创建的.java文件中写相关的代码去定义控件并在与之相连,在写相应的操作
如下


public class MainActivity extends AppCompatActivity {
    EditText tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = findViewById(R.id.Bt_login);
        tv= findViewById(R.id.Edit_n);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intt = new Intent(MainActivity.this,MainActivity2.class);
                startActivityForResult(intt,0);
                //startActivityForResult(intt,0);

            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 0){
            tv.setText(data.getStringExtra("name"));
        }

    }
}
  • AndroidManifest.xml 文件中,根元素是 manifast ,包含 xmlns:androidpackage、android : versionCode 和 android: versionName 4个属性。
  • manifest元素仅能包含一个application元素,application元素中能够声明(生命了每一个应用程序的组件及其属性)Android程序中最重要的4个组成部分,包括Activity、Service、BroadcastReceiver和ContertProvider,所定义的属性将影响所有组成部分。
  • activity元素 :是堆Activity子类的声明,不在AndroidManifest.xml文件中声明的Activity将不能在用户界面中显示。
  • intent-filter中声明两个子元素action和category。

编写XML

利用Android的XML标签,快速设计UI布局。
每个布局文件都必须只包含一个根元素。
定义根元素后,可以以子元素的形式添加其他布局对象或控件,从而逐步定义布局的试图层次结构。
在XML中声明布局后,以.xml扩展名将文件保持在Android项目的res/layout/目录中。

加载XML资源

当编译应用时,系统会将XML布局文件编译成View资源。在Activity.onCreate()回调内,通过调用setContentView(),并以R.layout.layout_file_name 形式向应用代码传递布局资源的引用,加载应用代码中的布局资源。

常用的控件

TextView和EditText

EditText继承于TextView

Button 和ImageButton

这两个控件无继承关系

ListView

List → \rightarrow Adapter → \rightarrow adapterView → \rightarrow (getView()) Adapter

ListView 是一个垂直显示的列表控件,如果内容过多就会出血垂直滚动条,ListView能够通过适配器将数据和自身绑定,显示内容;还支持点击事件;

UI控件的属性

每个View对象和ViewGroup对象均支持自己的各种XML属性,某些属性是View对象的特有属性(例如,TestView支持textSize属性),但可拓展此类的任一View对象也会继承这些属性。某些属性是所有View对象的共有属性,因为都继承自View根类(例如id属性)

属性中最重要的可能就是id属性,因为只有在有了这个属性后,我们才能在.java文件中获取这个控件才能进行接下来的操作。
ID:任何View对象军可拥有与之相关联的整型ID,用于在结构树中对View对象进行唯一标识。编译应用后,系统会以整型形式引用此ID,但在布局XML文件中,系统通常会以字符串的形式在id属性中指定该ID。这是所有View对象共有的XML属性。

android:id="@+id/tv"

值得注意的是,ID字符串名称,在同一布局中必须是唯一的,不能重名,不同布局中可以同名,ID的作用和上面所说的一样,就是用于在.java文件中定义并且使用,添加控件的功能。

常用的7种界面布局

  • 线性布局(LinearLayout):根据不同的排列,每行(列)仅包含一个界面元素
    • 重要的属性是:android:orientation,这个属性有两个值,分别为“horizontal” 水平布局,“vertical”垂直布局。
    • 布局权重: android:layout_weight,占比权重
    • 布局位置:使用getLeft()方法和getTop()方法来获取视图的坐标位置,值得注意的是这两个方法获取的值是相对应父布局的值,而并非绝对值。
    • 布局尺寸:可以通过getWidth()和getHeight()来获取视图的尺寸,这些方法返回的值也是相对父视图的值。
  • 框架布局(FrameLayout):如果有多个子元素,后放置的子元素将遮挡先放置的子元素。
  • 表格布局(TableLayout):网格的边界对用户不可见,网格布局支持嵌套(可以在其中添加其他界面布局)。
  • 相对布局(RelativeLayout):能够最大程度保证在各种屏幕尺寸的手机上正确显示界面布局。
    • 重要的属性就是一个系列的:
android:layout_below="@id/ "在指定View的下方 
android:layout_above="@id/ "在指定的View的上方
android:layout_toLeftOf="@id/ "在指定的View的左边
android:layout_toRigthOf="@id/ " 在指定的View的右边
android:layout_alignTop="@id/ "与指定的View的上边界一致
android:layout_alignBottom="@id/ "与指定的View的下边界一致
android:layout_alignLeft="@id/ "与指定的View的左边界一致
android:layout_alignRight="@id/ " 与指定的View的右边界一致

android:layout_alignParentLeft="ture" 在父元素内左边
android:layout_alignParentRight="ture" 在父元素内右边
android:layout_alignParentTop="ture" 在父元素内顶部
android:layout_alignParentBottom="ture" 在父元素内底部

android:layout_centerInParent="true" 居中布局 
android:layout_centerVertical="true" 垂直居中布局
android:layout_centerHorizontal="true" 水平居中布局

android:layout_marginBottom="" 离某元素底边缘的距离
android:layout_marginLeft="" 离某元素左边缘的距离
android:layout_marginRight="" 离某元素右边缘的距离
android:layout_marginTop="" 离某元素上边缘的距离
android:layout_paddingBottom="" 往内部元素底边缘填充距离
android:layout_paddingLeft="" 往内部元素左边缘填充距离
android:layout_paddingRight="" 往内部元素右边缘填充距离
android:layout_paddingTop="" 往内部元素上边缘填充距离
  • 绝对布局(AbsoluteLayout):必须要指定坐标。不推荐,不能适应变化。
  • 网格布局(GridLayout):将界面划分成多个块,这些块是根据界面元素动态划分的。
  • 约束布局(ConstraintLayout):约束,就是要定义控件在某方面与其他控件的对其或者距离关系。

常用组件

TextView

在这里插入图片描述

带图片的TextView

在这里插入图片描述
在这里插入图片描述

EditText

在这里插入图片描述
在这里插入图片描述

一般知识

建议在布局的大小上,我们在写的时候注意尽量使用dp作为单位而不使用px因为px 是像素,对于不同的设备的显示上布局会发生改变,使用dp则可以解决这个问题。

边距上还会区分出外边距和内边距,和web类似
外边距有:

  • layout_margin: 外边距(输入一个值时,就是对全部方位的编辑,输入两个值就是上下一个值,左右一个值)
  • layout_marginTop: 上外边距
  • layout_marginBottom: 下外边距
  • layout_marginLeft: 左外边距
  • layout_marginRight: 右外边距

内边距有:

  • padding:内边距
  • paddingTop:外内边距
  • paddingBottom:下内边距
  • paddingLeft:左内边距
  • paddingRight:右内边距
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值