乙巳🐍年

acc8226 的博客

View

View.getVisibility()

很显然,我们可以用 View.getVisibility() 来检查一个它是否处于View.VISIBLE状态。这是最基本的检查,如果连这个方法得到的返回值都是View.INVISIBLE或者View.GONE 的话,那么它对用户肯定是不可见的。

View.isShown()

这个方法相当于对 View 的所有祖先调用 getVisibility 方法。

布局管理器 ViewGroup

常用三大布局

  1. 帧布局 FrameLayout - 用于单个子视图。
  2. 线性布局 LinearLayout - 用于横向或竖向依次摆放视图的布局。
  3. 相对布局 RelativeLayout - 用于定义与父视图和兄弟视图的相对位置的布局。

绝对布局(已淘汰)

这些布局管理器都扩展了 View Group 类(它本身是 View 类的子类),该类专门设计为包含和布置多个子视图。这意味着,如果您特别有冒险精神,完全可以创建自己的布局管理器。

ScrollView

public class ScrollView
extends FrameLayout
java.lang.Object
android.view.View
android.view.ViewGroup
android.widget.FrameLayout
android.widget.ScrollView

它是 FrameLayout 类的子类(这意味着您应该只放入一个子视图,该子项包含要滚动的完整内容),允许用户垂直滚动,来展示比屏幕可显示范围更多的内容。ScrollView 通常包含一个垂直方向的 LinearLayout。

ListView

1
2
3
4
5
6
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView<android.widget.ListAdapter>
↳ android.widget.AbsListView
↳ android.widget.ListView

A view that shows items in a vertically scrolling list. The items come from the ListAdapter associated with this view.
See the List View guide.

ListView 是为显示较多项列表而优化的特殊控件。它能非常高效地创建、回收和显示视图,而且经过优化,能非常顺畅地滚动。

在自定义 listview 的 item 的布局的时候, 通常加上最小高度的属性, 防止高度过小导致用户点击不到。 android:minHeight="?android:attr/listPreferredItemHeight"

而且还常常加上垂直居中 android:gravity="center_vertical"

常用控件

edittext 不写的话 getText 不为null, 然后得到的是空字符串 “”, 然后长度为0

EditText 主题一般会自带背景,如果需要去掉的话, android:background=“@null”

Android Button 默认样式高度问题, 去掉可用android:minHeight="0px"

代码设置textview 字体颜色

1
2
3
4
5
6
7
8
9
setTextColor(0xFF0000FF);
//0xFF0000FF 是 int 类型的数据,分组一下 0x|FF|0000FF,0x 是代表颜色整 数的标记,ff是表示透明度,0000FF表示颜色,注意:这里 0xFF0000FF 必须是8个的颜色表示,不接受 0000FF 这种 6 个的颜色表示。
setTextColor(Color.rgb(255, 255, 255));
setTextColor(Color.parseColor("#FFFFFF"));
//还有就是使用资源文件进行设置
setTextColor(this.getResources().getColor(R.color.blue));
//通过获得资源文件进行设置。根据不同的情况R.color.blue也可以是R.string.blue或者
//另外还可以使用系统自带的颜色类
setTextColor(android.graphics.Color.BLUE);

TextView按下和抬起时的颜色变换

<item android:drawable="@drawable/xxx" android:state_enabled="false"/>改成<item android:color="#f1f1f1" android:state_enabled="false"/>即可

用法: 和按钮类似, 按钮改变的是android:background, 而这个改变的是android:textColor

读取 xml 中读取尺寸单位的三个方法

工作上碰到需要从 xml 中读取尺寸的问题。发现 getResources()下有3个获取方法。

  • getDimension()方法,返回类型是float,他是没有做任何处理的数值。
  • getDimensionPixelOffset(),返回类型int,他会把计算结果直接强转成int型。
  • getDimensionPixelSize(),返回类型 int,他会把计算结果四舍五入。

举个例子就很好明白了,如果getDimension()方法得到的数值是44.5,那么getDimensionPixelOffset()得到的就是44,getDimensionPixelSize()就是45.

android中getWidth()和getMeasuredWidth()之间的区别

getMeasuredWidth()获取的是 view 原始的大小,也就是这个 view 在XML文件中配置或者是代码中设置的大小。
getWidth()获取的是这个 view 最终显示的大小,这个大小有可能等于原始的大小也有可能不等于原始大小。

意图是安卓中重要核心组件之一。

Intent 是一个消息传递对象,您可以使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:

  • 启动 Activity
  • 启动服务
  • 传递广播

Intent 分为两种类型:

  • 显式 Intent:按名称(完全限定类名)指定要启动的组件。 通常,您会在自己的应用中使用显式 Intent 来启动组件,这是因为您知道要启动的 Activity 或服务的类名。例如,启动新 Activity 以响应用户操作,或者启动服务以在后台下载文件。
  • 隐式 Intent :不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。 例如,如需在地图上向用户显示位置,则可以使用隐式 Intent,请求另一具有此功能的应用在地图上显示指定的位置。
阅读全文 »

异常的层次

异常指的是程序运行时出现的不正常情况。程序运行过程中难免会发生异常,发生异常并不可怕,程序员应该考虑到有可能发生这些异常,编程时应能正确的处理异常,使成为健壮的程序。

异常是相对于 return 的一种退出机制,可以由系统触发,也可以由程序通过 throw 语句触发,异常可以通过 try/catch 语句进行捕获并处理,如果没有捕获,则会导致程序退出并输出异常栈信息。

Java 的异常类是处理运行时的特殊类,每一种异常对应一种特定的运行错误。所有 Java 异常类都是系统类库 Exception 类的子类。

异常类继承层次图

Throwable 类

所有的异常类都直接或间接地继承于 java.lang.Throwable 类,在 Throwable 类有几个非常重要的方法:

  • String getMessage():获得发生异常的详细消息。
  • void printStackTrace():打印异常堆栈跟踪信息。
  • void printStackTrace(PrintStream s) 通常用该方法将异常内容保存在日志文件中,以便查阅。
  • String toString():获得获取异常类名和异常信息的描述。
阅读全文 »

枚举概述

枚举用来管理一组相关常量的集合,使用枚举可以提高程序的可读性,使代码更清晰且更易于维护。

在 Java 5 之前没有提供枚举类型,可以通过声明静态常量(final static 变量)替代枚举常量。
通常在接口中声明一组静态常量,当然也可以在一般类中声明一组静态常量。这些常量往往都是 int 类型,这是为了以后方便使用 switch 语句进行判断。

1
2
3
4
5
6
7
public interface WeekDays {
// 枚举常量列表
int MONDAY = 0; // 星期一
int TUESDAY = 1; // 星期二
int WEDNESDAY = 2; // 星期三
... ...
}
阅读全文 »

抽象类

在 Java 中,抽象类是一种特殊的类,它不能被直接实例化,只能被其他类继承。抽象类通常用于定义一些抽象的方法和属性,这些方法和属性可能在子类中有不同的实现。

抽象类的主要目的是提供一个公共的接口,让子类可以根据自己的需求进行扩展和实现。抽象类中的抽象方法没有具体的实现,只包含方法的签名,子类就知道它必须要实现该方法,而不可能忽略,若忽略 Java 编译器会提示错误。

抽象类声明和实现

在 Java 中抽象类和抽象方法的修饰符是 abstract,注意抽象方法中只有方法的声明,没有方法的实现。

  • 抽象类不能被实例化,只有具体类才能被实例化;
  • 抽象类可以拥有默认的构造函数, 供子类实例化调用, 用于完成子类构建对象的一些公共任务;
  • 抽象类中可以包含具体方法和抽象方法;
  • 非抽象类(具体类) 若继承抽象类必须重写所有抽象方法。
1
2
3
4
5
public abstract class 类名称 {
member var;
method(){…} // 一般方法
abstract method()// 抽象方法, 抽象方法在后直接跟分号
}

普通类加上 abstract 关键字就变成了抽象类。一但类中包含有抽象方法的类必须定义为抽象类或者接口,否则编译时会提示 The type XXX must be an abstract class to define abstract methods

接口

比抽象类更加抽象的是接口,在接口中所有的方法都会被 public 和 abstract 修饰。

  • Java 中不支持多继承,而是通过接口实现比多重继承更强的功能,java 通过接口可以使出于不同层次,甚至不相关的类具有相同的行为。
  • 接口可以认为是特殊的抽象类,不能用于直接创建对象。接口的作用在于规定一些功能框架,具体功能的实现则通过该接口约束的类完成。

接口的定义:一般由常量和抽象方法组成

1
2
3
4
[public] interface 接口名 [extends 父接口名列表 ] {
[public] [static] [final] 域类型 域名 = 常量值 ;
[public] [abstract] 返回值 方法名(参数列表) [throw 异常列表];
}
阅读全文 »
0%