Android实训-Day3项目结构&Day4

这篇博客介绍了Android应用开发的基本概念,包括项目结构、布局管理如LinearLayout和RelativeLayout的使用,以及如何设置布局文件。此外,还讲解了监听器的概念,用于响应用户交互,并通过Log日志进行调试。最后提到了自定义Activity和内部类的知识,强调了AndroidManifest.xml在配置主页面中的作用。
摘要由CSDN通过智能技术生成

Day3

请结合代码项目学习,代码都在此系列第一篇开头,代码中有很多注释。

一.笔记

Day3的代码来看,就是在layout写布局,然后在src的MainActivity.java里决定使用哪个布局文件。

【项目结构】
src文件夹:存放代码的文件夹,中间有包结构。
gen文件夹:存放的是项目自动生成的配置java文件。开发者不能改动。
bin文件夹:存放一些编译生成的文件,是存放编译生成的apk安装包的位置
res文件夹:主流资源文件夹
            drawable-??dpi文件夹:存放不同分辨率的贴图
            layout文件夹:存放布局文件,指定控件显示效果和位置的文件。
AndroidManifest.xml 清单文件:存放项目配置的参数

【布局 Layout】
布局是摆放控件的规则。

Tip:
打开Windows显示文件扩展名的功能。
步骤
控制面板 --- 查看类别:大图标 --- 文件资源管理器选项 --- 查看 --- 取消勾选“隐藏已知文件的扩展名” --- 确定

【保持项目统一(重要)】
每次新建项目后,需要执行如下操作,让新创建的项目结构一致且精简。
1. 进入res---layout,删除activity_main.xml文件
2. 进入src---MainActivity.java代码,进入onCreate方法,
   更改setContentView(R.layout.activity_main);方法为
   setContentView(R.layout.fragment_main);
3.仔细删除MainActivity.java文件中除了onCreate以外的方法。
4.继续删除onCreate中的多余代码直到:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
    }
5.保存(Ctrl+S)所有更改的文件后,再次运行程序。


Tip:
在写代码的过程中,要善于使用自动补全的快捷键 Alt + /


【通用属性】
android:layout_width="match_parent"            宽度
android:layout_height="match_parent"        高度
可选值:(1) match_parent
            匹配父控件,上级多宽/长就多宽/长。
        (2) wrap_content
            包裹元素,内部的控件多宽/长就多宽/长。
        (3) fill_parent
            功能完全等同match_parent,通常使用match_parent
        (4) 手动输入一个固定宽度,单位dp
        
背景颜色,采用RGB记色法,红绿蓝(0-255),采用十六进制
在线颜色选择器(可根据选择的颜色得到形如 #fa7c09 的颜色代号):http://tools.jb51.net/static/colorpicker/
android:background="#fa7c09"

外边距
android:layout_margin="10dp"
还有单独设置某个方向的属性

内边距
android:padding="100dp"
还有单独这是某个方向的属性

设置某个布局或控件中子元素的重力方向
android:gravity="bottom|right"

【布局 Layout】
布局是摆放控件的规则,可以认为布局是一个透明的容器。
透明容器内部按照规则去摆放控件。

只关注android:开头的即可

LinearLayout 线性布局
线性布局表示内部的控件横着或者竖着排成一排。
android:orientation="vertical" 方向
可选值:horizontal(水平),vertical(垂直)

RelativeLayout 相对布局
在某个参照物的某个方向或位置,相对布局的第一步就是给参照物起一个名字(id).
相对布局中,如果不指定子控件的相对位置,默认都在左上角堆放
例子:创建一个新的布局文件
1)选中res---layout文件夹,右键---New---Android XML File
2)在弹出的窗口中的File栏,输入要创建的布局文件的名称(全英文小写,单词间使用_分割)
3)在下方的Root Element栏目中选择要使用的布局后点击Finish按键完成创建

给某个布局或控件起一个id
android:id="@+id/text1"

在某个参照物的右边
android:layout_toRightOf="@id/text1"
在某个参照物的左边
ndroid:layout_toLeftOf="@id/text1"
在某个参照物的下面
android:layout_below="@id/text1"
在某个参照物的上面
android:layout_above="@id/text1"

父控件的中间
android:layout_centerInParent="true"
在父控件的水平中心
android:layout_centerHorizontal="true"
在父控件的垂直中心
android:layout_centerVertical="true"

对齐父控件的左边
android:layout_alignParentLeft="true"
对齐父控件的右边
android:layout_alignParentRight="true"
对齐父控件的顶端
android:layout_alignParentTop="true"
对齐父控件的底部
android:layout_alignParentBottom="true"

对齐某个控件的左边/右边
android:layout_alignLeft="@id/btn1"
android:layout_alignRight="@id/btn1"
对齐某个控件的顶端/底部
android:layout_alignTop="@id/btn1"
android:layout_alignBottom="@id/btn1"

【设置要使用的布局文件】
1.进入src---MainActivity
2.在onCreate方法里,有一个setContextView方法

Tips:
1.如果程序确定没有错误,项目还是有红叉,需要点击Project --- Clean 清理项目后再运行。
2.android:text="你好2" 直接在双引号中写显示的文字即可,黄线不需要关注。
3.无论操作什么软件,都养成点击Ctrl + S的习惯

【如何按照比例布局?】
线性布局支持比例划分的。
//共同作用分宽度
android:layout_width="0dp"
android:layout_weight="2"

【布局嵌套】
布局之间可以嵌套,对于外层的布局而言,内层的布局也相当于一个控件。
理论上布局可以嵌套任意层次,但是为了性能起见,应该尽可能的少用嵌套。

【TextView 文本显示控件】
设置显示文字
android:text="我今晚想吃卷饼"

如果给TextView设置比较大的宽度和高度时,文字默认在左上。
可以通过设置重力方向来控制文字的位置。
android:gravity="center"

设置文字大小(单位使用sp)
android:textSize="10sp"

设置为浏览器的超链接
android:autoLink="web"

【Button 按钮】
Button是TextView的子类,拥有TextView的绝大多数属性。

另外身为一个子类,Button也对其父类TextView做出了一些改动。
例如:文字默认居中,增加了按钮的点击效果。

【ImageView  图片显示控件】
功能用于显示图片

设置显示的图片
android:src="@drawable/sdust"

图片命名规则:
1.不允许数字开头
2.不允许大写英文
3.不允许中文和特殊的符号

 

Day4

一.笔记

【监听器 Listener】
类似于提前先设定好某个“约定”(某个达成的条件A→执行某段代码B·)。
如果在程序运行的过程中达成了这个条件A,则自动触发B。
如果在程序运行的过程中没有达成条件A,则永远不会触发B。

“万物皆对象”
xml中布置控件(控件必须有id) → .java中找到对象

【输出Log日志】
在程序的关键节点输出一些调试信息,这些信息无法被用户感知,但是可以被开发者在后台截取。

例子:点击一下按钮,在后台输出一句调试信息。

捕获日志的两种方式:
1.IDE(集成开发环境):Eclipse ?????????怎么没有
(1)确认当前的环境是否已经连接到对应的模拟器上,点击Open Perspective...(右上角)
(2)选择新窗口中的DDMS窗口,点击Open按钮
(3)在DDMS窗口的Devices标签中,确认设备已经连接
(4)确认连接无误后回到编辑窗口的logcat窗口中
(5)在Logcat窗口的左上角,点击绿色的加号
(6)在新弹出的窗口中,前两个空输入标签名称(如MainActivity),点击OK按钮。

2.adb(安卓调试桥)---不做要求
需要先配置环境变量
进入到开发环境的目录下,有一个sdk文件夹,里面有一个platform-tools文件夹。
复制platform-tools的路径到环境变量中。

点击Win+R,输入cmd,回车。
在命令行黑窗口中,输入adb,回车,进行验证。

adb命令:
验证已经连接的设备
adb devices

筛选Log
adb logcat -s 标签名称,例如:
adb logcat -s MainActivity

【语法:多态】
在Java中,父类引用可以指向子类对象。

多态:一种表达,多种状态。

多态触发的条件:
1.要有继承
2.子类要覆盖父类的方法
3.父类引用指向子类对象

【内部类】
1.成员内部类
成员内部类作为一个成员依附于另一个中,可以访问外部类所有的成员变量和方法。
成员内部类是跟外部类关系最紧密的一种内部类。

package com.test;

//外部类
public class Outer {
    
    private String str = "这是外部类的私有成员变量";

    private void method() {
        System.out.println("这是外部类的私有成员函数");
    }
    
    //成员内部类
    public class Inner{
        
        public void test() {
            //成员内部类可以调用外部类的变量和方法
            System.out.println(str);
            method();
        }
        
    }
    
}
package com.test;

import com.test.Outer.Inner;

public class Test {

    public static void main(String[] args) {
        // 实例化内部类
        // 方式1:直接使用外部类对象去调用内部类 
        Outer outer = new Outer();
        Outer.Inner inn = outer.new Inner();
        
        //方式2:一步完成
        Outer.Inner inn2 = new Outer().new Inner();
        
        //也可以通过导包来省略外部类类型,直接使用内部类类型
        Inner inn3 = outer.new Inner();
        
        //在实际的使用中,成员内部类更多的是在外部类中使用
        //即Inner直接在Outer中使用。
        
        //测试内部类对外部类的访问
        inn.test();
    }

}

 

2.匿名内部类
匿名内部类是一个没有名字的类隐式地实现(继承)了一个接口(抽象类),
并且返回一个这个没有名字的类的对象。

性质:
1.没有构造方法
2.没有关键字class、extends、implements

匿名内部类的常见使用场合:
1.只用到这个没有名字的类一次
2.类定义后马上使用
3.类比较小
4.给类命名不会导致代码更容易被理解
5.通常用于传参

【自定义页面 Activity】
1.在src中创建自定义页面类
2.补充自定义页面类的继承和onCreate方法
3.自己写一个布局文件
4.给自定义的页面类设置自己写的布局文件
5.在清单文件中注册自定义页面(见下面的问题一)

清单配置文件如下:

 

二.心得

1.问题一

在src和layout下如果有两组或多组文件,那么哪一组才是主页面呢,因为.Java只有一个可以作为主页面。

例如现现在我的结构如下,MainActivity.java用的是activity_main.xml,而自己新建的MyActivity.java用的是activity_myxml

要看清单文件AndroidManifest.xml是如何配置的,里面有注释!

<?xml version="1.0" encoding="utf-8"?>
<!-- 下面的package="com.example.day4_shanke_activity" 是默认包,在默认包下的文件注册时可以加.略写 -->

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.day4_shanke_activity" 
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 有一个主页面就得注册一个,形如下面的activity 
        下面的.MainActivity之所以可以略写,是因为在上面默认的包下面
        -->
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name="com.sdust.MyActivity"
            android:label="自定义页面" >
            <intent-filter>           <!-- 谁有过滤器谁是主页面,所以现在自己新建的这个就充当主页面 -->
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

2.问题2

cmd下输出日志,显示adb不是内部命令。因为没配置环境变量,把adb.exe的路径放到环境变量中就好了!

test是数据库标识

mBtn.setOnClickListener(new OnClickListener() { //点击按钮后台就会输出日志内容
            
            @Override
            public void onClick(View v) {
                //输出一句后台日志(记得导包)
                //参数一:日志的标签
                //参数二:输出的内容
                Log.d("test","Hello hbb");//cmd下输adb logcat -s test,数据库中就会有输出Hello hbb
            }
        });

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深海鱼肝油ya

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值