Android Studio --- [学习笔记]Button、TextView、EditText

说明

  • 源代码
  • 为了更全面的了解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"/>

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

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

相关文章

BZOJ2154: Crash的数字表格 BZOJ2693: jzptab

【传送门&#xff1a;BZOJ2154&BZOJ2693】 简要题意&#xff1a; 给出n,m&#xff0c;求$\sum_{i1}^{n}\sum_{j1}^{m}LCM(i,j)$ 题解&#xff1a; 莫比乌斯反演&#xff08;因为BZOJ2693是多组数据&#xff0c;数据强一点&#xff0c;所以代码用BZOJ2693的&#xff09; 设n…

对于数据库表排他更新的理解

1. 首先任何应用程序都只能有一个服务端&#xff0c;服务端共享数据给多个客户端访问。 (ア) 客户端从服务端取得相应的数据。 (イ) 或者更新、删除服务端的内容。 2. 当客户端A进入服务端方法更新数据库&#xff0c;服务端方法将被锁定。其它客户端在访问该方法时&#xff0c…

Angular 路由守卫

1. 路由 Angular路由: 可以控制页面跳转&#xff1b;可以在多视图间切换&#xff1b; 2. 路由守卫 Angular路由守卫&#xff1a; 在进入或离开某路由时&#xff0c;用于判断是否可以离开、进入某路由&#xff1b;&#xff1b;&#xff1b; return true 代表可以进入当前路由&am…

Vue页面手动刷新,导航栏激活项还原到初始状态问题解决方案

场景描述&#xff1a;在页面中存在顶部导航和左侧导航&#xff0c;左侧导航和右侧内容区使用了命名视图实现&#xff0c;点击左侧导航的链接时&#xff0c;右侧内容区相应显示不同组件内容。问题&#xff1a;在当前链接手动刷新浏览器&#xff08;例如&#xff1a;浏览器地址为…

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

说明 源代码在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP接上一篇: Android Studio — > [学习笔记]Button、TextView、EditText 2.5 RadioButton 常用属性自定义样式监听事件 2.5.1 新建按钮,并跳转到相应的活动页面 1.…

洛谷3171 网络吞吐量(网络流)

t开成n结果cur赋值的时候也只赋值到t令人智熄 【题目分析】 好吧我承认这个错误真的呵呵。。。。。。。。 题目有那~~~~~么长&#xff0c;然后画画图这道题就基本看出正解了&#xff0c;再一看数据范围&#xff0c;n<500简直良心&#xff0c;好了&#xff0c;网络流没得跑了…

DIV+CSS布局的优势和弊端

DIVCSS的优势1、符合W3C标准。这保证您的网站不会因为将来网络应用的升级而被淘汰。2、对浏览者和浏览器更具亲和力。由于CSS富含丰富的样式&#xff0c;使页面更加灵活性&#xff0c;它可以根据不同的浏览器&#xff0c;而达到显示效果的统一和不变形。这样就支持浏览器的向后…

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

说明 这篇主要接上一篇Android Studio — > [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手对上面回答的细解,并用JS伪代码,对TCP三次握手和四次挥手的简单实现.Android的基本了解到此篇结束,后续会根据具体情况深度学习. 2.y TCP的三次握手和四次挥…

MySQL中varchar最大长度是多少

一. varchar存储规则&#xff1a; 4.0版本以下&#xff0c;varchar(20)&#xff0c;指的是20字节&#xff0c;如果存放UTF8汉字时&#xff0c;只能存6个&#xff08;每个汉字3字节&#xff09; 5.0版本以上&#xff0c;varchar(20)&#xff0c;指的是20字符&#xff0c;无论存放…

bzoj 1232: [Usaco2008Nov]安慰奶牛cheer【最小生成树】

有趣 每条边在算答案的时候被算了二倍的边权值加上两个端点的权值&#xff0c;然后睡觉点额外加一次 所以可以用这个权做MST&#xff0c;然后加上点权最小的点 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N1…

JavaScript --- [学习笔记]观察者模式 理解对象 工厂模式 构造函数模式

说明 本系列(JS基础梳理)为后面TCP的模拟实现做准备本篇的主要内容: 观察者模式、工厂模式、构造函数模式 和 对对象的理解 1. 观察者模式 参考JavaScript设计模式 1.1 消息注册方法 “将订阅者注册的消息推入到消息队列中” [算法思路] : 在推入到消息队列时,如果此消息…

java_day19_MVC和配置文件

简单的MVC设计 MVC的全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写&#xff0c;是一种软件设计典范。它是用一种业务逻辑、数据与界面显示分离的方法来组织代码&#xff0c;将众多的业务逻辑聚集到一个部件…

Problem I: 打印金字塔

#include<stdio.h> int main() {int n,i,j,k;scanf("%d",&n);for(i1;i<n;i){for(j1;j<n-i;j)printf(" ");for(k1;k<2*i-1;k)printf("*");printf("\n");}return 0; } HINT 用双重循环做&#xff0c;外循环代表行数&…

webpack --- 发布环境的配置 代码压缩 代码分类

说明 源代码本篇主要对发布环境的配置说明前面2点是对webpack的一个复习.第3点开始,逐步配置部署代码 1. Webpack发布的策略 2.1 在实际开发中,一般会有两套方案: 开发期间的项目:包含了测试文件、测试数据、开发工具、测试工具等相关配置,有利于项目的开发和测试,但是这些文…

salesforce lightning零基础学习(三) 表达式的!(绑定表达式)与 #(非绑定表达式)

在salesforce的classic中&#xff0c;我们使用{!expresion}在前台页面展示信息&#xff0c;在lightning中&#xff0c;上一篇我们也提及了&#xff0c;如果展示attribute的值&#xff0c;可以使用{!v.expresion}展示信息。 lightning在component中解析动态值的时候&#xff0c;…

sqlserver学习3---sql函数

一、SQL DML 和 DDL 可以把 SQL 分为两个部分&#xff1a;数据操作语言 (DML) 和 数据定义语言 (DDL)。 SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。 查询和更新指令构成了 SQL 的 DML 部分&#xff1a; SELECT - 从数据库…

JavaScript --- [学习笔记] 原型模式

说明 接JavaScript — > [学习笔记]观察者模式 & 理解对象 & 工厂模式 & 构造函数模式上一篇构造函数模式创建的实例,不同实例的同一个方法是不相等的,为了解决这个问题.出现了原型模式 1. 原型模式 具体做法是,不在构造函数中定义对象实例的信息,而是将这些…

网络协议各层概述

网络协议概述 OSI是一个开放性的通信系统互连参考模型&#xff0c;他是一个定义得非常好的协议规范。OSI模型有7层结构&#xff0c;每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层&#xff1b; 其中高层&…

A start job is running for Raise network interface(5min 13s )问题解决方法

命令&#xff1a;sudo vim /etc/systemd/system/network-online.target.wants/networking.service将里面的TimeoutStartSec5min 修改为TimeoutStartSec2sec 然后重启系统&#xff0c;就可以生效了&#xff0c;开机速度很快 转载于:https://www.cnblogs.com/sea-stream/p/98615…

javascript --- 实现对象的深拷贝

浅拷贝和深拷贝 浅拷贝: 只拷贝一层.当对象是复杂数据类型(Object、 Array)时,只拷贝引用深拷贝: 多层拷贝.复杂数据类型,会重新分配内存空间. 实现浅拷贝的2种方法 使用for ... in 实现 var obj {name: marron,age: 18,msg: {sex: "1" } } var o {}; for(let …