IDEA中开发Android完整示例及APK的生成(包含用户名密码输入获取等操作)

news2025/1/10 12:33:40

先看看运行演示程序效果:

 

 

 输入内容并点击确定按钮效果如下图,

(已测试传到真机中安装运行效果一模一样兼容基本所有安卓版本:)

 

 实现步骤如下:


1,先安装AndroidSDK

点击File->new project->Android

这个因为我本机已经安装了,所以在网上借的一张图。

2,选择项目模板

安装完成后就进入选择模板步骤,我们选择Empty Activity创建一个空白项目模板。 

 修改项目信息,这里可以保持默认。

3.项目结构图

创建后的项目文件结构图如下

 

 

其中主要用到的是二个文件,一个是主代码文件,一个是主布局文件 

MainActivity.java
activity_main.xml

 贴上两个主要文件代码:

MainActivity.java

package com.example.myapplication;

import android.app.AlertDialog;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    private static final String TAG="LOG";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate((savedInstanceState));


        //这句话的意思是引用layout中的activity_main文件
        setContentView(R.layout.activity_main);

        View btn=findViewById(R.id.btnOK);

        //点击事件
        btn.setOnClickListener(new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                //添加响应事件,这里进行打印
                Log.e(TAG,"onClick");
                EditText etUser = findViewById(R.id.editName);
                String strUser = etUser.getText().toString().trim();
                EditText edtPass = findViewById(R.id.editPassword);
                String strPass = edtPass.getText().toString().trim();

                //创建一个弹出对话框
                   /* AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setTitle("这里是提示信息");
                    builder.setMessage("对话框的内容在这儿");
                    builder.show();
                   */
                new  AlertDialog.Builder(MainActivity.this)
                        .setTitle("提示信息")
                        .setMessage("您输入的用户名为:"+strUser+"  密码为:"+strPass)
                        .setPositiveButton("确定",null)
                        .show();
            }
        });

        //长按事件
        btn.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                Log.e(TAG,"OnLongClick");
                return false;
            }
        });

        //触摸事件
        btn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                Log.e(TAG,"onTouch");
                return false;
            }
        });

    }
}


activity_main.xml

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

    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="请输入您的姓名"
            android:textColorHint="#FF95A1AA"
            android:ems="10"
            android:layout_centerInParent="true"
            android:id="@+id/editName"
            tools:ignore="MissingConstraints"
            app:layout_constraintHorizontal_chainStyle="packed"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="24dp"
            android:layout_marginStart="24dp" app:layout_constraintTop_toTopOf="parent"
            android:layout_marginTop="50dp"/>
    <Button
            android:text="确定"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnOK"

            tools:ignore="MissingConstraints"
            app:layout_constraintTop_toTopOf="@+id/editName" android:layout_marginLeft="25dp"
            android:layout_marginStart="25dp" app:layout_constraintStart_toEndOf="@+id/editName"/>
    <Switch
            android:text="禁用"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/switch1"
            app:layout_constraintStart_toStartOf="parent"
            android:layout_marginLeft="108dp" app:layout_constraintBottom_toBottomOf="parent"
            android:layout_marginStart="108dp" android:layout_marginBottom="352dp"
            android:layout_marginTop="40dp" app:layout_constraintTop_toBottomOf="@+id/editPassword"
            app:layout_constraintVertical_bias="0.0"/>
    <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="请输入您的密码"
            android:ems="10"
            android:id="@+id/editPassword"
            app:layout_constraintStart_toStartOf="@+id/editName"
            android:layout_marginTop="12dp" app:layout_constraintTop_toBottomOf="@+id/editName"/>
    <Button
            android:text="登录"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" android:id="@+id/button"
            android:layout_marginEnd="4dp"
            android:layout_marginRight="4dp" app:layout_constraintEnd_toEndOf="@+id/switch1"
            android:layout_marginTop="56dp" app:layout_constraintTop_toBottomOf="@+id/switch1"/>

</androidx.constraintlayout.widget.ConstraintLayout>

模拟器中运行效果如下: 

 导出生成APK

 

 

 

 

 

生成APK文件成功:

  生成的APK安装文件在app--release目录下,安装到手机中即可正常运行

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TSBS 是什么?为什么时序数据库 TDengine 会选择它作为性能对比测试平台?

TSBS 是一个时序数据处理&#xff08;数据库&#xff09;系统的性能基准测试平台&#xff0c;提供了 IoT、DevOps 两个典型应用场景&#xff0c;它由 Timescale 开源并负责维护。作为一个性能基准测试平台&#xff0c;TSBS 具有便捷、易用、扩展灵活等特点&#xff0c;涵盖了时…

MySQL卸载教程(详细)

系列文章 C#项目–业务单据号生成器&#xff08;定义规则、自动编号、流水号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 C#项目–开始日期结束日期范围计算&#xff08;上周、本周、明年、前年等&#xff09; 本文链接&…

taobao.open.account.update( Open Account数据更新 )

&#xffe5;开放平台免费API不需用户授权 Open Account数据更新 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 响应参数 点击获取key和secret 请求示例 TaobaoClient client new DefaultTaobaoClient(url, appkey, sec…

2022 年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项样题

2022 年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项样题 一、 赛项信息 第一场比赛&#xff1a; 竞赛阶段 任务阶 段 竞赛任务 竞赛时 间 分值 第一阶段 任务 1 网络平台搭建 90 平台搭建与安全 任务 2 网络安全设备配置与防护 210 设备配置防护…

【调试方法】基于vs环境下的实用调试技巧

前言&#xff1a; 对万千程序猿来说&#xff0c;在这个世界上如果有比写程序更痛苦的事情&#xff0c;那一定是亲手找出自己编写的程序中的bug&#xff08;漏洞&#xff09;。作为新手在我们日常写代码中&#xff0c;经常会出现报错的情况&#xff08;好的程序员只是比我们见过…

4.排序算法之一:冒泡排序

排序算法稳定性假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&#xff0c;若经过排序&#xff0c;这些记录的相对次序保持不变&#xff0c;即在原序列中&#xff0c;r[i]r[j]&#xff0c;且r[i]在r[j]之前&#xff0c;而在排序后的序列中&#xff0c;r[…

操作系统权限提升(二十一)之Linux提权-环境变量劫持提权

系列文章 操作系统权限提升(十八)之Linux提权-内核提权 操作系统权限提升(十九)之Linux提权-SUID提权 操作系统权限提升(二十)之Linux提权-计划任务提权 环境变量劫持提权 环境变量劫持提权原理 PATH是Linux和类Unix操作系统中的环境变量&#xff0c;类似windows中的path环…

蓝海彤翔执行副总裁张加廷接受【联播苏州】独家专访

今年春节档&#xff0c;科幻类电影《流浪地球2》票房口碑双丰收&#xff0c;截至目前&#xff0c;累计票房已破 38 亿&#xff0c;淘票票评分 9.6 &#xff0c;影片的特效质感可以媲美国际顶尖水平。其中&#xff0c;蓝海彤翔为影片的后期制作提供了出色的渲染服务。2月21日&am…

前端学习第二阶段-第4章 移动web开发

4-1 媒体查询 01-移动WEB开发rem适配布局导读 02-rem单位 03-媒体查询语法简介 04-媒体查询案例背景变色 05-媒体查询rem实现元素动态大小变化 06-媒体查询引入资源 4-2 less介绍和使用 07-CSS的弊端 08-less简介以及安装 09-less变量 10-less编译easy less插件 11-less嵌套 12…

Linux命令-mdadm管理磁盘阵列组

文章目录​​​​​​​ 概要 一 磁盘阵列是什么&#xff1f; 二 RAID的级别 RAID 0 RAID 1 RAID 5 RAID10 三 命令介绍 四 语法格式 五 基本参数 六 参考实例 创建RAID 0磁盘阵列组 创建RAID 1磁盘阵列组 创建RAID 5磁盘阵列组 创建RAID 10磁盘阵列组…

【Flutter入门到进阶】Flutter基础篇---第一个Flutter应用

1 Flutter目录结构介绍 1.1 创建项目 flutter create flutterdemo 1.2 目录结构 1.3 结构说明 1、android、ios、linux、macos、web、windows文件夹&#xff1a;都是对应平台相关代码 2、lib文件夹&#xff1a;flutter相关代码&#xff0c;我们编写的代码就在这个文件夹 3、t…

八、异步编程

文章目录异步编程FutureTask应用&源码分析FutureTask介绍FutureTask应用FutureTask源码分析FutureTask中的核心属性FutureTask的run方法FutureTask的set&setException方法FutureTask的cancel方法FutureTask的get方法FutureTask的finishCompletion方法CompletableFuture…

DevOps 学习笔记(一) | DevOps 简介及环境搭建

1. 环境配置 本次实验需要三台服务器CI/CD 服务器、应用服务器和Harbor 服务器 DevOps 步骤 程序员将代码 push 到代码仓库Jenkins 根据触发条件拉取代码到CI/CD 服务器Jenkins 使用 Maven 将代码 build 成 jar 包Jenkins 使用 jar 包通过 Dockerfile 和 docker-compose.yml…

HBase JMX 指标学习

名词解释&#xff1a; JMX&#xff1a;Java Management Extensions&#xff0c;用于用于Java程序扩展监控和管理项。 GC&#xff1a;Garbage Collection&#xff0c;垃圾收集&#xff0c;垃圾回收机制。 1、概述 说到对Hadoop和 HBase的集群监控&#xff0c;大家知道的和用…

YOLOv8详解 【网络结构+代码+实操】

文章目录YOLOv8 概述模型结构Loss 计算训练数据增强训练策略模型推理过程网络模型解析卷积神经单元&#xff08;model.py&#xff09;Yolov8实操快速入门环境配置数据集准备模型的训练/验证/预测/导出使用CLI使用python多任务支持检测实例分割分类配置设置操作类型训练预测验证…

FastDDS-4.RTPS层

4. RTPS层 eprosima Fast DDS的较低层RTPS层是RTPS标准协议的实现。与DDS层相比&#xff0c;该层提供了对通信协议内部的更多控制&#xff0c;因此高级用户可以更好地控制库的功能。 4.1 与DDS层的关系 该层的元素与DDS层的元素一一对应&#xff0c;并添加了一些元素。该对应…

【使用两个栈实现队列】

文章目录一、栈和队列的基本特点二、基本接口函数的实现1.栈的接口2.创建队列骨架3.入队操作4.取出队列元素5.返回队首元素6.判断队列是否为空7.销毁队列总结一、栈和队列的基本特点 栈的特点是后进先出&#xff0c;而队列的特点是先进先出。 使用两个栈实现队列&#xff0c;必…

【DataX】数据同步到PG时遇到的分区不存在问题

数据同步到PG时遇到的分区不存在问题前言正文问题分析解决方法结语前言 大概说下这个问题牵扯出来的背景&#xff0c;一个外场项目&#xff0c;选型用PG存业务数据&#xff0c;然后客户要求保存保留一年的数据&#xff0c;运行到现在服务器5个T的磁盘已经有点扛不住了&#xf…

内存的管理

取指令——译码——执行——返存 计组课我们学过cpu真正读指令并非是从内存中读入&#xff0c;而是从cache读和存&#xff0c;再由cache进行取指或返存&#xff0c;因为cpu指令周期比内存周期速度快很多&#xff0c;cpu若要取指或返存都需要等待内存完成他的动作才可以进行下一…

python爬虫:如何定义内容提取器

项目背景 在python 即时网络爬虫项目启动说明中我们讨论一个数字&#xff1a;程序员浪费在调测内容提取规则上的时间&#xff0c;从而我们发起了这个项目&#xff0c;把程序员从繁琐的调测规则中解放出来&#xff0c;投入到更高端的数据处理工作中。 解决方案 为了解决这个问题…