Android移动应用开发

一、创建第一个Empty Activity

一般由三个文件对应

  • Java文件中本类
  • Layout目录中的xml
  • AndroidManifest.xml中注册

创建Java类

 与之对应一个layout的xml文件

 

 我们创建一个button,其中有两个元素

  • match_parent:指定当前元素和父元素一样宽高
  • wrap_content:适应组件中的内容的大小来动态改变宽高

 

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

    <Button
        
        android:id="@+id/Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 1"/>

</LinearLayout>

然后我们回到与之对应的Java类

项目中的任何资源都会在R文件中自动生成一个id,我们只需要调用即可

package com.example.androidapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class FirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这里生成了这行代码,没有就自己创建
        setContentView(R.layout.first_layoout);
    }
}

 我们进入AndroidManidfest.xml注册,并为之配置一个主活动,告诉程序开机就启动这个活动

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" >

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.AndroidApplication"
        tools:targetApi="31" >
        <activity android:name=".FirstActivity"
            android:exported="true"
            android:label="这是第一个活动">
            <!--为程序配置主活动-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

启动


二、组件

Toast

起到提示的作用,这里我们让按钮被点击时提示

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这里生成了这行代码,没有就自己创建
        setContentView(R.layout.first_layoout);
        //为按钮绑定一个Toast
        Button button1 = (Button) findViewById(R.id.Button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(FirstActivity.this,"按钮被按了...",Toast.LENGTH_LONG).show();
            }
        });
    }


Menu

菜单组件

我们在res目录中创建menu目录和main.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/add_item"
        android:title="添加组件"/>
    <item android:id="@+id/remove_item"
        android:title="删除组件"/>
</menu>

 我们接着回到之前的Java类中写入点击逻辑

    public boolean OnCreateOptionsMenu(Menu menu){
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }
    
    public boolean OnOptionsItemSelected(MenuItem menuItem){
        switch (menuItem.getItemId()){
            case R.id.add_item:
                Toast.makeText(this,"添加组件",Toast.LENGTH_SHORT).show();
                break;
            case R.id.remove_item:
                Toast.makeText(this,"删除",Toast.LENGTH_SHORT).show();
                break;
            default:
        }
        return true;
    }


 Intent意图

显式跳转

使用主活动跳转至其他活动

我们创建一个次活动

布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".InferiorActivity">
    <Button
        android:id="@+id/Button_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button 2"/>
</LinearLayout>

注册xml文件

        <!-- 为程序配置此次活动 -->
        <activity
            android:name=".InferiorActivity"
            android:label="跳转至了次活动"/>

 在java类中书写逻辑,点击按钮跳转至次活动

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layoout);
        Button button1 = (Button) findViewById(R.id.Button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(FirstActivity.this,InferiorActivity.class);
                startActivity(intent);
            }
        });
    }

 

 

隐式跳转

我们将上面的显示跳转修改为隐式跳转

我们就直接在注册时添加

        <activity
            android:name=".InferiorActivity"
            android:label="跳转至了次活动"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.androidapplication.jump"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layoout);
        Button button1 = (Button) findViewById(R.id.Button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent("com.example.androidapplication.jump");
                startActivity(intent);
            }
        });
    }

 正常运行

 

传递信息

我们在主活动中创建一个字符串数据,然后将其传入次活动中

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first_layoout);
        Button button1 = (Button) findViewById(R.id.Button_1);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String data = "我是来自主活动的数据";
                Intent intent = new Intent(FirstActivity.this,InferiorActivity.class);
                intent.putExtra("extra_data",data);
                startActivity(intent);
            }
        });
    }
public class InferiorActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_inferior);

        Intent intent = getIntent();
        String data = intent.getStringExtra("extra_data");
        Log.d("InferiorActivity",data);
    }
}

 我们点击了按钮之后就看到了传来的数据


三、UI控件

TextView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="17sp"
        android:textColor="#00ff00"
        android:text="我们是一行文字"/>
    
</LinearLayout>

 Button

    <Button
        android:id="@+id/Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="我是一个按钮Button"
        android:textAllCaps="false"/>
<!--    textAllCaps是自动将小写转为大写,false关闭 -->

 这里使用另外两种方式,之前实现OnClickList接口的方法,之前是匿名内部类的形式实现的

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.Button);
        
//        方式二
        button.setOnClickListener(this);
        
//        方式三   
        //butonholder bh = new butonholder();
        //button.setOnClickListener(bh);
    }

    //方式二
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.Button:
                //此处写逻辑
                break;
            default:
                break;
        }
    }
    
    //方式三
    class butonholder implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.Button:
                    //此处写逻辑
                    break;
                default:
                    break;
            }
        }
    }
}

EditView

输入框

与上方的按钮交互,点击按钮输出打印的内容

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入内容"/>
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.Button);
        editText = (EditText) findViewById(R.id.edit_text);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.Button:
                //此处写逻辑
                String inputText = editText.getText().toString();
                Toast.makeText(MainActivity.this,inputText,Toast.LENGTH_SHORT).show();
                break;
            default:
                break;
        }
    }

ImageView 

图片

    <ImageView
        android:id="@+id/image_goku"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/dargonball"/>
    private ImageView imageView;
    private EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.Button);
        editText = (EditText) findViewById(R.id.edit_text);
        imageView = findViewById(R.id.image_goku);

        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.Button:
                imageView.setImageResource(R.drawable.beauty);
                break;
            default:
                break;
        }
    }

Diolog

确认对话框

直接使用,不需要再xml里   配置布局

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.Button:
                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("提示");
                dialog.setMessage("你点击了按钮,确实更改图片吗");
                dialog.setCancelable(false);
                dialog.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        imageView.setImageResource(R.drawable.beauty);
                    }
                });
                dialog.show();

                break;
            default:
                break;
        }
    }


四、布局

android:orientation="vertical"                全局布局为垂直

android:orientation="horizontal"            全局布局为水平

布局分为三种

  • LinearLayout        线性布局

注:这里有个属性layout_weight:这是该属性占当前组件中的权重,也就是占比

  • RelativeLayout     相对布局

  • ConstraintLayout  约束布局

 滚动菜单ListView

    <ListView
        android:id="@+id/list_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
public class MainActivity extends AppCompatActivity {

    private String[] data = {"Apple","Banana","Orange","Watermelon","Pear","Grape","Strawberry","Cherry","Mango",
            "Apple","Banana","Orange","Watermelon","Pear","Grape","Strawberry","Cherry","Mango",
            "Apple","Banana","Orange","Watermelon","Pear","Grape","Strawberry","Cherry","Mango"};

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //构建适配器对象
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data);
        ListView listView = findViewById(R.id.list_view);
        listView.setAdapter(adapter);

    }
}

注:ListView需要使用适配器Adapter来创建骨架并传入数据 

比如

 现在右图的框架来自于安卓自带的框架

实现ListView的点击事件

注意,我们之前讲过,ListView的模板是安卓自带的,如果想要获取到里面的元素名字,就要使用其中自带的View属性TestView tv = view.findViewById(android.R.id.text1)就是你点击时当前的模板元素(这个是系统通过pisition参数来判断的),那么其名字就是tv.getText()

    private String[] fruitList = {"Apple","Banana","Orange","Watermelon","Pear","Grape","Strawberry","Cherry","Mango",
            "Apple","Banana","Orange","Watermelon","Pear","Grape","Strawberry","Cherry","Mango",
            "Apple","Banana","Orange","Watermelon","Pear","Grape","Strawberry","Cherry","Mango"};

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //构建适配器对象
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,fruitList);
        ListView listView = findViewById(R.id.list_view);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView tv = view.findViewById(android.R.id.text1);
                Toast.makeText(MainActivity.this,tv.getText(),Toast.LENGTH_SHORT).show();

            }
        });
    }

定制ListView

我们让ListView可以显示图片

首先我们创建一个实体类作为适配器的适配类型

然后为创建一个布局

 

 然后自定义一个适配器

 现在来书写逻辑 

 实现定制ListView的点击事件

安卓系统访问网络系统时需要声明权限,否则会崩溃

可以在AndroidManifest.xml中设置权限

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Delphi XE8 iOS与Android移动应用开发(APP开发)[完整中文版],这是一本不可多得的介绍使用delphi xe8开发iOS与Android移动应用的电子书,实用的技术开发教程与技术开发手册。 Delphi XE8跨平台开发让你使用一套代码完成iOS和Android移动应用开发。强大的控件支持,让你可以不用编写一句代码并在短短几分钟内完成数据库的读写 应用开发,开发效率得到充分提升,让编程不再是枯燥无味的工作。全书400多页,从开发环境的安装配置到使用基本界面控件、使用移动设备功能(移动定位、 照像机等)、使用后端服务、访问数据库等都作了全面介绍,是第一本国内最全的中文版Delphi XE8技术开发教程。本书需要有一定delphi基础知识的人阅读。 目 录 第一章 移动应用程序开发(iOS和Android) 17 1. 安装与配置 17 2. 使用基本用户界面控件 18 3. 使用设备功能 20 4. 使用后端服务 21 5. 访问数据库 21 第二章 配置Mac上的开发环境(IOS) 23 2.1 Mac 和 iOS 的要求 23 2.2 配置 Mac 上的iOS模拟器 24 2.2.1 安装平台助手 24 2.2.2 运行平台助手 25 2.2.3 在Mac上安装Xcode 26 2.3 配置 Mac上iOS 硬件设备运行环境 28 2.3.1 在Mac上安装Xcode命令行工具 28 2.3.2 注册一个开发者账户 30 2.3.3 申请、下载并安装你的开发证书 30 2.3.4 注册您的设备 32 2.3.5 创建与安装配置文件 33 第三章 配置WINDOWS PC上的开发环境(iOS) 36 3.1 配置 RAD Studio 环境 37 3.1.1创建与Mac连接的配置 37 3.1.2为iOS设备添加一个SDK 40 第四章 配置WINDOWS PC上的开发环境 (Android) 43 4.1设置 RAD Studio 环境 43 4.1.1 安装RAD Studio时 android 开发工具安装选项 44 4.1.2 在开发环境中配置 Android SDK 46 4.2安装Android USB 驱动程序(必须) 50 第五章 创建移动平台应用程序 (iOS and Android) 54 5.1在你开始之前 54 5.2创建一个新的Android或iOS FireMonkey应用 55 5.3选择Style 56 5.4在多设备窗体上放置组件 56 5.5添加视图到项目 60 5.6编写用户单击按钮的事件处理程序 60 5.7测试移动应用程序 62 5.7.1在Android 设备上测试应用程序 63 5.7.2在 iOS测试应用程序 64 第六章 使用不同风格的按钮控件 (iOS and Android) 67 6.1移动平台中的按钮 67 6.2定义按钮控件的友好界面 68 6.2.1使用按钮控件的 TintColor 和 IconTintColor属性 69 6.2.2自定义按钮控件的图片 71 6.3使用按钮控件创建Segmented Control 72 6.4在工具栏创建 Scope Bar 74 第七章 使用日历控件选取日期 (iOS and Android) 76 7.1移动平台中的日历 76 7.2为用户更改的日期编写事件处理程序 78 第八章 组合框控件的使用 (iOS and Android) 81 8.1多设备应用程序中的选择器 81 8.2使用代码建立列表数据项 84 8.3显示一个指定的项目 84 8.4编写用户选择后的事件处理程序 86 第九章 使用地图控件 (iOS and Android) 88 9.1TMapView 控件的基本功能 89 9.2创建示例应用程序 89 9.2.1配置 Android 应用程序以使用 TMapView 控件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

An1ong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值