说明

  • 源代码
  • 为了更全面的了解RN,先熟悉一下Android开发

第1章 Android 初体验

1.1 Android开发概述

  • Android是Google开发的操作系统
  • Android开发是移动应用开发的表现形式之一(Android、IOS、H5 App、Native + H5、 RN、ionic、MUI…)

1.2 Android开发工具

  • Android Studio
  • 为什么使用Android Studio?
    • Android Studio是Google自己推出的Android集成开发工具,且Google已经停止对Eclipse的支持.

1.3 第一个Android应用

  • Everything begin with Hello World!
  • Android Studio最大的特定是使用Gradle来构建项目…
    [部分目录说明]
  1. res: 存放资源
  2. drawable: 图片
  3. layout: 布局文件
  4. mipmap-hdpi: logo图片
  5. values: 颜色、文字
  6. AndroidMainfest.xml: 应用里面用到的所有内容,都需要在这个里面注册一下

[部分代码说明]

  • src/main/java/com.skypan.helloworld/MainActivity内的函数setContentView(R.layout.activity_main):表示,使用了activity_main布局
  • 打开activity_main.xml,将标签名改为如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" />
</LinearLayout>
  • TextView android:text="Hello World": 显示在手机上的值为Hello World

第2章 UI组件

2.1 布局管理器

  • 线性布局(LinearLayout)
  • 相对布局(RelativeLayout)
  • 以上两种占了接近百分之99

LinearLayout(线性布局)

[最常用属性]:

  • android:id: 控件的id
  • android:layout_width: 布局的宽度
  • android:layout_height: 布局的高度
  • android:background: 布局的背景颜色
  • android:layout_margin: 布局的左右边距
  • android:layout_padding: 布局的内侧边距
  • android:orientation: 布局的方向
  • dp: 根据屏幕自己算出大小
  • match_parent: 匹配父元素
  • <View />: 是所有控件的父类,如<Button />
  • android: gravity= "bottom": 控件子元素的排列方式
  • weight: 权重,占父元素宽度(剩余)的权重.相当于flex布局中子元素的属性flex:1; 把剩余内容按照权重去分配

[小结]:

  • 通过Android Studio新建的项目,入口文件是/app/src/main/java/com.skypan.helloworld/MainActivity
class MainActivity : AppCompatActivity() {override fun onCreate (saveInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)}
}
  • 其中setContentView使用到了activity_main:总体的布局样式

2.1.2 RelativeLayout(相对布局)

[最常见属性]:

  • android:layout_toLeftOf: 在谁左边
  • android:layout_toRightOf: 在谁右边
  • android:layout_alignBottom: 跟谁底部对齐
  • android:layout_alignParentBottom: 跟父元素底部对齐
  • android:layout_below: 在谁的下面

[栗子]:

  • 靠父元素右下角对齐
<RelativeLayout><Viewandroid:id="@+id/view_1"android:layout_width="100dp"android:layout_height="100dp"android:background="#000000"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"/>
</RelativeLayout>
  • View2相对于View1的右边对齐
<RelativeLayout><Viewandroid:id="@+id/view_1"android:layout_width="100dp"android:layout_height="100dp"android:background="#000000"/><Viewandroid:id="@+id/view_2"android:layout_width="100dp"android:layout_height="100dp"android:background="#FF0033"android:layout_toRightOf="@id/view_1"/>
</RelativeLayout>

2.2 TextView

  • 文字大小、颜色
  • 显示不下使用…
  • 文字 + icon
  • 中划线、下划线

[栗子]:

  • 1.写一个宽度随父元素,高度等于文本高度的按钮控件
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><Buttonandroid:id="@+id/btn_textview"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="TextView"/>
</LinearLayout>
  • 2.点击Button类实现跳转
// MainActivity.java
import andoridx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {// 声明 buttonprivate Button mBtnTextView;@overridepretected void onCreate(Bundle saveInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mBtnTextView = (Button) findViewById(R.id.btn_textview);mBtnTextView.setOutClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 跳转到TextView演示界面Intent intent = new Intent(packageContext: MainActivity.this, TextViewActivity.class);startActivity(intent);}})}
}
  • 3.能在MainActivity中使用TextViewActivity的原因
  • AndroidMainfest.xml配置如下:
<applicationandroid:allowBckup="true"...<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
>
  • 4.Java操作的TextView: android:id="@+id/tv_4"
// TextViewActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.widget.TextView;
import android.os.Bundle;
public class TextViewActivity extends AppCompatActivity {private TextView mTv4;@overrideprotected void onCreate (Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_text_view);// 获取 id.tv_4mTv4 = (TextView) findViewById(R.id.tv_4);// 给 id.tv_4划线mTv4.getPaint().setFlags(Paint.STRING_THRU_TEXT_FLAG);// 去锯齿mTv4.getPaint().setAntiAlias(true)}
}

2.3 Button

  • 文字大小、颜色
  • 自定义背景形状
  • 自定义按压效果
  • 点击事件

Button样式(简单)

  • activity_main.xml
<Buttonandroid:id="@+id/btn_button"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button"android:layout_marginTop="10dp" />

使用java操作控件

// MainActivity.java// 声明控件
private Button mBtnButton
// 找到按钮 btn_button
mBtnButton = (Button) findViewById(R.id.btn_button);
// 给 mBtnButton 添加点击事件
mBtnButton.setOnClickListener(new View.OnClickListener(){// 点击按钮后执行的操作
})

实现跳转

import andoirdx.appcompat.app.AppCompatActivity;
import andoird.widget.Button;
import android.content.Intent;public class MainActivity extends AppCompatActivity {// 声明buttonprivate Button mBtnButton;@overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 找到按钮mBtnButton = (Button) findViewById(R.id.btn_button);mBtnButton.setOnClickListener(new View.OnClickListener() {@ovrridepublic void onClick(View v) {// 跳转到 Button 演示界面Intent intent = new Intent( packageContext: MainActivity.this, ButtonActivity.class);startActivity(intent);}})}
}

做一个矩形的按钮

  • 1.在res/drawable -> New -> Drawable resource file -> btn_2.xml
  • 代码如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solidandroid:color="#ffffff" /><cornersandroid:radius="15dp" />

按压效果

  • res/drawable/bg_btn4.xml
  • 样式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"><shape><solid android:color="#cc7c00" /><corners android:radius="15dp" /></shape></item><item android:state_pressed="false"><shape><solid android:color="#ff9900"><corners android:radius="15dp" /></shape></item>
</selector>
  • 引用如下
  • activity_button.xml
<Buttonandroid:id="@+id/btn_4"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/btn_3"android:layout_marginTop="5dp"android:text="Button 4"android:textSize="20sp"android:textColor="#0066ff"android:background="@drawable/bg_btn4" />

点击按钮,响应Toast

  • 假设有按钮如下: activity_button.xml
<Button...android:onClick="showToast" />
  • 对应Java文件 ButtonActivity.java 中加入如下:
public void showToast(View view) {Toast.makeText(context: this, text:'点击', Toast.LENGTH_SHORT).show();
}

[报错]:

  • Could not find method showToast(View) in a parent or ancestor Context for android: 写按钮触发事件的时候,没有传入参数 View view,将public void showToast()改为public void showToast(View view)

点击按钮,响应Toast[方法2]

  • [核心方法] :Button.setOnClickListener()
  • 假设有按钮如下: activity_button.xml
<Buttonandroid:id="@+id/btn_3"....
/>
  • 对于的Java文件ButtonActivity.java中加入如下:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;public class ButtonActivity extends AppCompatActivity {private Button mBtn3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);mBtn3 = (Button) findViewById(R.id.btn_3);mBtn3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(ButtonActivity.this, 'btn3被点击', Toast.LENGTH_SHORT).show();}})}
}

给TextView控件添加点击事件

  • TextView控件activity_button.xml,如下:
<TextViewandroid:id="@+id/tv_1"...
/>
  • 在Java中获取控件,并设置点击事件ButtonActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import android.view.View;public class ButtonActivity extends AppCompatActivity {private TextView mTv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// tv_1的点击事件mTv1 = (TextView) findViewById(R.id.tv_1);mTv1.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v) {Toast.makeText(ButtonActivity.this, "TextView被点击", Toast.LENGTH_SHORT).show();}})}
}

2.4 EditText(输入控件)

  • 常用属性
  • 监听事件
  • 制作登录界面

2.4.1 加一个跳转页面的按钮

  • 按钮样式: activity_main.xml
<Buttonandroid:id="@+id/btn_edittext"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="EditText"android:textAllCaps="false"/>
  • 按钮的点击事件: MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.context.Intent;
import android.widget.Button;
import android.view.View;public class MainActivity extends AppCompatActivity {// 声明buttonprivate Button mBtnEditText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 找到 btn_edittextmBtnEditText = (Button) findViewById(R.id.btn_edittext);mBtnEditText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 跳转到 EditText 界面// 这里先假设有 EditTextActivityIntent intent = new Intent(MainActivity.this, EditTextActivity.class);startActivity(intent);}});}
}
  • 按钮的活动页面: activity_edit_text.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android/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"android:padding="15dp"><EditTextandroid:id="@+id/et_1"android:layout_width="match_parent"android:layout_height="50dp"android:textSize="16sp"android:textColor="#ffad33"android:hint="用户名"/><EditTextandroid:id="@+id/et_2"android:layout_width="match_parent"android:layout_height="50dp"android:layout_below="@id/et_1"android:hint="密码"android:inputType="textPassword"android:layout_marginTop="5dp"/>
</RelativeLayout>
  • 给用户名输入框activity_edit_text.xml加样式
  • 输入控件如下
<EditTextandroid:id="@+id/et_1"...android:background="@drawable/bg_username"
/>
  • 在res/drawable -> New -> Drawable resource file -> bg_username.xml(shape)
  • 写入形状如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><strokeandroid:width="1dp"andorid:color="#999999" /><cornersandroid:radius="5dp"/>

Android Studio --- [学习笔记]Button、TextView、EditText相关推荐

  1. Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

    说明 源代码 在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP 接上一篇: Android Studio - > [学习笔记]Button. ...

  2. 安卓开发Android studio学习笔记12:读取解析XML(案例演示)

    Android studio学习笔记 第一步:配置Student.XML 第二步:配置activity_main.xml 第三步:配置student.xml 第四步:配置Student用户类 第五步: ...

  3. Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView

    说明 这篇主要接上一篇Android Studio - > [学习笔记]RadioButton.CheckBox.ImageView.ListView.TCP的三次握手 对上面回答的细解,并用J ...

  4. Android Studio学习笔记(3)--------解决Android Studio模拟器VT-x is disabled的问题

    解决VT-x is disabled的问题 Android studio启动模拟器时出现"Intel HAXM is required to run this AVD,VT-x is dis ...

  5. Android Studio学习笔记

    安卓程序学习Day1,特此记录 activity.xml写UI框架 main.Activity.java写业务代码 java文件调用流程 1初始化 2绑定事件id 3自定义动作

  6. 弹窗与Log信息打印_Android Studio学习笔记(3)

    Android Studio学习笔记3 1.弹窗·Toast类 2.Log打印信息·Log类 对类的一些小理解: 1.弹窗·Toast类 (1)MainActivity.java文件里的onCreat ...

  7. Android Studio学习记录之简单的页面切换及宫格菜单

    Android Studio学习记录之简单的页面切换及宫格菜单 之前上课听老师讲的一些东西自己其实并没有消化,今天把不懂的都去网上搜了一下,有了一种恍然大悟的感觉,包括很多方方面面的东西.有些东西听说 ...

  8. 疯狂Android讲义 - 学习笔记(二)

    疯狂Android讲义 - 学习笔记(二) Android应用的用户界面编程 2.1 界面编程与视图(View)组件 Android应用的绝大部分UI组件放在android.widget.androi ...

  9. Android动画学习笔记

    Android实战经验之图像处理及特效处理的集锦 https://www.oschina.net/question/231733_44154 Android动画学习笔记 3.0以前,android支持 ...

最新文章

  1. 《App架构师实践指南》:移动开发的进阶指南
  2. TCGAbiolinks包下载TCGA数据
  3. 鸿蒙系统的功能如何,华为鸿蒙系统发布会,这个功能怎么那么像小米MIUI的
  4. 《你必须知道的495个C语言问题》知识笔记及补充
  5. 聊聊storm supervisor的启动
  6. 【杂谈】GAN对人脸图像算法产生了哪些影响?
  7. VTK:图片之ImageAnisotropicDiffusion2D
  8. python xlutils函数,python3:xlrd、xlwt、xlutils处理excel文件
  9. SQL SERVER日期函数详细用法
  10. JAVA:jar包下载地址大全
  11. 又出现*_limited.sof的问题了,还有另一个奇怪的现象!
  12. [NIO]dawn之Task具体解释
  13. Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决(补充说明)
  14. Cisco.Packet.Tracer思科模拟器练习题
  15. python输入输出字符图形_【Python教程】图片转字符画
  16. 电子凸轮追剪曲线生成算法 理解后可转成其他品牌PLC或任何一种编程语言
  17. 考研——生命轨迹中一段无法抹去的铿锵岁月
  18. python异步查询数据库_Python的Tornado框架实现异步非阻塞访问数据库的示例
  19. 关于雷蛇耳机麦克风突然失灵
  20. html 如何去掉超链接下的下划线

热门文章

  1. VC 2010的MFC函数,CMFCVisualManager::GetInstance()可能导致内存泄露
  2. Java面向对象入门
  3. VC动态链接数据库类ADOConn
  4. php hex2bin nodejs,Nodejs Serialport文档翻译
  5. python list转换成树形结构_python递归查询菜单并转换成json实例
  6. 服务器用户配置文件在哪里找,管理远程桌面服务的用户配置文件
  7. php截取字符串函数 左右,php截取中文字符串函数的技巧
  8. Faster R-CNN的安装及测试(Python版本和Matlab版本)
  9. 听技术播客:一边学Python编程一边学英语
  10. IDEA系列(四)一部署war 和 war exploded的区别