当前位置: 首页 > news >正文

广元网站建设seo优化营销制作设计做网站算 自由职业者

广元网站建设seo优化营销制作设计,做网站算 自由职业者,怎样做网站域名注册,腾讯企点怎么删除好友文章目录前言工具创建项目简单控件即UI一、界面显示与逻辑处理二、文本三、布局四、按钮五、控件综合训练(简易计算器)六、Activity七. 中级控件前言 最近在有在持续学习Java的安卓开发#xff0c;不断的把知识记录下。 工具 Android Studio安装 [Studio安装][1] [1]: https… 文章目录前言工具创建项目简单控件即UI一、界面显示与逻辑处理二、文本三、布局四、按钮五、控件综合训练(简易计算器)六、Activity七. 中级控件前言 最近在有在持续学习Java的安卓开发不断的把知识记录下。 工具 Android Studio安装 [Studio安装][1] [1]: https://developer.android.google.cn/studio “Studio安装” SDK下载 SDK即软件开发工具包可将App源码编译成可执行的App应用 创建项目 创建项目 这里Minimum SDK后面指的是兼容到安卓几表示你的应用支持的最低版本看百分比选一般目前的都是9.0-10.0。 内置模拟器 初始化Gradle要下载半小时内置模拟器也有十多G默认在C盘很不爽可以移动 注册环境变量然后修改下面的配置直接把目录移动到想存的位置即可。 观察App运行日志 Android采用Log日志打印日志各类日志划分 Log.e 表示错误信息可能导致程序崩溃 Log.w表示警告信息 Log.i表示一般消息 Log.d表示调试信息可把程序运行变量值打印方便跟踪调试 Log.v表示冗余信息 真机调试 1、使用数据库连接到电脑 2、电脑上会自动安装USB存储设备驱动 3、打开手机的开发者选项并开启USB调试 4、将连接的手机设备文件传输模式并允许计算机进行USB调试 关于安卓开发语言 App开发分为两大技术路线分别为原生开发和混合开发官方的编程语言包括Java和Kotlin。 混合开发渲染性能没有原生开发好但是混合开发可以跨平台版本更新不需要重新下载API文件。 关于C和CJava是解释型语言在处理图像和音视频时性能显然就有瓶颈而C和C是编译型语言会 先翻译成机器语言在图像和音视频处理时可以调用java的JNI接口调用C和C程序进行处理也称NDK。 目录结构 mainfestsApp运行配置文件 java子目录存放java源代码后面两个包存放测试用的代码 res目录下 drawable存放图形描述和图片文件 LayoutApp页面的布局文件 mipmapApp的启动图标 values存放常量的文件如样式风格等 Gradle Scripts目录下 build.gradle描述项目级和模块级的App工程编译规则 proguard-rules.projava代码的混淆规则保证安全性 gradle.properties用于编译工程的命令行参数 local.properties本地配置文件描述开发者电脑的环境配置 settings.gradle配置了需要编译的模块 build.gradle的文件概述解释 plugins {//使用的插件id com.android.application }android {namespace com.example.myapplicationcompileSdk 33 //编译使用的SDK版本号,33表示使用Android13defaultConfig {// App的包名applicationId com.example.myapplication//指定App适合运行的最小的SDK版本号,28表示最小在Android9上运行minSdk 28//目标设备的版本号,表示App最希望在那个版本的Android上运行targetSdk 33//App的应用版本号versionCode 1versionName 1.0testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner}//跟单元测试相关buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8} } //指定App编译的依赖包信息 dependencies {//指定编译的Android高版本支持库implementation androidx.appcompat:appcompat:1.4.1implementation com.google.android.material:material:1.5.0implementation androidx.constraintlayout:constraintlayout:2.1.3//指定单元测试编译用的junit版本号testImplementation junit:junit:4.13.2androidTestImplementation androidx.test.ext:junit:1.1.3androidTestImplementation androidx.test.espresso:espresso-core:3.4.0 }清单文件 ?xml version1.0 encodingutf-8? manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsapplicationandroid:allowBackuptrueandroid:dataExtractionRulesxml/data_extraction_rulesandroid:fullBackupContentxml/backup_rulesandroid:iconmipmap/ic_launcherandroid:labelstring/app_nameandroid:supportsRtltrueandroid:themestyle/Theme.MyApplicationtools:targetApi31activityandroid:name.MainActivityandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filter/activity/application/manifestandroid:iconApp手机屏幕显示的图标 android:labelApp手机屏幕显示的名称 android:allowBackup是否允许数据备份数据丢失时恢复应用 android:theme指定App显示的风格 android:supportsRtl是否支持波斯语等从右向左的文字排列顺序语言 activity应用程序组件提供屏幕用来交互完成某项任务 android:exported当前Activity是否可以被另一个Application的组件启动 android:name启动应用首先启动那个Applicaiton 简单控件即UI 一、界面显示与逻辑处理 创建新的activity页面 ?xml version1.0 encodingutf-8? LinearLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:gravitycenterTextViewandroid:idid/tvandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textstring/text2 //LinearLayout创建新的MainActivity类并将类加入Mainifest package com.example.myapplication;import android.os.Bundle;import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity;public class MainActivity2 extends AppCompatActivity {Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);} } activity android:name.MainActivity2/ 设置跳转按钮 ?xml version1.0 encodingutf-8? LinearLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:gravitycenterTextViewandroid:idid/tvandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textHello World!/Buttonandroid:idid/buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text跳转//LinearLayout写跳转方法 package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView;public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView tvfindViewById(R.id.tv);tv.setText(你好,世界!);Button buttonfindViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {Intent intentnew Intent();intent.setClass(MainActivity.this,MainActivity2.class);startActivity(intent);}});} }二、文本 文本大小 px 图像元素跟随屏幕大小和像素数量关系变化。 resolution屏幕垂直和水平方向的像素数量。 dpi像素密度指屏幕上每英寸距离中有多少个像素点。 Density指定每平方英寸含有的像素点数量。 dip/dp长度单位同一个单位在不同设备中有不同显示效果。 sp专门用于设置字体大小会根据系统的字体大小改变而改变。 dip是开发中的长度单位最后也要转换为pxpxdip*dpi/160 例如 320*480分辨率 3.6寸的手机: dpi(32024802)^(1/2)/3.6160 所以 1dp1px 对于相同尺寸的手机即使分辨率不同占用屏幕比例也相同 设置文本颜色 设置文本的颜色一般可直接设置也可以通过十六进制设置如0xFFFFEEDD, 其中先 后十六进制顺序为透明度红色绿色蓝色。 ?xml version1.0 encodingutf-8? LinearLayoutxmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:gravitycenterTextViewandroid:idid/text_colorandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textSize30spandroid:text直接设置文本颜色 /TextViewandroid:idid/text_hex_colorandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textSize30spandroid:textColorcolor/purple_200android:text十六进制设置文本颜色/TextViewandroid:idid/text_code_colorandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textSize30spandroid:text代码中设置文本颜色/TextViewandroid:idid/text_backgroundandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textSize30spandroid:text设置文本背景颜色android:background#ff00ff00//LinearLayoutpublic class MainTextActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main_text);TextView text_colorfindViewById(R.id.text_color);text_color.setTextColor(Color.GREEN);TextView text_code_colorfindViewById(R.id.text_code_color);text_code_color.setTextColor(0xff00ff00);} }视图 wrap_content自适应大小刚好能包含内容 match_parent当前控件的大小和父布局的大小一样 dp自行设置dp大小 在代码中设置视图宽高。 调用控件对象getLayoutParams方法获取控件的布局参数。 调用控件对象的setLayoutParams方法填入修改后布局参数使之生效。 public class ViewBorderActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_view_border);TextView text_borerfindViewById(R.id.text_view_border);ViewGroup.LayoutParams paramstext_borer.getLayoutParams();params.width Utils.dip2px(this,300);text_borer.setLayoutParams(params);} }public class Utils {//根据分辨率dp转化为像素pxpublic static int dip2px(Context context, float dpValue){//获取当前像素密度,1个dp对应多少个像素float scalecontext.getResources().getDisplayMetrics().density;return (int)(dpValue*scale0.5f);} }三、布局 线性布局LinearLayout orientation为horizontal内部视图水平方向排列 oritentation为vertical内部视图竖着排列 相对布局RelativeLayout 相对布局的下级视图位置由其他视图决定确定位置参照物分两种 1与该视图自身评级的视图 2该视图的上级视图 不设定默认在左上角 ?xml version1.0 encodingutf-8? RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentTextViewandroid:idid/centerandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_centerInParenttrueandroid:background#ffffffandroid:text我在中间android:textColor#000000android:textSize10sp /TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_alignParentLefttrueandroid:background#ffffffandroid:text我在上级左边中间android:textColor#000000android:textSize10sp /TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:background#ffffffandroid:layout_alignParentBottomtrueandroid:text我在上级底部对齐android:textSize10spandroid:textColor#000000/TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_toLeftOfid/centerandroid:layout_alignTopid/centerandroid:background#ffffffandroid:text我在中间左边android:textColor#000000android:textSize10sp / /RelativeLayout网格布局GridLayout支持多行多列的表格排列 网格布局默认从左往右从上到下属性如下 columnCount指定网格列数即每行能放多少视图 rowCount指定网格行数每列能放多少个视图 ?xml version1.0 encodingutf-8? GridLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:columnCount2android:rowCount2TextViewandroid:layout_width0dpandroid:layout_columnWeight1android:layout_height60dpandroid:text红色android:background#ff0000android:textSize20spandroid:gravitycenterandroid:textColor#000000/TextViewandroid:layout_width0dpandroid:layout_columnWeight1android:layout_height60dpandroid:text橙色android:background#ffaa00android:textSize20spandroid:gravitycenterandroid:textColor#000000/TextViewandroid:layout_width0dpandroid:layout_columnWeight1android:layout_height60dpandroid:text绿色android:background#00ff00android:textSize20spandroid:gravitycenterandroid:textColor#000000/TextViewandroid:layout_width0dpandroid:layout_columnWeight1android:layout_height60dpandroid:text紫色android:background#660066android:textSize20spandroid:gravitycenterandroid:textColor#000000//GridLayout滚动视图ScrollView ScrollView垂直方向滚动垂直方向滚动时layout_width属性值设置为math_parentlayout_height属性设置为wrap_content HorizontalScrollView水平方向滚动layout_width属性值设置为wrap_contentlayout_height属性设置为match_parent ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalHorizontalScrollViewandroid:layout_widthwrap_contentandroid:layout_height200dpLinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightmatch_parentandroid:orientationhorizontalViewandroid:layout_width300dpandroid:layout_heightmatch_parentandroid:background#00ff00/ViewViewandroid:layout_width300dpandroid:layout_heightmatch_parentandroid:background#00aaff/View/LinearLayout/HorizontalScrollViewScrollViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentLinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightmatch_parentandroid:orientationverticalViewandroid:layout_widthmatch_parentandroid:layout_height400dpandroid:background#ff0000/ViewViewandroid:layout_widthmatch_parentandroid:layout_height400dpandroid:background#aa00ff/View/LinearLayout/ScrollView/LinearLayout四、按钮 Button由TextView派生区别在于 Button拥有默认按钮背景(紫色)而TextView无背景。 Button的内部文本默认居中对齐。 Button会默认将英文字母转为大写testAllCaps可以设置是否转换。 ImageButton显示图片的图像按钮继承自ImageView ImageButton只能显示图片不能显示文本 ImageButton的图像可按比例缩放,Button背景设置的图像会拉伸变形 Button只能靠背景显示一张图片ImageButton可在前景和背景显示图片从而实现两张图片叠加效果 例子设置三个按钮分别启动和禁用第三个按钮禁用按钮需要长按才能禁用第三个按钮点击则显示时间。 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalLinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalButtonandroid:idid/button_begin_clickandroid:layout_width0dpandroid:layout_weight1android:layout_heightwrap_contentandroid:text启用按钮android:textSize17sp/Buttonandroid:idid/button_disable_clickandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:text禁用按钮android:textSize17sp //LinearLayoutButtonandroid:idid/button_test_clickandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text测试禁用的按钮android:textSize17spandroid:enabledfalse/TextViewandroid:idid/button_text_viewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text查看测试禁用按钮的结果android:textSize17spandroid:textColor#000000//LinearLayoutpackage com.example.myapplication.utils;import java.text.SimpleDateFormat; import java.util.Date;public class DateTime {public static String getNowTime(){SimpleDateFormat simpleDateFormatnew SimpleDateFormat(HH:mm:ss);return simpleDateFormat.format(new Date());} } package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;import com.example.myapplication.utils.DateTime;public class ButtonTextActivity extends AppCompatActivity {private Button button_test_click;private TextView button_view;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_button_text);Button button_begin_clickfindViewById(R.id.button_begin_click);Button button_disable_click findViewById(R.id.button_disable_click);button_test_click findViewById(R.id.button_test_click);button_view findViewById(R.id.button_text_view);button_begin_click.setOnClickListener(new MyOnclickListener());button_test_click.setOnClickListener(new MyOnclickListener());button_disable_click.setOnLongClickListener(new MyOnclickLongListener());}class MyOnclickListener implements View.OnClickListener{Overridepublic void onClick(View view) {switch (view.getId()){case R.id.button_begin_click:button_test_click.setEnabled(true);break;case R.id.button_test_click:String timeString.format(当前时间:%s, DateTime.getNowTime());button_view.setText(time);}}}class MyOnclickLongListener implements View.OnLongClickListener{Overridepublic boolean onLongClick(View view) {button_test_click.setEnabled(false);return true;}}}五、控件综合训练(简易计算器) Strings.xml resourcesstring nameapp_nameMy Application/stringstring nametext2Activity Main/stringstring namesimple_calculator简易计算器/stringstring namecancelCE/stringstring namedivide÷/stringstring nameclearC/stringstring namemultiply/stringstring nameride*/stringstring nameminus-/stringstring namenine9/stringstring nameeight8/stringstring nameseven7/stringstring namesix6/stringstring namefive5/stringstring namefour4/stringstring namethree3/stringstring nametwo2/stringstring nameone1/stringstring namezero0/stringstring namereciprocal1/X/stringstring namedoc./stringstring nameequal/stringstring nameroot√/string /resourcesdimens.xml ?xml version1.0 encodingutf-8? resourcesdimen namebutton_font_size30sp/dimendimen namebutton_height90dp/dimen/resourceslayout.xml ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:background#EEEEEEandroid:orientationverticalandroid:padding5dpScrollViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentLinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationverticalTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textstring/simple_calculatorandroid:textColorcolor/blackandroid:gravitycenterandroid:textSize30sp/TextViewandroid:idid/tv_resultandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:backgroundcolor/whiteandroid:text0android:textColorcolor/blackandroid:lines8android:textSize25spandroid:gravityright|bottom/GridLayoutandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:columnCount4android:rowCount5Buttonandroid:idid/btn_cancelandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/cancelandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_divideandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/divideandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_rideandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/rideandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_clearandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/clearandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_sevenandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/sevenandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_eightandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/eightandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_nineandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/nineandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_multiandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/multiplyandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_fourandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/fourandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_fiveandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/fiveandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_sixandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/sixandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_minusandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/minusandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_oneandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/oneandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_twoandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/twoandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_threeandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/threeandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_rootandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/rootandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_reciprocalandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/reciprocalandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_zeroandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/zeroandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_docandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/docandroid:textColorcolor/blackandroid:textSizedimen/button_font_size/Buttonandroid:idid/btn_equalandroid:layout_width0dpandroid:layout_heightdimen/button_heightandroid:layout_columnWeight1android:textstring/equalandroid:textColorcolor/blackandroid:textSizedimen/button_font_size//GridLayout/LinearLayout/ScrollView /LinearLayout主类 package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;public class CalculatorActivity extends AppCompatActivity implements View.OnClickListener {private TextView tv_result;//第一个操作数private String firstNum;//操作符号private String operator;//第二个操作数private String secodeNum;//计算结果private String result;//显示的文本private String showText;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_calculator);tv_result findViewById(R.id.tv_result);findViewById(R.id.btn_cancel).setOnClickListener(this);findViewById(R.id.btn_divide).setOnClickListener(this);findViewById(R.id.btn_ride).setOnClickListener(this);findViewById(R.id.btn_clear).setOnClickListener(this);findViewById(R.id.btn_seven).setOnClickListener(this);findViewById(R.id.btn_eight).setOnClickListener(this);findViewById(R.id.btn_nine).setOnClickListener(this);findViewById(R.id.btn_multi).setOnClickListener(this);findViewById(R.id.btn_four).setOnClickListener(this);findViewById(R.id.btn_five).setOnClickListener(this);findViewById(R.id.btn_six).setOnClickListener(this);findViewById(R.id.btn_minus).setOnClickListener(this);findViewById(R.id.btn_one).setOnClickListener(this);findViewById(R.id.btn_two).setOnClickListener(this);findViewById(R.id.btn_three).setOnClickListener(this);findViewById(R.id.btn_root).setOnClickListener(this);findViewById(R.id.btn_reciprocal).setOnClickListener(this);findViewById(R.id.btn_zero).setOnClickListener(this);findViewById(R.id.btn_doc).setOnClickListener(this);findViewById(R.id.btn_equal).setOnClickListener(this);}Overridepublic void onClick(View view) {String inputText;inputText((TextView) view).getText().toString();switch (view.getId()){case R.id.btn_cancel:if(operator.equals()) {showText showText.substring(0, showText.length() - 1);refreshOperate(showText);refreshText(showText);break;}if(secodeNum.equals()!operator.equals()){showText showText.substring(0, showText.length() - 1);CE();refreshText(showText);break;}else{showText showText.substring(0, showText.length() - 1);refreshOperate(showText);refreshText(result);break;}case R.id.btn_clear:clear();break;case R.id.btn_multi:case R.id.btn_divide:case R.id.btn_ride:case R.id.btn_minus:operatorinputText;refreshText(showTextoperator);break;case R.id.btn_equal:double calculate_resultcalculateFour();refreshOperate(String.valueOf(calculate_result));refreshText(showTextresult);break;//开根号case R.id.btn_root:double sqrt_resultMath.sqrt(Double.parseDouble(firstNum));refreshOperate(String.valueOf(sqrt_result));refreshText(showText√result);break;//求导数case R.id.btn_reciprocal:double reciprocal_result1.0/Double.parseDouble(firstNum);refreshOperate(String.valueOf(reciprocal_result));refreshText(showText/result);break;default:if (result.length()0operator.equals()){clear();}if(operator.equals()){firstNumfirstNuminputText;}else{secodeNumsecodeNuminputText;}if(showText.equals(0)!inputText.equals(.)){refreshText(inputText);}else {refreshText(showText inputText);}break;}}private void cancel(){}private void clear(){refreshOperate();refreshText();}private double calculateFour(){switch (operator){case :return Double.parseDouble(firstNum)Double.parseDouble(secodeNum);case -:return Double.parseDouble(firstNum)-Double.parseDouble(secodeNum);case *:return Double.parseDouble(firstNum)*Double.parseDouble(secodeNum);default:return Double.parseDouble(firstNum)/Double.parseDouble(secodeNum);}}private void CE(){ //7operator;}private void refreshOperate(String new_result){resultnew_result;firstNumresult;secodeNum;operator;}private void refreshText(String text){showTexttext;tv_result.setText(showText);} }并非是什么完美计算器仅是复习以上知识操作使用。 六、Activity 从当前页面跳转到新页面 startActivity(new intent(源页面.this,目标页面.class)) 当前页面返回上一个页面 finish(); activity的生命周期 onCreate 创建活动把页面加载进内存进入初始状态 onStart 开始活动把活动页面显示到屏幕就绪态 onResume 恢复活动活动页面进入活跃状态 onPause 暂停活动页面不能正常交互 onStop 停止活动页面不在屏幕 onDestroy 销毁活动回收系统资源从内存清除 onRestart 重启活动重新加载内存的页面数据 onNewIntent 重用已有的实例 Activity启动模式(栈) 默认启动模式standard启动的Activity依照顺序被依次压入Task栈。 栈顶复用模式singleTop栈顶Activity为我们新建的Activity不会重新创建新的Activity。 栈内复用模式singleTask栈内存在目标Activity实例则将task内对应Activity实例之上的Activity出栈并 将对应Activity置于栈顶。 全局唯一模式singleInstance为目标Activity创建新的Task栈新的Task栈只有这一个Activity如 已经创建目标Activity则不创建新的Task将以前的Activity唤醒。 启动模式的设置intent.setFlags()代码中启动Mainfest.xml中动态设置launch。 例子登录页面进行登录成功后即使后退也不能返回登录页面而是直接退出程序。 package com.example.activity;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button;public class LoginInputActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login_input);Button btn_loginfindViewById(R.id.btn_login);btn_login.setOnClickListener(new MyOnclickListen());}class MyOnclickListen implements View.OnClickListener{Overridepublic void onClick(View view) {Intent intentnew Intent(LoginInputActivity.this,LoginSuccessActivity.class);intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);}} }通过设置启动模式来完成一旦登录则会清空当前活动栈中的所有实例然后再同时启动开辟新任务的活动栈这样登录后再点击返回则会直接退出程序。 Intent Intent各个组件之间信息沟通桥梁用于组件之间通信主要完成工作是本次通信请求从哪来到哪去要怎么走 发起方携带本次通信需要的数据接收方从收到的意图中解析数据。 发起方若判断接收方处理结果意图就要负责让接收方回应答数据。 显示Intent直接指定来源活动与目标活动精确匹配三种方式 直接Intent函数中指定new Intent() 调用意图对象setClass() 调用意图对象setComponent() 隐式Intent没有明确指定要跳转的目标活动只给出一个动作字符串匹配属于模糊匹配 通过setActionurlsetData()指定动作和数据 常见的隐式动作有 例子1使用隐式Intent直接进行拨号发送短信或跳转到其它APP package com.example.activity;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; import android.widget.Button;public class IntentActivity extends AppCompatActivity implements View.OnClickListener{Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_intent);Button btn_dailfindViewById(R.id.btn_dail);Button btn_cmsfindViewById(R.id.btn_cms);Button btn_myfindViewById(R.id.btn_mypage);btn_dail.setOnClickListener(this);btn_cms.setOnClickListener(this);btn_my.setOnClickListener(this);}Overridepublic void onClick(View view) {String phone123456;Intent intentnew Intent();switch (view.getId()){case R.id.btn_dail:intent.setAction(Intent.ACTION_DIAL);Uri uriUri.parse(tel:phone);intent.setData(uri);startActivity(intent);break;case R.id.btn_cms:intent.setAction(Intent.ACTION_SENDTO);Uri uri2Uri.parse(smsto:phone);intent.setData(uri2);startActivity(intent);break;case R.id.btn_mypage:intent.setAction(android.intent.action.Aiwin);intent.addCategory(Intent.CATEGORY_DEFAULT);startActivity(intent);break;}} }intent-filteraction android:nameandroid.intent.action.Aiwin /category android:nameandroid.intent.category.DEFAULT //intent-filter最后跳转自己的APP需要在mainfestxml中添加intent-filter 例子2A页面发送信息给B页面B页面再返回回应信息给A页面需要通过registerForActivityResult() package com.example.activity;import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContract; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;public class ActRequestActivity extends AppCompatActivity implements View.OnClickListener{private ActivityResultLauncherIntent register;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_act_request);Button btn_sendfindViewById(R.id.btn_request);TextView btn_receivefindViewById(R.id.btn_receive);btn_send.setOnClickListener(this);register registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallbackActivityResult() {Overridepublic void onActivityResult(ActivityResult result) {if(result!null){Intent intentresult.getData();if(intent!nullresult.getResultCode() Activity.RESULT_OK){Bundle bundleintent.getExtras();String messagebundle.getString(response);btn_receive.setText(message);}}}});}Overridepublic void onClick(View view) {Intent intentnew Intent(this,ActResponseActivity.class);Bundle bundlenew Bundle();bundle.putString(message,你睡了吗?);intent.putExtras(bundle);register.launch(intent);} }package com.example.activity;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView;public class ActResponseActivity extends AppCompatActivity implements View.OnClickListener {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_act_response);TextView requestfindViewById(R.id.btn_request);Button btn_responsefindViewById(R.id.btn_response);Bundle bundlegetIntent().getExtras();String request_contentbundle.getString(message);request.setText(request_content);btn_response.setOnClickListener(this);}Overridepublic void onClick(View view) {Intent intentnew Intent();Bundle bundlenew Bundle();bundle.putString(response,我没睡,我爸妈不在家);intent.putExtras(bundle);setResult(ActRequestActivity.RESULT_OK,intent);finish();} }应用页面注册快捷方式 在安卓7以后可以长按页面图标弹出一些快捷方式比如长按微信会弹出扫一扫付款码等 点击即可直接跳转到该页面。 例子在xml目录创建shortcuts.xml先修改Mainfest.xml文件 activityandroid:name.ActStartActivityandroid:exportedtrueintent-filteraction android:nameandroid.intent.action.MAIN /category android:nameandroid.intent.category.LAUNCHER //intent-filtermeta-dataandroid:nameandroid.app.shortcutsandroid:resourcexml/shortcuts //activity配置shortcuts.xml文件 shortcuts xmlns:androidhttp://schemas.android.com/apk/res/androidshortcutandroid:enabledtrueandroid:iconmipmap/ic_launcherandroid:shortcutIdfirstandroid:shortcutLongLabelstring/shortcutLongLabel_firstandroid:shortcutShortLabelstring/shortcutShortLabel_first!-- targetClass指定了点击该项菜单后要打开哪个活动页面 --intentandroid:actionandroid.intent.action.VIEWandroid:targetClasscom.example.activity.ActStartActivityandroid:targetPackagecom.example.activity /categoriesandroid:nameandroid.shortcut.conversation //shortcutshortcutandroid:enabledtrueandroid:iconmipmap/ic_launcherandroid:shortcutIdsecondandroid:shortcutLongLabelstring/shortcutLongLabel_secondandroid:shortcutShortLabelstring/shortcutShortLabel_second!-- targetClass指定了点击该项菜单后要打开哪个活动页面 --intentandroid:actionandroid.intent.action.VIEWandroid:targetClasscom.example.activity.ActStartActivityandroid:targetPackagecom.example.activity /categoriesandroid:nameandroid.shortcut.conversation //shortcut/shortcuts 效果 七. 中级控件 Shape图 形状图形 Shape形状图形的定义文件是以shape标签为根节点的XML描述文件一般有四种类型的形状 rectangle 矩形默认值 oval 椭圆corners节点失效 line 直线必须设置stroke节点 ring 圆环 其中XML中能设置的有size尺寸stroker描边corners圆角solid填充padding间隔gradient渐变 如设置一个椭圆形 ?xml version1.0 encodingutf-8? shape xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:shapeovalsolid android:color#ff66aa/stroke android:width1dp android:color#aaaaaa//shape九宫格图片 在Android Stdio中可以直接把PNG图片转成九宫格图片利用九宫格图片能够使图片被拉伸但是不变形 能够用于适应不同的手机屏幕。 状态列表图形 简单来说就是按钮被按下和没被按下显示不同的颜色或者形状等以便于用户区分按了哪一个按钮可通过StateListDrawable完成。状态的取值常用的有pressed、checked、focused、selected ?xml version1.0 encodingutf-8? selector xmlns:androidhttp://schemas.android.com/apk/res/androiditem android:state_pressedtrue android:drawableandroid:drawable/button_onoff_indicator_on/item android:drawableandroid:drawable/button_onoff_indicator_off//selector?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:gravitycenterButtonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text默认样式按钮/Buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_marginTop5dpandroid:backgrounddrawable/drawable_nine_selectorandroid:padding5dpandroid:text定制样式按钮//LinearLayoutcheckbox ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalandroid:padding5dpCheckBoxandroid:idid/ck_systemandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:padding5dpandroid:text系统的CheckBox /CheckBoxandroid:idid/ck_customandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_marginTop10dpandroid:buttondrawable/checkbox_selectorandroid:padding5dpandroid:textCheckBox换图标//LinearLayoutpackage com.example.middlecontrolactivity;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.widget.CheckBox; import android.widget.CompoundButton;public class CheckBoxAcivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_check_box_acivity);CheckBox ck_systemfindViewById(R.id.ck_system);CheckBox ck_customfindViewById(R.id.ck_custom);ck_system.setOnCheckedChangeListener(this);ck_custom.setOnCheckedChangeListener(this);}Overridepublic void onCheckedChanged(CompoundButton compoundButton, boolean b) {String descString.format(您%s了这个CheckBox,b ? 勾选:没勾选);compoundButton.setText(desc);} }Switch 与checkbox使用是一致的都是从Compuound类继承而来 textOn:设置右侧开启时文本 textOff:设置左侧关闭时文本 track:设置开关轨道的背景 thumb:设置开关标识图标RadioButton 一般单选按钮只允许选择一个需要放在RadioGroup里面对RadioGroup进行监听 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text请选择你的性别android:textColorcolor/blackandroid:textSize17sp/RadioGroupandroid:idid/rg_rbandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalRadioButtonandroid:idid/rb_maleandroid:layout_width0dpandroid:layout_weight1android:layout_heightwrap_contentandroid:text男/RadioButtonandroid:idid/rb_femaleandroid:layout_width0dpandroid:layout_heightwrap_contentandroid:layout_weight1android:text女//RadioGroupTextViewandroid:idid/tv_resultandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:textSize17spandroid:textColorcolor/black//LinearLayoutpackage com.example.middlecontrolactivity;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.widget.CompoundButton; import android.widget.RadioGroup; import android.widget.TextView;public class RadioButtonActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener {private TextView tv_result;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_radio_button);RadioGroup rg_rbfindViewById(R.id.rg_rb);tv_resultfindViewById(R.id.tv_result);rg_rb.setOnCheckedChangeListener(this);}Overridepublic void onCheckedChanged(RadioGroup radioGroup, int i) {switch (i){case R.id.rb_male:tv_result.setText(你选择的是男性);break;case R.id.rb_female:tv_result.setText(你选择的女性);break;}} }EditText hint:指定提示文本的内容 maxLength:指定文件允许输入的最大长度 inputType:指定输入的文本类型 输入类型说明text文本testPassword文本密码number整型数numberSigned带符号的数字numberDecimal带小数点的数字numberPassword数字密码datetime时间日期格式数字横线斜杆空格冒号date日期格式数字横线斜杠time时间格式 例子简单的登录判断程序 ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:padding5dpandroid:orientationverticalEditTextandroid:idid/phoneandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:hint请输入手机号android:inputTypephoneandroid:textColorHintcolor/black /EditTextandroid:idid/passwordandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:hint请输入密码android:inputTypetextPasswordandroid:textColorHintcolor/black/Buttonandroid:idid/buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:text提交android:textSize17spandroid:layout_gravityright /TextViewandroid:idid/textandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:textSize17sp//LinearLayoutpackage com.example.middlecontrolactivity;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView;public class EditTextActivity extends AppCompatActivity implements View.OnClickListener {private Button button;private EditText phone;private EditText password;private TextView v;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_edit_text);vfindViewById(R.id.text);button findViewById(R.id.button);phonefindViewById(R.id.phone);passwordfindViewById(R.id.password);button.setOnClickListener(this);}Overridepublic void onClick(View view) {String pphone.getText().toString();String passpassword.getText().toString();if(p.equals(123456) pass.equals(123456)){v.setText(登录成功);}else{v.setText(登录失败);}} }
http://www.hkea.cn/news/14398133/

相关文章:

  • 河北省建设厅网站工程师查询青岛网站建设搜q.479185700
  • html5视频网站源码大健康网站怎么样做
  • 华为云建站和阿里云建站区别重庆网红打卡地
  • 青岛哪个网站建设公司价格低还能好一些响应式布局代码例子
  • 佛山网站建设 合优wordpress评论图片
  • 郑州做网站擎天北京做微信网站哪家好
  • 西安专业手机网站建设价格建设网站的政策风险分析
  • 学网站开发要什么基础建设银行对公打不开网站
  • 怎么做秒赞网站平台推广应用
  • 罗湖网站设计多少钱百度收录好的网站排名
  • win7用iis搭建网站长春网站改版
  • 淘宝联盟的网站怎么做的小米网站 用什么做的
  • 保定网站建设方案咨询数字创意设计包括哪些行业
  • wordpress照片评选插件网站建设优化之优化关键字
  • 西安网站建设招骋如何导入wordpress
  • 中山网站建设平台怎么建设网站赚钱
  • 安徽蚌埠怀远县建设局网站wordpress好用的会员插件
  • 合肥网站建设培训班专门做男装的网站
  • 中国建设布网站网络营销与直播电商
  • 新丝路网站建设数据分析公司
  • 淘宝上的网站建设可信网站制作网站设计
  • 化工企业网站jsp化妆品推广软文
  • php做网站需要注意什么页面设计高度
  • 集思吧网站怎么做问卷集团公司网站模板
  • 网站建设培训ppt网站描本链接怎么做
  • 华东建设发展设计有限公司网站全定制网站开发
  • 手机如何创建个人网站h5 移动 网站 开发
  • 网站后期建设wordpress 七牛云 cdn
  • 科技公司内蒙古网站制作商品详情页设计图
  • 东莞市网站建设分站公司百度广告代理商