Android应用开发

日志信息

  • Log.e:表示错误信息,比如可能导致程序崩溃的异常。

  • Log.w:表示警告信息。

  • Log.i:表示一般消息。

  • Log.d:表示调试信息,可把程序运行时的变量值打印出来,方便跟踪调试。

  • Log.v:表示冗余信息。

项目工程结构

清单文件文件:app/src/main/AndroidManifests.xml

android:allowBackup="true"  是否允许备份
android:icon="@mipmap/ic_launcher"  应用图标
android:label="@string/app_name"  应用名称
android:roundIcon="@mipmap/ic_launcher_round"  应用圆角图标
android:supportsRtl="true"  
android:theme="@style/Theme.Demo01"  应用主题

控件

字体大小使用:sp,控件尺寸使用:dp

简单控件

TextView

<TextView
        android:id="@+id/tv"
        android:textColor="@color/tv_text_color" //字体颜色
        android:textStyle="bold" //字体样式
        android:textSize="30sp" //字体大小(一般使用sp作为单位)
        android:background="@color/tv_background_color" //背景色
        android:layout_width="match_parent" //控件尺寸
        android:layout_height="300dp"
        android:gravity="center_vertical" //字体分布方式
        android:text="@string/tv_content" //文本
        //文字跑马灯显示
        android:singleLine="true" //文本单行显示
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:clickable="true" //可点击
        //文字的阴影
        android:shadowColor="@color/red"
        android:shadowRadius="3.0"
        android:shadowDx="10.0"
        android:shadowDy="10.0">
        <requestFocus /> //自动获取焦点
</TextView>

Button

<Button
        android:id="@+id/btn"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:background="@drawable/btn_selector"
        android:backgroundTint="@color/btn_color_selector"
        android:onClick="" //定义点击函数
        android:text="@string/btn_content" />
Button btn = findViewById(R.id.btn);
//绑定按钮点击回调事件函数
//单击事件
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "onClick");
    }
});
//长按事件
btn.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        Log.d(TAG, "onLongClick");
        return false;  
        //当长按按钮后如果返回值是false则会再调用onClick()方法,如果返回值是true则不会
    }
});
//触摸事件
btn.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        Log.d(TAG, "onTouch: " + event.getAction());
        return false;
    }
});

EditText

<EditText
        android:id="@+id/et"
        android:hint="请输入用户名" //提示文本
        android:drawableLeft="@drawable/baseline_person_24"  //左侧icon
        android:drawablePadding="10dp" //与左侧icon的距离
        android:background="#00ffffff" //背景色(透明)
        android:textColorHint="#AFB8BF" //提示文本的颜色
        android:inputType="number" //输入文本的类型(text|textPassword)
        android:layout_width="250dp"
        android:layout_height="80dp" />

ImageView

<ImageView
        android:src="@drawable/test1"
        android:scaleType="matrix"
        android:layout_width="200dp"
        android:layout_height="200dp" />
<ImageView
        android:maxHeight="200dp" //设置ImageView组件的最大长宽,并自动拟合图片的尺寸
        android:maxWidth="200dp"
        android:adjustViewBounds="true"
        android:src="@drawable/test1" //图片资源名称(放在drawble文件夹中)
		android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

android:scaleType的取值:

  • fitXY:拉伸填充
  • fitCenter:等比例放缩至长短边契合

ProgressBar

圆形进度条

<ProgressBar
        android:id="@+id/pb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
pb.setVisibility(View.VISIBLE);  //设置进度条的可见性(可见)
pb.setVisibility(View.GONE);  //设置进度条的可见性(不可见)

条形进度条

<!-- 长条形进度 -->
<ProgressBar
        android:id="@+id/pb2"
        style="?android:attr/progressBarStyleHorizontal"  //设置样式为长条形进度条
        android:max="100"  //进度条对应的最大值
        android:layout_width="300dp"  //进度条的长度
        android:layout_height="wrap_content" />
int progress = pb2.getProgress();  //获取当前进度数值
pb2.setProgress();  //设置当前进度数值

Notification

软件通知

字体大小

单位

px: 它是手机屏幕的最小显示单位,与设备的显示屏有关。
dp: 它是与设备无关的显示单位,只与屏幕的尺寸有关。
sp: 它专门用来设置字体大小,在系统设置中可以调整字体大小。(常使用这个单位)

density:像素密度(1个dp对应几个px)

dpi:每英寸距离中的像素数量(通过求屏幕对 角线上的像素数量除以屏幕尺寸)

dip\(px=\frac{dip\cdot dpi}{160}\)

使用代码设置

在代码中获取View控件

View view = findViewById(R.id.xxx)

view.setText(xxx):设置文本内容

view.setTextColor(Color.xxx):设置文本颜色

view.setBackgroundColor(Color.xxx):设置背景颜色

TextView, Button, ImageView等控件都是继承自View

在代码中获取布局组件

ViewGroup.LayoutParams params = view.getLayoutParams();  //获取布局组件
params.width = xxx;  //设置视图的宽度
params.height = xxx;  //设置视图的高度
//获取屏幕的像素密度从而进行单位转换
public class Utils {
    public static int dp2px(Context cxt, float dpValue) {
        float scale = cxt.getResources().getDisplayMetrics().density;
        return Math.round(dpValue * scale);
    }
}

Kotlin语法

输入/输出

print()

println():末尾有一个换行符

变量类型

变量声明

  1. 只能读的变量(read-only variable)需要使用关键字val,只能被赋值1次

    val a: Int = 1 // 直接赋值
    val b = 2 // 自动推测出是Int类型
    val c: Int // 当没有赋初始值时,需要声明类型
    c = 3 // 这里是推迟赋值
    
  2. 可以多次赋值的变量用关键字var

    var x = 5 // 自动推测出是Int型
    x += 1
    
    val PI = 3.14
    var x = 0
    fun incrementX() {
    	x += 1
    }
    

基本数据类型

Category Basic types
Integers Byte, Short, Int, Long
Unsigned integers UByte, UShort, UInt, ULong
Floating-point numbers Float, Double
Booleans Boolean
Characters Char
Strings String

String类型

  1. 字符串格式化(模板字符串)

    “xxx$var1xxx${some_expression}”

集合

  1. List

    val li = listOf[<Type>](item1, item2, ...):声明只读数组

    val li = Arrays.asList(item1, item2, ...)

  2. Map

    val mp = mapOf(k1 to v1, k2 to v2, xxx to xxx, ...)

遍历范围

for (i in 1..10) {
    //[1, 10]
}
for (i in 1 until 10 [step 1]) {
    //[1, 10)***
}
for (i in 10 downTo 0 [step 1]) {
    //[10, 0]
}

filter过滤列表:

val li = listOf(...)
li.filter(i -> {some function ...})
li.filter {some function with `it`} //it就是li中的项,通过处理it进行过滤

特殊关键字

when

when (var) {
    val1 -> {expression1}
    val2 -> {expression2}
    val3 -> {expression3}
    else -> {expression4}
}

class Runoob {
    //类的属性定义
    [private/public] val name: String = ……  //不可变属性(未声明变量类型时默认为public)
    var url: String = ……  //可变属性
    var city: String = ……
    fun method1() {
        
    }
}

构造函数

class Person(val name: String) {  //主构造函数
    constructor (name: String, age:Int) : this(name) {  //次构造函数
        // 初始化...
    }
}

完整的属性定义

class Person {
    var lastName: String = "zhang"
        get() = field.toUpperCase()  //field表示当前这个变量
        set
    var heiht: Float = 145.4f
        private set
}

Lambda表达式

val lambda = {
    var1: Int, var2: Int -> var1 + var2
}

JNI

Java Native Interface(能够在Java代码中通过JNI层调用原生C/C++代码)

posted @ 2024-07-01 16:00  MaximeSHE  阅读(0)  评论(0编辑  收藏  举报