APP应用开发(Android)

一、导论

    《App程序开发》课程,主要介绍Android系统原理及应用。通过本课程的学习,我们可以掌握Android系统开发理论知识、Android系统架构,以及编程的技术、方法和工具,并能从事Android系统设计、开发与测试工作。该门课程基于Android Studio平台开发,主要介绍Android应用开发所涉及的各方面知识,包括:Android布局管理、常用基本控件、高级控件、Activity、Service、Content Provider、Broadcast Receiver四大组件、Android数据存储与处理、网络编程等方面的核心内容。


二、Android布局管理

        1、线性布局

                (1)概念:用水平或垂直方式来显示界面中的控件;

                (2)特点:以水平或垂直方向排列,子控件之间不能重叠,但可以设置权重;

                (3)适用场景:适用于简单的界面布局,特别是需要按照一定的顺序排列时;

                (4)案例示例: 用线性布局完成一个简易的个人注册页面

        2、约束布局

                (1)概念:解决布局嵌套过多的问题,以灵活的方式定位和调整小部件;

                (2)特点:以灵活的方式来定位和调整;

                (3)适用场景:适用于需要灵活控制位置和大小的复杂界面布局时;

                (4)案例示例:图中左侧为代码,右侧为运行结果

        3、表格布局

                (1)概念:继承了线性布局,用行、列的方式来管理容器内的控件。 它不需要制定行列数量,布局内每添加一行TableRow代码即表示添加一行表格,然后再在TableRow添加子控件,容器的列数由包含列数最多的行决定;

                (2)特点:用表格形式排列;

                (3)适用场景:适用于需要用表格的形式展示页面时;

                (4)案例示例:

        4、帧布局

                (1)概念:在六大布局中最为简单的一个布局,这个布局直接在屏幕上开辟出一块空白的区域,当我们往里面添加控件的时候,会默认把他们放到这块区域的左上角;

                (2)特点:开辟空白区域,帧里的控件层叠加;

                (3)适用场景:适用于需要重叠显示页面时;

                (4)案例示例:图一为代码,图二为结果显示

图1

图2

        5、相对布局

                (1)概念:让内部的控件根据其他控件或者Parent的位置来确定自己的摆放位置和尺寸;

                (2)特点:通过相对定位排列

                (3)适用场景:适用于需要根据其他视图位置进行布局的页面时;

                (4)代码示例:

<TableLayoutxmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:stretchColumns="*">

<EditText/>

<TableRow>

<Buttonandroid:text="7"/>

<Buttonandroid:text="8"/>

<Buttonandroid:text="9"/>

<Buttonandroid:text="/"/>

</TableRow>

<TableRow>

<Buttonandroid:text="4"/>

<Buttonandroid:text="5"/>

<Buttonandroid:text="6"/>

<Buttonandroid:text="-"/>

</TableRow>

<TableRow>

<Buttonandroid:text="1"/>

<Buttonandroid:text="2"/>

<Buttonandroid:text="3"/>

<Buttonandroid:text="+"/>

</TableRow>

<TableRow>

<Buttonandroid:text="."/>

<Buttonandroid:text="0"/>

<Buttonandroid:text="="/>

<Buttonandroid:text="*"/>

</TableRow>

</TableLayout>


三、Android常用控件

        1、TextView

                (1)它是用于显示文字(字符串)的控件,可在代码中通过设置属性改变文字的大小、颜色、样式等功能。

                (2)常用属性有很多,有设置宽度(android:layout_width)、设置高度(android:layout_height)、设置文本内容(android:text)、设置背景(android:background)等等

                (3)代码示例:

<TextView android:layout_width="match_parent"

 android:layout_height="wrap_content"  

android:text="Hello World! "  

android:textColor="#000000"  

android:textSize="25sp"  

android:gravity="center" />

        2、EditText

                (1)继承自TextView,可以进行编辑操作,将用户信息传递给Android程序。还可以为EditText控件设置监听器,用来测试用户输入的内容是否合法。

                (2)常用属性有内容为空时显示的提示文本信息(android:hint)、设置输入的字符类型,若多种类型,需加“|”分隔(android:inputType)等等

                (3)监听方法:

                        第一种:setOnEditorActionListener

  public void setOnEditorActionListener (TextView.OnEditorActionListener l)设置在对文本框执行操作时调用的特殊监听器,需实现接口:OnEditorActionListener

                        第二种: addTextChangedListener

  public void addTextChangedListener (TextWatcher watcher)添加一个TextWatcher到其方法的列表中,无论何时在TextView的文本发生变化时被调用,需实现接口:TextWatcher

                (4)代码示例

<EditText android:layout_width="match_parent“

android:layout_height="wrap_content“

android:hint="请输入姓名"  

android:maxLines="2"  

android:textColor="#000000"

 android:textSize="20sp"  

android:textStyle="italic" />

        3、Button

                (1)它是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。

                (2)四种button按钮点击事件实现方式

        第一种:使用onClick属性的方式(这里需要注意的是Activity中实现的方法名称要与onClick属性设置的名称一致)

        第二种: 使用自定义类继承View.OnClickListener方式

第三种:使用匿名内部类方式(图一)或使用内部类方式(图二)

图一

图二

第四种:使用自身类方式

        (3)案例示例

       如何在Activity中创建一个Button,并为其设置一个点击事件监听器

首先,我们需要在布局文件(XML)中定义Button控件。假设我们有一个名为activity_main.xml的布局文件:

<RelativeLayout 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">

<Button android:id="@+id/my_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="点击我" />

</RelativeLayout>

接下来,在对应的Activity中(假设是MainActivity.java),我们需要找到这个Button控件,并为其设置一个点击事件监听器:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 查找Button控件

Button myButton = findViewById(R.id.my_button);

// 设置点击事件监听器

myButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 当按钮被点击时执行的代码

// 例如,我们可以在这里弹出一个Toast消息

String message = "按钮被点击了!";

Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();

}

         }

             ); }

                    }

        4、RadioButton

RadioButton为单选按钮,它需要与RadioGroup配合使用,提供两个或多个互斥的选项集。 RadioGroup是单选组合框,可容纳多个RadioButton,并把它们组合在一起,实现单选状态。

        5、CheckBox

表示复选框,它是Button的子类,用于实现多选功能,通过android:checked属性指定CheckBox控件是否选中的状态。

isChecked()方法是用于复选框的,区分CheckBox是否被选中,isChecked有两种返回值: 当CheckBox对象的复选框被选中时,isChecked()返回true,即1; 当CheckBox对象的复选框没有被选中时,isChecked()返回false,即0.

        6、ImageView

是视图控件,它继承自View,其功能是在屏幕中显示图像。ImageView类可以从各种来源加载图像(如资源库或网络),并提供缩放、裁剪、着色(渲染)等功能。

四、Activity和Intent

        1、Activity

        (1)安卓界面由Activity创建和管理,可直接在Activity类里面设计UI界面和控制逻辑。为了实现解耦,现在的安卓开发,把逻辑控制留在Activity类里面,UI部分放到res/layout目录下,然后在Activity中使用setContentView方法进行关联。一个完整的Activity创建和使用:自定义类继承Activity类,自定义布局文件,在Java代码中通过setContentView方法关联UI布局,在清单文件AndroidManifest.xml声明。

        (2)生命周期:当Activity启动之后便会进入下一状态(启动状态)--->Activity处于屏幕最前端,可与用户进行交互(运行状态)--->Activity仍然可见,但无法获取焦点,用户对它操作没有响应(暂停状态)--->Activity完全不可见,系统内存不足时会销毁该Activity(停止状态)--->Activity将被清理出内存(销毁状态)

        (3)启动模式总结:

standard:标准模式,也是默认的模式(无需手动配置),只要启动 Activity 就会创建新的实例。应用场景:一般的Activity,都使用这个模式; singleTop:要启动的 Activity 如果刚好在栈顶已存在,则不创建,并且执行它的 onNewIntent 方法。应用场景:Activity被启动起来的渠道多,适合多应用开启调用的Activity,通过这种设置可以避免已经创建过的Activity被重复创建,可以提供共享的,例如:相机、通知栏点击后需要启动一个活动页(该页面也许已经存在栈内); singleTask:要启动的 Activity 在栈内存在,则把它上面的其他 Activity 全部弹出,露出要启动的 Activity,并且执行它的 onNewIntent 方法。应用场景:APP首页/主页; singleInstance:设置了该属性的 Activity 在设备上只会存在一个示例,且单独在一个栈里面。应用场景:APP首页/主页/呼叫来电界面;

        2、Intent

Intent不仅可用于应用程序之间,也可用于应用程序内部的 Activity / Service/Broadcast Receiver之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

五、UI界面交互

        1、按钮点击事件

首先,在你的布局文件(XML)中定义一个按钮,比如activity_main.xml

<Button

android:id="@+id/my_button"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="点击我"

android:layout_centerInParent="true"

android:layout_gravity="center" />

然后,在你的Activity中(比如MainActivity.java),你需要找到这个按钮,并设置一个点击监听器:

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// 查找按钮

Button myButton = findViewById(R.id.my_button);

// 设置点击监听器

myButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// 当按钮被点击时执行的代码

Toast.makeText(MainActivity.this, "按钮被点击了!", Toast.LENGTH_SHORT).show();

               }

           }

   ); }

}

2、列表项点击事件

首先,你需要在布局文件中定义ListView控件,比如activity_main.xml

<ListView

android:id="@+id/my_listview"

android:layout_width="match_parent"

android:layout_height="match_parent" />

然后,在你的Activity中(比如MainActivity.java),你需要找到这个ListView控件,为其设置适配器,并为列表项设置点击事件监听器:

public class MainActivity extends AppCompatActivity {  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        // 初始化数据  
        List<String> data = Arrays.asList("项目1", "项目2", "项目3", "项目4", "项目5");  
  
        // 查找ListView  
        ListView listView = findViewById(R.id.my_listview);  
  
        // 创建ArrayAdapter  
        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, data);  
  
        // 为ListView设置适配器  
        listView.setAdapter(adapter);  
  
        // 设置ListView的项点击监听器  
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {  
                // 获取被点击项的数据  
                String item = (String) parent.getItemAtPosition(position);  
                // 显示Toast消息  
                Toast.makeText(MainActivity.this, "你点击了:" + item, Toast.LENGTH_SHORT).show();  
            }  
        });  
    }  
}

3、滑动操作

在Android开发中,实现一个图片浏览页面并允许用户通过滑动来切换图片,通常会使用ViewPager(对于较简单的需求)或RecyclerView(对于更复杂和更灵活的需求)。这两种视图组件都提供了滑动监听器,以便你在用户滑动时执行相应的操作,如切换图片:

recyclerView.addOnItemTouchListener(newRecyclerView.OnItemTouchListener(){

GestureDetectorgestureDetector=newGestureDetector(context,newGestureDetector.SimpleOnGestureListener(){

@Override

publicbooleanonFling(MotionEvente1,MotionEvente2,floatvelocityX,floatvelocityY){

//判断滑动方向

if(e1.getX()-e2.getX()>SWIPE_THRESHOLD&&Math.abs(velocityX)>Math.abs(velocityY)){

//向左滑动,切换到上一张图片

previousImage();

}elseif(e2.getX()-e1.getX()>SWIPE_THRESHOLD&&Math.abs(velocityX)>Math.abs(velocityY)){

//向右滑动,切换到下一张图片

nextImage();

}

returntrue;//消耗这个事件

}

})@Override

publicbooleanonInterceptTouchEvent(RecyclerViewrv,MotionEvente){

gestureDetector.onTouchEvent(e);

returnfalse;//不拦截触摸事件,交给RecyclerView处理

}

@Override

publicvoidonTouchEvent(RecyclerViewrv,MotionEvente){

//不需要处理触摸事件,已经在onInterceptTouchEvent中处理

}

@Override

publicvoidonRequestDisallowInterceptTouchEvent(booleandisallowIntercept){

//不需要处理

}

});

//SWIPE_THRESHOLD是你定义的阈值,用于判断滑动是否足够远以触发动作

privatestaticfinalintSWIPE_THRESHOLD=100;

实现previousImage()和nextImage()方法来切换图片

<!--activity_main.xml-->

<RelativeLayoutxmlns: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">

<!--RecyclerView用于展示图片列表-->

<androidx.recyclerview.widget.RecyclerView

android:id="@+id/recyclerView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

android:scrollbars="none"

app:layout_constraintBottom_toBottomOf="parent"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent"/>

</RelativeLayout>

4、菜单项

        (1)选项菜单

选项菜单是一种常见的用户界面组件,用于提供快捷操作,提高应用程序的易用性和用户满意度。选项菜单通常用于一些常见的场景,例如复制、粘贴、删除、设置、搜索或分享等操作。需要注意的是,在开发应用程序时需要考虑版本兼容性。

在 res/menu 目录下创建 xml ,定义菜单项; 在 Java 代码重写 onCreateOptionsMenu ,关联 xml 和代码; 在 Java 代码重写 onOptionsItemSelected,处理菜单点击逻辑。

        给选项菜单添加子菜单,在菜单 xml 添加子标签即可         

        (2)上下文菜单

它是一种在用户长按某个视图时显示的菜单,通常用于提供与所选内容相关的操作选项。它可以为应用程序提供快捷操作,并允许用户在特定上下文中执行操作。

在 res/menu 目录下创建 xml ,定义菜单项; 在 Java 代码重写 onCreateContextMenu,关联 xml 和代码; 在 Java 代码重写 onContextItemSelected,处理菜单点击逻辑。

     

 5、对话框

它是一种用户界面元素,可以在屏幕上弹出一个小窗口,显示提示信息、用户选择项或请求用户输入数据。其作用是提供一种简单而直观的用户交互方式,让用户可以快速地做出决定或输入数据,从而方便用户操作应用程序。对话框通常用于警告、确认、输入和选择等场景,可以根据实际需要选择合适的对话框类型来满足不同的交互需求。 

有基本对话框

     

有普通列表对话框

 有单选对话框

 有多选对话框

 有输入对话框

 有进度对话框       

六、总结与反思

        通过一次次的学习总结反思,我发现自身的知识底蕴还远远不够,对于一些理论知识的学习还不够充分,对编写代码的效率也还有很大的进步空间,因此,我将采取一下措施来提高自身的技能水平。首先,我将充分利用课内与课外的时间,大量阅读相关书籍资料,充分利用网上的资源来帮助提升自己,通过查阅Android官方网站和相关开发者社区资源,学到更多的实践经验;同时多参与一些实践项目,旨在锻炼提升自己,利用自身的知识水平实践于项目中,从中找出短板,补齐它,积极参与网上的相关讨论问题,虚心请教他人,在实践交流中得出真知,我将时刻关注最新的行业动态与新技术的发展,做到与时俱进,不断革新自身。

          

  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[14本经典Android开发教程]-4-Android应用程序开发36技 本书共分为4篇: ※ 第一篇:介绍应用框架概念、原理和特性。 ※ 第二篇:阐述应用框架之设计技巧。亦即,如何打造应用框架。 (注:如果你的职务是「使用」Android框架來开发应用程式的话,可以跳过本篇,直接进入第三篇。) ※ 第三篇:說明及演練Android应用程式设计的36技。 ※ 第四篇:介绍Android框架与硬体之间C组件的开发流程及工具。 已上传3本: [14本经典Android开发教程]-3-Android SDK 中文开发文档 http://download.csdn.net/detail/cleopard/8380429 [14本经典Android开发教程]-1-Android开发从入门到精通 http://download.csdn.net/detail/cleopard/8355245 [14本经典Android开发教程]-2-Android开发手册—API函数详解 http://download.csdn.net/detail/cleopard/8374487 剩余11本稍后上传!@或直接从这里寻找@ http://download.csdn.net/user/cleopard/album @更多@ http://cleopard.download.csdn.net/ 福利 http://xuemeilaile.com 17份软件测试文档 http://download.csdn.net/album/detail/1425 13份WPF经典开发教程 http://download.csdn.net/album/detail/1115 C#资料合辑二[C#桌面编程入门篇] http://download.csdn.net/album/detail/957 C#资料合辑一[C#入门篇] http://download.csdn.net/album/detail/669 [Csharp高级编程(第6版)](共8压缩卷) http://download.csdn.net/album/detail/667 10个[精品资源]Java学习资料合辑[一] http://download.csdn.net/album/detail/663 10个C#Socket编程代码示例 http://download.csdn.net/album/detail/631 6份GDI+程序设计资源整合[全零分] http://download.csdn.net/album/detail/625 2014年移动游戏行业数据分析 http://download.csdn.net/detail/cleopard/8340331 一文读懂2014年全球互联网广告新生态 http://download.csdn.net/detail/cleopard/8340303
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值