Android 开发学习

Posted IT_Holmes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 开发学习相关的知识,希望对你有一定的参考价值。

文章目录

1. android 安装


之前,2015年之前有一些用eclipse来开发android项目,后续就过渡到了android studio上面开发。

去官方下载对应操作系统的android studio。

安装android studio很简单,傻瓜式安装就行。

启动android studio的时候,注意:

  • 一般选择没有配置。

  • 下载的时候最好以默认的方式来下载:

2. 创建第一个Android项目


直接new 一个空白视图的项目就可:


layout下面是能够看到各种页面布局的:


样式布局:

3. 什么是Gradle?


Gradle是一个开源的自动构建工具,可以作为android studio工程的依赖管理和打包工具,包括三方库和jar包的依赖和链接, java和res等资源的编译和打包。

gradle 介绍
1、在gradle之前,android的构建工具是ant,之前eclipse用的就是ant
2、gradle脚本不使用传统的xml文件,而是一种基于Groovy的动态DSL,而Groovy语言是一种基于jvm的动态语言,可以像写脚本一样去写项目构建规则
3、Android Gradle Plugin Version和Gradle Version是不同的东西,前者为针对Android写的gradle插件,后者为前者的基础。类似于java插件和java的关系
4、gradle版本设置:File-Project Structure-Project ,可以设置Android Gradle Plugin Version和Gradle Version版本
5、gradle-wrapper.properties中distributionUrl设置的未Gradle版本,build.gradle中classpatch设置的未android gradle插件
dependencies
   classpath 'com.android.tools.build:gradle:4.0.1'

gradle目录结构:

android project
├── gradlew 用于mac上
├── gradlew.bat 用于window上
└── gradle/wrapper/ gradle运行环境,不用在电脑上安装gradle
├── gradle-wrapper.jar
└── gradle-wrapper.properties 用于设置gradle版本
├── build.gradle 工程配置
├── settings.gradle 用于设置编译哪些模块
└── app app模块
└── build.gradle app配置

Gradle的Projects和tasks的区分:

Projects和Tasks是Gradle中最重要的两个概念。

任何一个Gradle构建都是由一个或多个projects组成的,projects其实就是Idea、AndroidStudio中的Module

tasks顾名思义就是任务,它是Gradle中的原子性操作,如编译、打包、生成javadoc等,一个project中会有多个tasks

该小节借鉴地址:https://blog.csdn.net/wangwei6227/article/details/124272527


项目中的gradle.build作用:

4. 运行第一个Android程序


一般两种方式:

  • create device 创建一个虚拟设备 。

  • 通过usb,打开手机开发者模式,直接进行调试安装。

提示:如何将模拟器保存到其他磁盘中,https://blog.csdn.net/Q316510202/article/details/117398569

5. Android架构 介绍


整体Android架构介绍:https://www.bilibili.com/video/BV1Jb4y187C4/?p=7&spm_id_from=pageDriver&vd_source=d7265e3a10d4b237f4ffad55806bd452

res目录下的介绍:

  • drawable开头的目录:一般用来存放图片的。
  • layout开头的目录:一般用来存放布局文件。
  • mipmap开头的目录:一般用来存放应用图标的。
  • values开头的目录:一般存放颜色colors,字符串strings,样式themes。

6. 控件 之 textView(文本)

6.1 textView 基础语法


LinearLayout可以看作一个容器,容器中存在很多的控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>

查看textView一些枚举:


textView属性介绍:

  • layout_width:宽度
  • layout_height:高度
  • id:为TextView设置一个组件id,该id一般是让java代码方便获取该控件的

  • text:设置文本内容。
  • textColor:设置文本字体颜色。
  • textStyle:设置字体风格(normal无效果,bold加粗,italic斜体),同样忘记了,直接ctrl + 鼠标左键可以查看。
  • textSize:字体大小,单位一般用sp。
  • background:控件的背景颜色。
  • gravity:设置控件中内容的对齐方向。

可以在values目录下面的几个文件中声明一些字符串,颜色等:

6.2 带阴影的textView


6.3 跑马灯效果的 textView



聚焦实现方式以下两种方式:

方式一:自定义实现MyTextView,通过isFocused来操作。

自定义个一个控件MyTextView :

package com.example.demo01;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

import androidx.annotation.Nullable;

// 继承TextView的所有信息。
public class MyTextView extends TextView 

    public MyTextView(Context context) 
        super(context);
    

    public MyTextView(Context context, @Nullable AttributeSet attrs) 
        super(context, attrs);
    

    public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 
        super(context, attrs, defStyleAttr);
    

    // 自定义一个MyTextView控件,触发焦点
    @Override
    public boolean isFocused() 
        return true;
    

之后在LinearLayout容器中,声明自定义控件:

<?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">

    <com.example.demo01.MyTextView
        android:id="@+id/tv_one"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#FF000000"
        android:gravity="center"
        android:shadowColor="@color/red"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:shadowRadius="3.0"
        android:text="@string/tv_one"
        android:textColor="@color/cardview_dark_background"
        android:textStyle="bold"

 		<!-- 单行走马灯,但是要聚焦后! -->
        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        >
	
    </com.example.demo01.MyTextView>
</LinearLayout>

方式二:通过使用TextView控件的<requestFocus/>。

<?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:id="@+id/tv_one"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#FF000000"
        android:gravity="center"
        android:shadowColor="@color/red"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:shadowRadius="3.0"
        android:text="@string/tv_one"
        android:textColor="@color/cardview_dark_background"
        android:textStyle="bold"

        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        >
        <requestFocus/>
    </TextView>
</LinearLayout>

以上两种方式,在虚拟器中运行都可以实现一个走马灯效果的控件就实现了。

7. 控件 之 Butto(按钮)

7.1 Button 的 基本属性 和 选择器使用


ctrl + 鼠标右键,查看一下Button源码:


AS新版本解决button背景问题:

  • 旧版本button背景配置后没有问题,但是新版本需要修改一个style样式。

Vector Assert 导入图标信息:


Button控件常用属性:

  • background:背景
  • backgroundTint:背景色
  • foreground:前景色


定义一个drawable选择器:(Vector Assert 导入图标信息)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 按下的时候是这个图标 -->
    <item
        android:drawable="@drawable/ic_baseline_60fps_select_24"
        android:state_pressed="true" />
    <!-- 默认是如下图标 -->
    <item
        android:drawable="@drawable/ic_baseline_accessibility_new_24"
        />

</selector>

再定义一个color选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 按下的时候是这个颜色 -->
    <item android:color="#FFFF0000" android:state_pressed="true"/>
    <!-- 默认是这个颜色 -->
    <item android:color="#FFFFFF00"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >


    <Button
        android:text="我是按钮"
        android:layout_width="200dp"
        android:layout_height="200dp" 
        
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/color_selector"
        android:foreground="#ff00ff00"
	/>
	<!-- 这样通过选择器来定位drawable和color -->
</LinearLayout>

StateListDrawable:

7.2 Button 之 事件处理


三种事件:点击事件、长按事件、触摸事件。

package com.example.demo01;

import androidx.appcompat.app.AppCompatActivity;

import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity 

    public static final String TAG = "lec";

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        Button btn = findViewById(R.id.btn);
        // 点击事件
        btn.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Log.e(TAG,"onclick:");
            
        );
        // 长按事件
        btn.setOnLongClickListener(new View.OnLongClickListener() 
            @Override
            public boolean onLongClick(View view) 
                Log.e(TAG,"onclick:");
                return false;
                /**
                 * 当return true时,点击事件onClick就不会执行!
                 */
            
        );
        // 触摸事件
        btn.setOnTouchListener(new View.OnTouchListener() 
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) 
                /**
                 * 通过motionEvent.getAction()可以获取状态
                 *  ACTION_DOWN:0
                 *  ACTION_UP:1
                 *  ACTION_MOVE:2
                 */
                Log.e(TAG,"onclick:" + motionEvent.getAction());

                return false;
                /**
                 * 当return true时,长按事件onLongClick和点击事件onClick都不会执行。
                 * 这个过程称为事件被onTouch消费了!
                 * 其实,就是告诉系统不要去执行长按事件和点击事件了。
                 */
            
        );
    

    // 也可以通过走自定义方法的形式
    public void myClickEvent(View view) 
        Log.e(TAG,"onclick:");
    


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <Button
        android:text="我是按钮"
        android:id="@+id/btn"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/color_selector"
        android:foreground="#ff00ff00"
        android:layout_width="200dp"
        android:layout_height="200dp"
        
        android:onClick="myClickEvent"
        />
        <!-- 也可以通过这种onClick加指定方法名称的形式 -->
</LinearLayout>

8. 控件 之 EditText(编辑文本)


基本属性:

案例:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

    <EditText
        android:id="@+id/et01"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:hint="请输入用户名"
        android:textColorHint="#95a1aa"

        android:drawableLeft="@drawable/ic_baseline_accessibility_new_24"
        android:drawablePadding="20dp"

        android:paddingLeft="20dp"
        android:background="@color/red"
        android:inputType="phone"
    />
    <!-- drawableLeft属性:设置右侧图标,还有其他的drawable属性! -->
	<!-- drawablePadding属性:内部元素之间的间距。 -->
	<!-- padding、paddingLeft属性:设置整个元素与最外层的间距。 -->
	
    <EditText
        android:id="@+id/et02"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:hint="请输入密码"
        android:textColorHint="#95a1aa"
        android:inputType="textPassword"
        />

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取"
        />

</LinearLayout>

点击按钮获取的效果演示:

package com.example.demo01;

import androidx.appcompat.app.AppCompatActivity;

import android.nfc.Tag;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widgetAndroid 相对布局 各控件指之间的间距怎么设置

Android PullToRefreshListView设置各个item之间的间距

Android 相对布局 各控件指之间的间距怎么设置

Android DJI Mobile-SDK 开发

巧用Drawable 实现Android UI 元素间距效果

巧用Drawable 实现Android UI 元素间距效果