老王讲IT:Android应用开发第一、二、三章

老王讲IT——第一、二、三章

Android Studio工程结构、控件

一、工程目录说明

每个App的工程结构都差不多,只要掌握了基本结构,后面开发起来就会得心应手。 1 工程目录说明 2 编译配置文件build.gradle 3 App运行配置AndroidManifest.xml 4 在代码中操纵控件

1.1 Android Studio的工程创建分两个层级:

第一个层级通过菜单File→New→New Project创建,这里的新项目是指新的工作空间,对应Eclipse的workspace。 第二个层级通过菜单File→New→New Module创建,这里的新模块是指一个单独的App工程,对应Eclipse的project。 第一次创建的app模块,下面有三个目录: manifests子目录,存放App的运行配置AndroidManifest.xml。 java子目录,存放的是App工程的代码文件。 res子目录,存放的是App工程的资源文件。

这个是Android的文件目录,里面有一个app文件包和Gradle Scripts文件包,

App

Java ------便于我们找到Main Activity类

res --------资源包

Gradle Scripts(固定脚本文件)

地路径、NDK的本地路径等。

1.2 project目录结构

project目录结构会经常使用,project目录和我们使用的 My Eclipse的相似,也会比较熟悉

接下来,我们对于目录的内容进行一一讲解:

文件作用
.gradle和.idea这两个目录下都是AS自动生成的一些文件,我们不需要关心,也不要去手动编辑;
app项目中的代码和资 文件都是放在这个文件下的,之后会对这个文件夹进行详解;
build这个文件夹也无需关心,放的都是编译自动生成的文件;
gradle这个目录下放置了gradle wrapper的配置文件,使用gradle wrapper的方式不需要提前将gradle下载好,而是会根据本地的情况自动决定是否要联网下载gradle;
.gitignore这个与版本控制有关,用来将指定的文件或目录排除在版本控制之外的;
build.gradle这是项目全局的gradle文件,通常也不需要改动,之后会详细介绍里面的内容;
gradle.properties这是全局gradle文件的配置文件;
gradlew和gradlew.bat用来在命令行界面中执行gradle,其中前者在linux和mac系统中使用,后者在windows中;
local.properties指定android SDK的路径;
settings.gradle指定项目中所有引入的模块,具体可看文件,通常模块的引入都是自动完成的,基本不需要手动处理;

1.2.1 探索最常用的project下的APP目录

build这个目录与外层的build目录类似,都是编译时自动生成的文件,我们不用管;
libs放置第三方jar包;
androidTest用来编写测试用例用来,进行一些自动化测试;
java放置所有的java逻辑代码;
res放置所有的资源文件(包含图片,字符串,布局等); 所有以drawable开头的都是用来放图片的; 所有以mipmap开头的都是用来放图标的; layout是来放布局文件的; value开头的是用来放字符串、颜色、样式等配置的;
AndroidManifest安卓项目的配置文件,非常重要,自大组件的注册,权限的声明都必须在这个文件中描述,之后的开发中,我们会经常用到这个文件;
Test编写单元测试的,也是自动化测试的一种,目前是用不到的;
.gitignore与外层的.gitignore一样,都是版本控制的;
app.imlIntellij IDEA自动生成的文件,我们不需要关心;
bulid.gradle这是app模块的gradle构建脚本,之后会详解;
1.2.2 res资源目录

目录资源类型
animator/用于定义属性动画的 XML 文件。
anim/用于定义渐变动画的 XML 文件。(属性动画也可保存在此目录中,但为了区分这两种类型,属性动画首选 animator/ 目录。)
color/用于定义颜色状态列表的 XML 文件。请参阅颜色状态列表资源
drawable/位图文件(.png、.9.png、.jpg、.gif)或编译为以下可绘制对象资源子类型的 XML 文件: 位图文件 九宫格(可调整大小的位图) 状态列表 形状 动画可绘制对象 其他可绘制对象 请参阅 Drawable 资源。
mipmap/适用于不同启动器图标密度的可绘制对象文件。如需了解有关使用 mipmap/ 文件夹管理启动器图标的详细信息,请参阅管理项目概览
layout/用于定义用户界面布局的 XML 文件。请参阅布局资源
menu/用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。请参阅菜单资源
raw/需以原始形式保存的任意文件。如要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。 但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录(而非 res/raw/)下。assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。
values/包含字符串、整型数和颜色等简单值的 XML 文件。 其他 res/ 子目录中的 XML 资源文件会根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件,<resource\s> 元素的每个子元素均会定义一个资源。例如,<string> 元素会创建 R.string 资源,<color> 元素会创建 R.color 资源。 由于每个资源均使用自己的 XML 元素进行定义,因此您可以随意命名文件,并在某个文件中放入不同的资源类型。但是,您可能需要将独特的资源类型放在不同的文件中,使其一目了然。例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定: arrays.xml:资源数组(类型数组)。 colors.xml:颜色值。 dimens.xml:尺寸值。 strings.xml:字符串值。 styles.xml:样式。 请参阅字符串资源、样式资源和更多资源类型。
xml/可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。
font/带有扩展名的字体文件(如 .ttf、.otf 或 .ttc),或包含 元素的 XML 文件。如需详细了解作为资源的字体,请参阅 XML 中的字体

二、TextView控件

1、常用基本控件设置

控件名备注
LinearLayout设置全局(也可以称为容器,而TextView是组件,每一个组件必须在容器之中)
layout_width设置宽度
layout_height设置高度
id设置id,想要调用可以在Java中调用Main Activity中调用 调用方法: TextView textView = findViewById(R.id.tv_one); textView.setText("Leo");
text设置文本 可以在res里面的String.xml中进行设置
textColor设置字体颜色
textSize设置字体大小
textStyle设置字体风格 bold加粗 italic斜体
background设置控件背景颜色
gravity设置控件内容对齐方向, textView中是文本 lmaseView中是图片等等

2、带阴影的TextView

控件名备注
shadowColor设置阴影颜色,需要和shadowRadius一起使用
shadowRadius设置阴影模糊程度,设置为0.1变成字体,建议设置为3.0
shadowDx设置水平偏移
shadowDy设置竖直偏移

3、显示跑马灯需要组件

控件备注
singleLine设置内容单行显示 设置值位true
focusable是否可以获取焦点 设置值位true
focusableInTouchMode用于控制视图在触摸下是否可以聚焦
ellipsize在这里可以省略文本 marquee跑马灯
marqueeRepeatLimit控制字幕动画重复的次数

4、案例跑马灯

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >
​
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200sp"
        android:id="@+id/tv_one"
        android:text="@string/tv_one"
        android:textColor="@color/black"
        android:textSize="25sp"
        android:textStyle="italic"
        android:gravity="center_vertical"
        android:shadowColor="@color/red"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        tools:ignore="MissingClass" />
<!-- <requestFocus/>获取焦点,现实跑马灯-->
</LinearLayout>

4.1、注意:

可能会出现没有获取到焦点,解决方法有三

方法一:

在TextView中添加

<requestFocus/>    #获取焦点,然后再看

方法二:

在TextView中添加

android:clickable="true"     #设置一个点击事件,获取焦点

方法三:

使用Java代码

#在main中的包中创建一个Java类
#名字为My_TextView
#然后继承TextView 随后导入TextView中的前三个方法
#以下为代码
package com.example.application0801_2;
​
​
import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;
​
import androidx.annotation.Nullable;
​
public class My_TextView extends TextView {
    public My_TextView(Context context) {
        super(context);
    }
​
    public My_TextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }
    
    public My_TextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    
    @Override
    public boolean isFocused() {
        return true;
    }
​
}
​
#创建完成之后返回acticity.xml
#将<TextView更改为
<com.example.application0801_2.TextView

三、Button控件

概述:

随着按钮的状态,去改变他的背景颜色,根据StateListDrawable来进行设置

1、StateListDrawable属性

StateListDrawable是Drawable资源的一种,可以根据不同的状态,设置不同的图片效果,关键节点<selector>,我们只需要将Button的background属性设置为该drawable资源即可轻松实现,按下按钮时不同的按钮颜色或背景

属性名备注
drawable引用的 Drawable位图
state_focused是否获得焦点
state__pressed控件是否被按下
state_enabled控件是否可用
state_selected控件是否被选择,针对有滚轮的情况
state_checked控件是否被勾选
state_checkable控件可否被勾选,eg:checkbox
state_window_focused是否获得面口焦点
state_active控件是否处于活动状态,egsliding Tab
state_single控件包含多个子控件时,确定是否只显示一个子控件
state_first控件包含多个子控件时,确定第一个子控件是否处于显示状态
state_middlle控件包含多个子控件时,确定中间一个子控件是否处于显示状态
state_last控件包含多个子控件时,确定最后一个子控件是否处于显示状态

然后我们经常使用的是前七八个,后面要使用的时候我们在仔细说

2、Button事件处理

在做以下三个事件之前先在Button组件里面设置id,然后在去Java类中调用这个id,使用id名调用实现的以下三中方法。、

Button bin = findViewById(R.id.btn);

2.1点击事件
bin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG, "onClick: " );
​
            }
        });

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

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

注意:

以上三个就是点击事件中的三个Java代码,我们可以启动模拟器在控制台叫它打印出来显示结果

E/led: onTouch: //这个是触摸事件
E/led: onLongClick: //这个是长按事件
E/led: onTouch: //这个是你按着鼠标乱懂得现象
E/led: onClick: //这个是你松开鼠标得现象

这样在控制台打印出来得东西显示不太明显,咱们可以去触摸事件中的MotionEvent motionEvent 中可以看到这三个

ACTION_DOWN = 0//出现这个是在你一开始得时候出现,也就是你在点击是出现得
ACTION_UP = 1;//第二个是在你关闭时出现
ACTION_MOVE = 2;//这个是在你长按鼠标触发得触摸事件
//这三个得值是可以打印出来得,我们只需要咋触摸事件中加入motionEvent.getAction()我们遍能在控制台看到
​

四、EditText控件

2.1主要属性

属性备注
android:hint输入提示
androlid=textColorHint输入提示文字的颜色
androld:inputType输入类到
androld:drawableXoocx在输入框的指定方位添加图片 比如说: 左面就在后面加left 右面就在后面加right
androld:drawablePadding设置图片与输入内容的间距 意思是:你在边框或者是旁边放入图片距离与提示字体的距离有关
androld:paddingXxxx设置内容与边框内容的距离
android:background背景色

2.2获取账号密码

实现用户在点击按钮的时候获取到账户名称和密码

activity.xml文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <EditText
        android:id="@+id/username"
        android:hint="请输入用户名"
        android:textColorHint="#95a1aa"
        android:inputType="phone"
        android:layout_width="200dp"
        android:layout_height="100dp"/>
    <EditText
        android:id="@+id/password"
        android:hint="请输入密码"
        android:textColorHint="#95a1aa"
        android:inputType="textPassword"
        android:drawableLeft="@drawable/ic_baseline_account_balance_24"
        android:drawablePadding="20dp"
        android:paddingLeft="20dp"
        android:background="@color/white"
        android:layout_width="200dp"
        android:layout_height="100dp"/>
    <Button
        android:text="获取用户名"
        android:id="@+id/Busername"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
MainActivity.java中的代码

public class MainActivity extends AppCompatActivity {
​
//    封装username  账户名称
    private EditText username;
//    封装password  账户密码
    private EditText password;
​
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
​
//        调用button的id,使我们用户输入的东西在进行点击事件的时候获取的用户名
        Button Busername = findViewById(R.id.Busername);
//        就是调用用户输入框的id,最后打印在控制台中
        username = findViewById(R.id.username);
//        调用密码的id,是我们在进行点击事件的时候能够获取到用户密码
        password = findViewById(R.id.password);
        //点击事件
        Busername.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
//               用text记录用户输入的名字
                String text = username.getText().toString();
//                记录用户输入的密码
                String mima = password.getText().toString();
//                在控制台答应用户输入的账号
                Log.e("欣知大数据", "用户输入账号: "+text+"\t用户输入密码"+mima);
​
​
            }
        });
​
    }
​
}

  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值