Android 控件开发笔记(一)

pic.png

1、 什么是Activity

  Activity是一个应用程序组件,为应用程序提供一个可视化的界面,用户通过此界面与应用程序交互。

2、 介绍一下Mainifest 、 MainActivity 、Layout

  • Mainifest.xml 应用程序的主配置文件

  • MainActivity 主界面

  • Layout 布局文件

3、 Activity和Layout之间的关系

Activity通过调用findViewById()函数,引用页面布局的控件,将Activity与控件联系起来,通常括号中的是(R.id.xxx),xxx为页面布局中定义的控件ID名。此时,我们还要解释一下R,R.java文件是由aapt工具根据应用中的资源文件来自动生成的,因此我们可以吧R.java看成Android应用的资源字典,aapt生成R.java文件的规则主要是两条:每类资源对应R类的一个内部类。比如,所有界面布局资源对应于layout内部类;每个具体的资源项对应于内部类的一个public static final int类型的Field,若界面布局中用到了ok,show两个标识符,则R.id类里就包含了这两个Field。随着我们不断地向Android项目中添加资源,R.java文件的内容也会越来越多。

Activity和View之间的关系

在Activity onCreate方法中初始化了View 的时候, 调用了View 的onFinishInflate
在执行完 Activity的 onResume 方法之后,才真正开始了View的绘制工作:onMeasure --> onSizeChanged --> onLayout --> onDrawonMeasure,onSizeChanged,onLayout,onDraw可能由于setVisible或onresume调用多次,而onAttachedToWindow与onDetachedFromWindow在创建与销毁view的过程中只会调用一次
Activity执行onDestroy后,View执行onDetackedFromWindow

View 的生命周期为:
[改变可见性] --> 构造View --> onFinishInflate --> onAttachedToWindow --> onMeasure --> onSizeChanged --> onLayout --> onDraw -->
onDetackedFromWindow

4、什么时候在Layout中更改属性?什么时候在代码中修改属性

Activity通过调用findViewById()函数,引用页面布局的控件并进行修改

textView = (TextView)findViewById(R.id.MainTextView);
textView.setTextColor(2);
textView.setText(R.string.specialName);
System.out.print("是否获取成功: " + textView+ "");

5、 什么是View

 在屏幕方块中显示的内容

6、 为View添加监听器

 监听器是一个对象,用于捕获View的状态,当View的状态发生更改时,可使用监听器对其进行相应的操作。同一个控件可以设置多种监听器,对不同状态进行捕获监听。

操作步骤:

/**
 * 1、布局文件中定义控件
 * 2、Activity中获取代表控件的对象 button = (Button)findViewById(R.id.button)
 * 3、定义一个类实现监听器接口,并重写其抽象方法  class ButtonListener implements View.OnClickListener  public void onClick
 */
class ButtonListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            //当控件被点击之后调用
            sum ++ ;
            System.out.print("当前点击次数为: " + sum);
        }
    }
    
 button = (Button)findViewById(R.id.button);
 buttonListener = new ButtonListener();
 button.setOnClickListener(buttonListener);

Layout与ViewGroup之间的关系

/**
 * Layout与ViewGroup之间的关系
 * - ViewGroup是一个容器,而这个容器是继承自View的
 * - ViewGroup是一个基类,并且是Layout和一些组件的基类
 * - Linear Layout 线性布局       Relative Layout 相对布局 开发中用的是最多的
 * - AdapterView(List View , Gird View) 已经封装好的布局视图
 */


/**
 * match_parent 会填满父控件   fill_parent 在SDK2.0以下需要使用,普遍针对4.0以上的  warp_parent 包裹内容,由内容决定的  orientation排放的方向
 * - Gravity
 * - Android:gravity 用于设置该控件中内容相对于该控件的对齐方式
 * - Android:layout_gravity: 用于设置该控件相对于父控件的对齐方式
 * - Padding:用于设置该控件中内容相对于该控件的边距,即内边距
 * - margin: 用于设置该控件相对于其他控件的边距,即外边距
 * - weight: layout_weight的值用于在线性布局中指定父控件剩余空间的分配比例。
 * - 所有的视图都有一个layout_weight值,默认为零,意思是需要显示 多大的视图就占据多大的屏幕空间。若赋一个高于零的值,则将父视 图中的可用空间分割,分割大小具体取决于每一个视图的layout_weight 值以及该值在当前屏幕布局的整体layout_weight值和在其它视图屏幕布 局的layout_weight值中所占的比率而定。 
 * 举个例子:比如说我们在 水平方向上有一个文本标签和两个文本编辑元素. 该文本标签并无指定layout_weight值,所以它将占据需要提供的最少空间。 如果两个文本编辑元素每一个的layout_weight值都设置为1,则两者平分  在父视图布局剩余的宽度(因为我们声明这两者的重要度相等)。如果两个文本编辑元素其中第一个的layout_weight值设置为1,而第二个的设置为2, 则剩余空间的三分之二分给第一个,三分之一分给第二个(数值越小,重要度越高)。
 */


  /**
 * - Andorid中像素单位  px dp sp
 * - px:像素,全称图像元素,分辨率的尺寸单位
 * - dpi:(dot per inch) 一般是指每英寸的像素,类似于密度,即每英寸图片上的像素点数量,用来表示图片的清晰度
 * - dp:dip(Device Independent pixels),设备独立像素
 * - sp:距离单位 -可缩放像素,一般用于指定字体大小。-当用户修改手机系统字体时,应用程序中的字体大小会随之变化。
 */
Screenshot_1507690638-w540
Screenshot_1507690638-w540

布局代码如下:

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


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#6B8E23"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="东方网络金融"
            android:layout_marginRight="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="信息服务部" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#ffb6c1"
        android:layout_weight="1"
        android:orientation="vertical"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="东方网络金融"
            android:layout_marginBottom="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="信息服务部" />
        
    </LinearLayout>

</LinearLayout>

如何定义一个Activity

  • 创建一个Activity子类

  • 重写Activity中的onCreate方法

  • 在AndroidManifest.xml中对Activity进行注册

启动一个Activity

  • 创建Intent意图对象

  • 调用setClass 设置要启动哪个Activity

  • 调用startActivity进行跳转

private Button button;
private  int sum = 0;
private ButtonListener buttonListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //为当前的Activity设置当前显示的内容
    setContentView(R.layout.activity_main);

    //为button添加监听器
    button = (Button)findViewById(R.id.button);
    buttonListener = new ButtonListener();
    button.setOnClickListener(buttonListener);
}

class ButtonListener implements View.OnClickListener{
    @Override
    public void onClick(View view) {
        //当控件被点击之后调用
        sum++ ;
        System.out.print("当前点击次数为:" + sum);

        Intent intent = new Intent();
        intent.setClass(MainActivity.this,OtherActivity.class);
        startActivity(intent);
    }
}

基础控件使用方法

TextView适用条件

  • 当文本内容为电话、邮箱或者特定格式时
  • 当文本内容超出控件宽度时
  • 当需要更改文本字体类型和风格时

color:

1、导入color.xml文件至values文件夹下。
2、xml布局文件中,通过@color/对应颜色名称

drawable:

1、导入图片资源(.jpg/png)至drawable文件夹下(考虑适配的话,需要多张图片。不考虑的话,一张足矣)
2、xml布局文件中,通过@drawable/图片名称

string:

1、values文件夹下的strings.xml文件下,定义键值对。key:内容名 values:对应文字内容
2、xml布局文件中,通过@string/内容名(国际化、使xml布局文件更加整洁)

sp/dp:

实际开发中,有时为了美观、一致性 会使用dp来作为文字大小的单位。官方推荐使用sp。

autoLink:

设置特殊文字格式(web/phone/email/..)

ellipsize:

start/end/middle(一定要是singleline) 为显示不下的内容添加省略号

跑马灯:

  • ellipsize:marquee
  • singeline
  • textIsSelectable
  • marqueeRepeatLimit:forever..
  • typeface:设置各种文字类型
  • textSytle:设置文字风格
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/textview01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView基本属性解析" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/darkorange"
        android:text="带有颜色的TextView" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@drawable/inter"
        android:text="带有图片背景的TextView" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/more" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="设置文字大小、颜色"
        android:textColor="@color/royalblue"
        android:textSize="15sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoLink="web"
        android:text="官网地址:http://www.dfjr888.com" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoLink="email"
        android:text="邮箱:xxxxxxxxx@163.com" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoLink="phone"
        android:text="电话:1234567980" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:autoLink="map"
        android:text="经纬度暂时无法使用,google地图已经退出啦。期待回归!" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawableBottom="@drawable/ic_launcher"
        android:drawableLeft="@drawable/ic_launcher"
        android:drawableRight="@drawable/ic_launcher"
        android:drawableTop="@drawable/ic_launcher"
        android:gravity="center"
        android:text="在我的周围添加图片吧!" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/magenta"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:singleLine="true"
        android:text="@string/more"
        android:textColor="@color/wheat"
        android:textIsSelectable="true" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="设置字体风格"
        android:textStyle="bold|italic" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="设置文字字体类型"
        android:typeface="monospace" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#6B8E23"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="东方网络金融"
            android:layout_marginRight="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="信息服务部" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="#ffb6c1"
        android:layout_weight="1"
        android:orientation="vertical"
        android:gravity="center">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="东方网络金融"
            android:layout_marginBottom="10dp"/>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="信息服务部" />
        
    </LinearLayout>

</LinearLayout>
Screenshot_1507710397
Screenshot_1507710397

推荐阅读更多精彩内容