Android开发笔记(一)

Android开发笔记(一)

2019, Jun 08    

前言

最近在帮朋友优化一个安卓的应用,使用Android来实现的一个华容道的小游戏。 项目链接

Android Studio的开发项目文件结构图

主要显示的是src文件夹下的结构

	 .
	├── AndroidManifest.xml 
	├── java
	│   └── com
	│       └── example
	│           └── huarongdao
	│               ├── AboutActivity.java
	│               ├── Block.java
	│               ├── Dimension.java
	│               ├── Klotski.java
	│               ├── KlotskiMapParser.java
	│               ├── L.java
	│               ├── Level1Activity.java
	│               ├── Level2Activity.java
	│               ├── Level3Activity.java
	│               ├── Level4Activity.java
	│               ├── LevelActivity.java
	│               ├── MainActivity.java
	│               └── Screen.java
	└── res
	    ├── drawable
	    ├── drawable-v24
	    ├── layout
	    ├── mipmap-anydpi-v26
	    ├── mipmap-hdpi
	    ├── mipmap-mdpi
	    ├── mipmap-xhdpi
	    ├── mipmap-xxhdpi
	    ├── mipmap-xxxhdpi
	    ├── temp-mipmap
	    └── values

AndroidManifest.xml

这个配置文件中主要用来说明整个app都将使用哪一些Activity,同时也可以设置有没有上面的导航栏等功能。

	<?xml version="1.0" encoding="utf-8"?>
	<manifest xmlns:android="http://schemas.android.com/apk/res/android"
	    xmlns:tools="http://schemas.android.com/tools"
	    package="com.example.huarongdao">

	    <application
	        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/AppTheme"
	        tools:ignore="GoogleAppIndexingWarning">
	        <activity
	            android:name=".Level1Activity"
	            android:theme="@style/AppTheme.NoActionBar" />
	        <activity
	            android:name=".Level2Activity"
	            android:theme="@style/AppTheme.NoActionBar" />
	        <activity
	            android:name=".Level3Activity"
	            android:theme="@style/AppTheme.NoActionBar" />
	        <activity
	            android:name=".Level4Activity"
	            android:theme="@style/AppTheme.NoActionBar" />
	        <activity
	            android:name=".AboutActivity"
	            android:theme="@style/AppTheme.NoActionBar" />
	        <activity
	            android:name=".LevelActivity"
	            android:theme="@style/AppTheme.NoActionBar" />
	        <activity
	            android:name=".MainActivity"
	            android:theme="@style/AppTheme.NoActionBar">
	            <intent-filter>
	                <action android:name="android.intent.action.MAIN" />

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

	</manifest>

Res文件夹下的Layout

	    ├── layout
	    │   ├── activity_about.xml
	    │   ├── activity_level.xml
	    │   ├── activity_level1.xml
	    │   ├── activity_level2.xml
	    │   ├── activity_level3.xml
	    │   ├── activity_level4.xml
	    │   └── activity_main.xml

在这个文件夹中的,就是app的各个页面的布局文件,在右方有可以直接拖动添加组件,但是拖动而得到的位置,最终都不是那么的准确。 因此一般都主要在代码中体现布局,这是可以最终确定布局是什么样子的。
目前我常用的布局有:

  • RelativeLayout相对布局
  • ConstraintLayout约束布局

Res的其他配置文件

drawable文件夹

	    ├── drawable
	    │   ├── aboutbtn.xml
	    │   ├── angry.jpg
	    │   ├── back_icon.jpg
	    │   ├── backimage.jpg
	    │   ├── btn.xml
	    │   ├── cry.jpg
	    │   ├── ic_launcher_background.xml
	    │   ├── levelback.jpg
	    │   └── surprise_icon.jpg

这个文件夹主要用于存放图片的资源文件,可以使用xml来配置图片被点击的时候的动画(press=false或者press=true的时候分别显示哪一张图)

	<?xml version="1.0" encoding="utf-8"?>
	<selector xmlns:android="http://schemas.android.com/apk/res/android">
	    <item android:drawable="@drawable/surprise_icon"
	        android:state_pressed="true"/>
	    <item android:drawable="@drawable/back_icon"
	        android:state_pressed="false"/>
	</selector>

在上面的代码中,android:state_pressed=”true”的时候(也就是受到按压的时候),就显示surprise_icon,如果为”false”就显示back_icon

values文件夹

	    └── values
	        ├── attrs.xml
	        ├── colors.xml
	        ├── dimens.xml
	        ├── strings.xml
	        └── styles.xml

在这些xml文件当中,可以配置Android应用中的各种属性。

	<resources>
	    <dimen name="fab_margin">16dp</dimen>
	    <dimen name="level_text_size">24sp</dimen>
	    <dimen name="level_text_size_big">30sp</dimen>
	    <dimen name="level_text_width">192dp</dimen>

	</resources>

但是有一点需要注意的是,在调用的时候不需要加s

   android:textSize="@dimen/level_text_size"

Java文件夹

在这个文件夹下主要就是用来实现程序主要逻辑的部分。一般开发需要以下几个步骤

  • 需要一个类Activity继承AppCompatActivity
  • 重写类中的onCreate方法,将类与对应的Layout绑定(使用R.layout.**__activity)
  • 使用findViewById方法,可以将layout中的各个组件,通过id找到,然后和java对象进行绑定,然后进行相应的操作

例子:监听TextView的点击事件

   	final TextView aboutGame = findViewById(R.id.about);
    aboutGame.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    aboutBtn.setBackgroundResource(R.drawable.angry);
                    aboutGame.setTextColor(getResources().getColor(R.color.colorGrey));
                    break;
                case MotionEvent.ACTION_UP:
                    aboutBtn.setBackgroundResource(R.drawable.cry);
                    aboutGame.setTextColor(getResources().getColor(R.color.colorb));
                    break;
            }
            return false;
        }
    });