Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android初級教程理論知識(第二章布局&讀寫文件)

Android初級教程理論知識(第二章布局&讀寫文件)

編輯:關於Android編程

常見布局

相對布局

RelativeLayout
  • 組件默認左對齊、頂部對齊
  • 設置組件在指定組件的右邊

     android:layout_toRightOf="@id/tv1"
    
  • 設置在指定組件的下邊

    android:layout_below="@id/tv1"
    
  • 設置右對齊父元素

    android:layout_alignParentRight="true"
    
  • 設置與指定組件右對齊
 android:layout_alignRight="@id/tv1"

線性布局

LinearLayout
  • 指定各個節點的排列方向

    android:orientation="horizontal"
    
  • 設置右對齊

    android:layout_gravity="right"
    
  • 當豎直布局時,只能左右對齊和水平居中,頂部底部對齊豎直居中無效(十字架結構)
  • 當水平布局時,只能頂部底部對齊和豎直居中
  • 使用match_parent時注意不要把其他組件頂出去
  • 線性布局非常重要的一個屬性:權重

    android:layout_weight="1"
    
  • 權重設置的是按比例分配剩余的空間

幀布局

FrameLayout
  • 默認組件都是左對齊和頂部對齊,每個組件相當於一個div
  • 可以更改對齊方式

    android:layout_gravity="bottom"
    
  • 不能相對於其他組件布局

表格布局

TableLayout
  • 每個節點是一行,它的每個子節點是一列
  • 表格布局中的節點可以不設置寬高,因為設置了也無效

    • 根節點的子節點寬為匹配父元素,例如設置textview分割線。高為包裹內容
    • 節點的子節點寬為包裹內容,高為包裹內容
    • 以上默認屬性無法修改
    • 根節點中可以設置以下屬性,表示讓第1列拉伸填滿屏幕寬度的剩余空間
android:stretchColumns="1"

絕對布局

AbsoluteLayout

直接指定組件的x、y坐標

android:layout_x="144dp"
android:layout_y="154dp"

logcat

日志信息總共分為5個等級
  • verbose
  • debug
  • info
  • warn
  • error
  • 定義過濾器方便查看
  • System.out.print輸出的日志級別是info,tag是System.out
  • Android提供的日志輸出api
Log.v(TAG, "加油吧,童鞋");
Log.d(TAG, "加油吧,童鞋");
Log.i(TAG, "加油吧,童鞋");
Log.w(TAG, "加油吧,童鞋");
Log.e(TAG, "加油吧,童鞋");

文件讀寫操作

  • Ram內存:運行內存,相當於電腦的內存
  • Rom內存:內部存儲空間,相當於電腦的硬盤
  • sd卡:外部存儲空間,相當於電腦的移動硬盤

在內部存儲空間中讀寫文件

小案例:用戶輸入賬號密碼,勾選“記住賬號密碼”,點擊登錄按鈕,登錄的同時持久化保存賬號和密碼

1. 定義布局
2. 完成按鈕的點擊事件
  • 彈土司提示用戶登錄成功
Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();
3. 拿到用戶輸入的數據
  • 判斷用戶是否勾選保存賬號密碼
CheckBox cb = (CheckBox) findViewById(R.id.cb);
if(cb.isChecked()){

}
4. 開啟io流把文件寫入內部存儲
  • 直接開啟文件輸出流寫數據

    //持久化保存數據
        File file = new File("data/data/com.itydl.rwinrom/info.txt");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write((name + "##" + pass).getBytes());
        fos.close();
    
  • 讀取數據前先檢測文件是否存在

    if(file.exists())
    
  • 讀取保存的數據,也是直接開文件輸入流讀取

    File file = new File("data/data/com.itydl.rwinrom/info.txt");
    FileInputStream fis = new FileInputStream(file);
    //把字節流轉換成字符流
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));
    String text = br.readLine();
    String[] s = text.split("##");
    
  • 讀取到數據之後,回顯至輸入框

    et_name.setText(s[0]);
    et_pass.setText(s[1]);
    
  • 應用只能在自己的包名目錄下創建文件,不能到別人家去創建

直接復制項目

需要改動的地方:
  • 項目名字
  • 應用包名
  • R文件重新導包

使用路徑api讀寫文件

getFilesDir()得到的file對象的路徑是data/data/com.itydl.rwinrom2/files
  • 存放在這個路徑下的文件,只要你不刪,它就一直在
  • getCacheDir()得到的file對象的路徑是data/data/com.itydl.rwinrom2/cache

存放在這個路徑下的文件,當內存不足時,有可能被刪除

系統管理應用界面的清除緩存,會清除cache文件夾下的東西,清除數據,會清除整個包名目錄下的東西


在外部存儲讀寫數據

sd卡的路徑

  • sdcard:2.3之前的sd卡路徑
  • mnt/sdcard:4.3之前的sd卡路徑
  • storage/sdcard:4.3之後的sd卡路徑

  • 最簡單的打開sd卡的方式

    File file = new File("sdcard/info.txt");
    
  • 寫sd卡需要權限(防止任何人都往裡面寫數據)

    
    
  • 讀sd卡,在4.0之前不需要權限,4.0之後可以設置為需要

    
    
  • 使用api獲得sd卡的真實路徑,部分手機品牌會更改sd卡的路徑

    Environment.getExternalStorageDirectory()
    
  • 判斷sd卡是否准備就緒
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))

查看源代碼查找獲取sd卡剩余容量的代碼

  • 導入Settings項目
  • 查找“可用空間”得到

     "可用空間"
    
  • 查找"memory_available",得到

    vcnlfYXZhaWxhYmxl" >
    
  • 查找"memorysdavail",得到

    //這個字符串就是sd卡剩余容量
    formatSize(availableBlocks * blockSize) + readOnly
    //這兩個參數相乘,得到sd卡以字節為單位的剩余容量
    availableBlocks * blockSize
    
  • 存儲設備會被分為若干個區塊,每個區塊有固定的大小

  • 區塊大小 * 區塊數量 等於 存儲設備的總大小

Linux文件的訪問權限

  • 在Android中,每一個應用是一個獨立的用戶
  • drwxrwxrwx
  • 第1位:d表示文件夾,-表示文件
  • 第2-4位:rwx,表示這個文件的擁有者用戶(owner)對該文件的權限

r:讀
w:寫
x:執行
第5-7位:rwx,表示跟文件擁有者用戶同組的用戶(grouper)對該文件的權限
第8-10位:rwx,表示其他用戶組的用戶(other)對該文件的權限


openFileOutput的四種模式

  • MODE_PRIVATE:-rw-rw----
  • MODE_APPEND:-rw-rw----

下面這兩種模式由於太危險,已經被廢棄

  • MODEWORLDWRITEABLE:-rw-rw--w-
  • MODEWORLDREADABLE:-rw-rw-r--

SharedPreference

用SharedPreference存儲賬號密碼

  • 往SharedPreference裡寫數據

    //拿到一個SharedPreference對象
    SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
    //拿到編輯器
    Editor ed = sp.edit();
    //寫數據
    ed.putBoolean("name", name);
    ed.commit();
    
  • 從SharedPreference裡取數據

    SharedPreferences sp = getSharedPreferences("config", MODE_PRIVATE);
    //從SharedPreference裡取數據,讀取不到數據就返回空字符串。
    String name = sp.getBoolean("name", "");
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved