一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解

Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解

2020-03-06 19:56goldensun JAVA教程

這篇文章主要介紹了Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解,同時(shí)附帶介紹了一個(gè)獲取Android的文件列表的方法,需要的朋友可以參考下

認(rèn)識(shí)Android編程各個(gè)文件之間的聯(lián)系和使用方法,以及認(rèn)識(shí)Activity文件結(jié)構(gòu)的大體可以看下圖:

Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解

代碼在src中的.java文件中編輯,gen目錄下有一個(gè)R.java的文件,這個(gè)文件存儲(chǔ)res目錄下各種資源文件的id號(hào),在主文件java中調(diào)用該資源的時(shí)候直接調(diào)用id號(hào)即可,如 R.layout.main ,這個(gè)條目得打開R.java文件中查看,"R"對(duì)應(yīng)R.java文件,"layout"對(duì)應(yīng)R.java文件中的layout類,"main"對(duì)應(yīng)layout類中的一個(gè)靜態(tài)常量聲明。

實(shí)際上res中的每一個(gè)文件都會(huì)在R.java中自動(dòng)產(chǎn)生靜態(tài)常量,這是res目錄和assets目錄最大的不同之處,這樣做的好處不言而喻,對(duì)資源的修改不會(huì)對(duì)代碼產(chǎn)生任何的影響,因?yàn)榇a中使用的只是ID號(hào)碼而已。

res目錄中的前三個(gè)文件夾是存放圖片資源的,而且通常情況下同一張圖片要有三個(gè)版本二,高低中分辨率。

第四個(gè)文件夾是存放布局文件的,main.xml,一個(gè)Activity對(duì)應(yīng)一個(gè)xml文件,而且每個(gè)Activity都要在AndroidMainfest.xml中注冊(cè)一下。default.properties文件在學(xué)java的時(shí)候接觸過,無(wú)非也是對(duì)對(duì)代碼的可重復(fù)性使用和修改提供了方便而已。第一個(gè)Java Activity程序,會(huì)體現(xiàn)出這些文件之間的關(guān)系和使用。

下面程序任務(wù):添加一個(gè)顯示文本和一個(gè)按鈕

對(duì)Activity的初步認(rèn)識(shí):就像一個(gè)窗口,能顯示信息,又像一個(gè)容器,能容納功能空間,如button,在程序角度上看,又像一個(gè) 類,可以和其他的類(Activity)發(fā)生聯(lián)系。

創(chuàng)建Activity的要點(diǎn):

一個(gè)Activity就是一個(gè)類,類名隨意起,不過必須繼承Activity這個(gè)父類。
需要復(fù)寫onCreate()方法
每一個(gè)Activity都應(yīng)該在AndroidManifest.xml文件中進(jìn)行配置
為Activity添加必要的控件
整體文件代碼預(yù)覽:

MyActivity.java 文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package geeker.MyActivity;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
public class MyActivity extends Activity {
  //成員變量的聲明
  private TextView myTextView = null;
  private Button myButton = null;
  //重寫OnCreate方法,會(huì)自動(dòng)生成
  public void onCreate(Bundle savedInstanceState) {
    //調(diào)用父類方法,該句代碼自動(dòng)生成
    super.onCreate(savedInstanceState);
    //通過布局文件的id調(diào)用該Activity所使用的布局文件
    setContentView(R.layout.main);
    //通過findViewById()方法拿到布局文件中添加的控件
    //不過在布局文件中添加控件的時(shí)候必須定義id號(hào),
    //如:android:id="@+id/myTextView"
    myTextView = (TextView)findViewById(R.id.myTextView);
    myButton = (Button)findViewById(R.id.myButton);
    //向控件上制定顯示文字
    myTextView.setText("This is my first Activity !");
    myButton.setText("MY FIRST BUTTON");
  }
}

main.xml 文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
<TextView
  android:id="@+id/myTextView"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />
<Button
  android:id="@+id/myButton"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  /> 
</LinearLayout>

R.jar 文件該文件自動(dòng)生成,不要自己改動(dòng)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* AUTO-GENERATED FILE. DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found. It
 * should not be modified by hand.
 */
package geeker.MyActivity;
public final class R {
  public static final class attr {
  }
  public static final class drawable {
    public static final int icon=0x7f020000;
  }
  public static final class id {
    public static final int myButton=0x7f050001;
    public static final int myTextView=0x7f050000;
  }
  public static final class layout {
    public static final int main=0x7f030000;
  }
  public static final class string {
    public static final int app_name=0x7f040001;
    public static final int hello=0x7f040000;
  }
}

其實(shí)走一遍添加Button的流程就明白各個(gè)文件間的聯(lián)系了:

1. 先打開main.xml文件,加一個(gè)button按鈕的布局

?
1
2
3
4
5
<Button
  android:id="@+id/myButton"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  />

2. 其實(shí)上一步完成后,編譯運(yùn)行已經(jīng)能看到一個(gè)Button按鈕了,但是我想在按鈕上添加文字以說(shuō)明該按鈕的作用,在java中的程序?yàn)?:
Button bt = new Button();
bt.setText("MY FIRST BUTTON");

那么在Android程序中如何在.java源文件中拿到剛才在main.xml中添加的控件呢?

基于這個(gè)目的,在main.xml文件中加了此句:android:id="@+id/myButton",這一句使得R.java文件中多了一個(gè)叫id的類,該控件的id號(hào)就在這個(gè)類中出現(xiàn)了,這樣做為了方便.java文件中的調(diào)用。

實(shí)際上如果不加上一句,該控件是不會(huì)在R.java文件中產(chǎn)生id號(hào)碼的,因?yàn)橹挥性趓es目錄中添加文件才會(huì)自動(dòng)在R.java中產(chǎn)生id號(hào),而添加一個(gè)控件只是在一個(gè)資源文件中做修改而已,所以不會(huì)自動(dòng)產(chǎn)生id號(hào)。

我們可以看一下R.java文件中自動(dòng)產(chǎn)生的ID代碼:

?
1
2
3
4
public static final class id {
    public static final int myButton=0x7f050001;
    public static final int myTextView=0x7f050000;
  }

然后在.java文件中就可通過getViewById()方法拿到控件了。

拿到控件之后就可以像java程序中一樣進(jìn)行相關(guān)操作了,代碼如:

?
1
2
3
private Button myButton = null;
myButton = (Button)findViewById(R.id.myButton);
myButton.setText("MY FIRST BUTTON");

實(shí)際上這個(gè)流程只體現(xiàn)了xml文件和R.java文件之間的聯(lián)系(通過該句:android:id="@+id/myButton),以及.java與R.java之間的聯(lián)系(通過該句:findViewById(R.id.myTextView) )。補(bǔ)充一下其他文件關(guān)系的代碼體現(xiàn):

MyActivity.java文件與Main.xml文件的聯(lián)系時(shí)通過MyActivity.java文件中的setContentView(R.layout.main);體現(xiàn)的,因?yàn)橐粋€(gè)Activity文件要對(duì)應(yīng)一個(gè)布局文件。

MyActivity.java文件與AndroidManifest.xml文件之間的聯(lián)系時(shí)通過AndroidManifest.xml文件中的。

?
1
2
3
4
5
6
7
<activity android:name=".MyActivity"
         android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>

來(lái)體現(xiàn)的,這也說(shuō)明了Activity創(chuàng)建的關(guān)鍵點(diǎn)之一:每一個(gè)Activity都應(yīng)該在AndroidManifest.xml文件中進(jìn)行配置。

PS:獲取Android的文件列表的方法

有的時(shí)候我們的程序需要去對(duì)android的指定目錄或者全局目錄進(jìn)行遍歷獲取其中的文件,但是獲取文件的時(shí)候可能會(huì)遇到無(wú)法列出文件夾中的文件的問題,這就是我出現(xiàn)的問題,對(duì)于某個(gè)子文件夾進(jìn)行獲取listFiles()的時(shí)候返回為NULL,也就是不允許列出文件夾中內(nèi)容。這個(gè)是由于android中的安全機(jī)制的緣故,由于android繼承了Linux系統(tǒng)的傳統(tǒng),對(duì)于某個(gè)特定的目錄有用戶的權(quán)限,一共分為三種--可讀,可寫,可執(zhí)行;雖然說(shuō)我們可以設(shè)置某個(gè)特定的目錄的權(quán)限,但是對(duì)于目錄里面的子目錄和子文件都可以進(jìn)行權(quán)限的設(shè)置,也就是說(shuō)出了根目錄權(quán)限之外,子目錄本身的權(quán)限也決定了子目錄可否訪問,這一點(diǎn)我們需要清楚了解,所以我們?cè)谂袛嗤炅耸欠袷悄夸浿猓覀冞€需要在進(jìn)行l(wèi)istFiles()獲取File[]數(shù)據(jù)后判斷獲取的數(shù)組是否為空,如果為空的話,文件夾是不可訪問的。樣例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package net.nowamagic.file;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import android.util.Log;
/**
 * @author
 * function 用于掃描SD卡上的文件
 *
 */
public class FileScan {
  
  private static final String TAG = "FileScan";
  public HashMap<String, String> getMusicListOnSys(File file) {
    
    //從根目錄開始掃描
    Log.i(TAG, file.getPath());
    HashMap<String, String> fileList = new HashMap<String, String>();
    getFileList(file, fileList);
    return fileList;
  }
  
  /**
   * @param path
   * @param fileList
   * 注意的是并不是所有的文件夾都可以進(jìn)行讀取的,權(quán)限問題
   */
  private void getFileList(File path, HashMap<String, String> fileList){
    //如果是文件夾的話
    if(path.isDirectory()){
      //返回文件夾中有的數(shù)據(jù)
      File[] files = path.listFiles();
      //先判斷下有沒有權(quán)限,如果沒有權(quán)限的話,就不執(zhí)行了
      if(null == files)
        return;
      
      for(int i = 0; i < files.length; i++){
        getFileList(files[i], fileList);
      }
    }
    //如果是文件的話直接加入
    else{
      Log.i(TAG, path.getAbsolutePath());
      //進(jìn)行文件的處理
      String filePath = path.getAbsolutePath();
      //文件名
      String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
      //添加
      fileList.put(fileName, filePath);
    }
  }
  
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久天天影视香蕉 | 91肥熟国产老肥熟在线 | 古代翁熄系小说辣文 | 四虎最新网址在线观看 | 欧美精品色精品一区二区三区 | 欧美日韩久久中文字幕 | 884aa草莓视频| 99精品国产高清一区二区三区香蕉 | 天天色踪合| 男女性gif抽搐出入视频 | 嗯啊视频在线观看 | 精品四虎国产在免费观看 | 色噜噜狠狠狠综合曰曰曰88av | 国产高清不卡视频在线播放 | 国产一卡2卡3卡四卡精品网 | 欧美日韩亚洲综合久久久 | meyd–456佐山爱在线播放 | 九九热在线视频 | 亚洲邪恶天堂影院在线观看 | 四虎新网址 | 视频一区精品 | 欧美日韩国产手机在线观看视频 | 午夜A级理论片左线播放 | 日韩欧美一区二区在线观看 | 继的朋友无遮漫画免费观看73 | 91亚洲精品第一综合不卡播放 | 日日爽日日操 | 久久综久久美利坚合众国 | 91九色porn偷拍在线 | 青青青久在线视频免费观看 | tube8最近日本护士 | 91在线亚洲综合在线 | 国产欧美一区二区精品性色99 | 国产一区二区三区毛片 | pregnant欧美孕交xxx | 精新精新国产自在现 | 女人张开腿让男人桶视频免费大全 | 免费一级夫妻a | 水蜜桃一二二区视在线 | 日韩一级生活片 | 美女被吸乳得到大胸 |