Android开发笔记(二)-----------------文本阅读
先来看一下manifest文件
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.bq.textreader"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".ListAllFileActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.bq.textreader.ViewFile"
android:label="@string/app_name" >
</activity>
</application>
</manifest>
在这里我们添加了两个Activity,下面对其布局
1.ListAllFileActivity的布局,比较简单,只有一个ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
2.ListAllFileActivity的实现,主要有获得文件列表的方法,并启动一个新的Activity
package com.bq.textreader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
/*展现全部文件的Activity*/
public class ListAllFileActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFileList();
}
private void initFileList() {
File path = android.os.Environment.getExternalStorageDirectory();
File[] f = path.listFiles();
fill(f);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = this.getMenuInflater();
inflater.inflate(R.menu.menu, menu);
menu.removeItem(R.id.gb2312);
menu.removeItem(R.id.utf8);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.about:
doAbout();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
// 弹出关于框
private void doAbout() {
Dialog dialog = new AlertDialog.Builder(ListAllFileActivity.this)
.setTitle(R.string.aboutTitle)
.setMessage(R.string.aboutInfo)
.setPositiveButton(R.string.aboutOK,
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialoginterface, int i) {
// 按钮事件
}
}).create();
dialog.show();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Intent intent = new Intent(ListAllFileActivity.this, ViewFile.class);
bundle = new Bundle();
File file = fileNameList.get(position);
if (file.isDirectory()) {
File[] f = file.listFiles();
fill(f);
} else {
bundle.putString(fileNameKey, file.getAbsolutePath());
intent.putExtras(bundle);
startActivityForResult(intent, 0);
}
}
// 读取文件列表,并设置listview
private void fill(File[] files) {
fileNameList = new ArrayList<File>();
for (File file : files) {
if (isValidFileOrDir(file)) {
fileNameList.add(file);
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, fileToStrArr(fileNameList));
setListAdapter(adapter);
}
/* 检查是否为合法的文件名,或者是否为路径 */
private boolean isValidFileOrDir(File file) {
if (file.isDirectory()) {
return true;
} else {
String fileName = file.getName().toLowerCase();
if (fileName.endsWith(".txt")) {
return true;
}
}
return false;
}
private String[] fileToStrArr(List<File> fl) {
ArrayList<String> fnList = new ArrayList<String>();
for (int i = 0; i < fl.size(); i++) {
String nameString = fl.get(i).getName();
fnList.add(nameString);
}
return fnList.toArray(new String[0]);
}
/* 文件列表 */
private List<File> fileNameList;
private Bundle bundle;
private String fileNameKey = "fileName";
}
3.ViewFile的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/view_contents"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textSize="20sp" >
</TextView>
</ScrollView>
</LinearLayout>
4.ViewFile的实现,用一个TextView显示文本
package com.bq.textreader; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.TextView; /** * 打开文件的方法 * @author Administrator * */ public class ViewFile extends Activity { private String filenameString; private static final String gb2312 = "GB2312"; private static final String utf8 = "UTF-8"; private static final String defaultCode = gb2312; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.filebrowser); this.registerForContextMenu(findViewById(R.id.view_contents)); try { Bundle bunde = this.getIntent().getExtras(); filenameString = bunde.getString("fileName"); refreshGUI(defaultCode); } catch (Exception e) { } } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = this.getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; } @Override public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo){ if(v==findViewById(R.id.view_contents)){ menu.add(0,1,0,R.string.largeSize); menu.add(0,2,0,R.string.Size); menu.add(0,3,0,R.string.smallSize); } } @Override public boolean onContextItemSelected(MenuItem menuItem){ switch(menuItem.getItemId()){ case 1: ((TextView) findViewById(R.id.view_contents)).setTextSize(27.0f); break; case 2: ((TextView) findViewById(R.id.view_contents)).setTextSize(19.0f); break; case 3: ((TextView) findViewById(R.id.view_contents)).setTextSize(10.0f); break; } return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.gb2312: refreshGUI(defaultCode); break; case R.id.utf8: refreshGUI(utf8); break; case R.id.about: doAbout(); break; default: break; } return super.onOptionsItemSelected(item); } //弹出关于框 private void doAbout() { Dialog dialog = new AlertDialog.Builder(ViewFile.this).setTitle( R.string.aboutTitle).setMessage(R.string.aboutInfo) .setPositiveButton(R.string.aboutOK, new DialogInterface.OnClickListener() { public void onClick( DialogInterface dialoginterface, int i) { // 按钮事件 } }).create(); dialog.show(); } private void refreshGUI(String code) { TextView tv = (TextView) findViewById(R.id.view_contents); String fileContent = getStringFromFile(code); tv.setText(fileContent); } public String getStringFromFile(String code) { try { StringBuffer sBuffer = new StringBuffer(); FileInputStream fInputStream = new FileInputStream(filenameString); InputStreamReader inputStreamReader = new InputStreamReader(fInputStream, code); BufferedReader in = new BufferedReader(inputStreamReader); if(!new File(filenameString).exists()) { return null; } while (in.ready()) { sBuffer.append(in.readLine() + "\n"); } in.close(); return sBuffer.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } // 读取文件内容 public byte[] readFile(String fileName) throws Exception { byte[] result = null; FileInputStream fis = null; try { File file = new File(fileName); fis = new FileInputStream(file); result = new byte[fis.available()]; fis.read(result); } catch (Exception e) { } finally { fis.close(); } return result; } }
5.用到一个menu资源文件
<?xml version="1.0" encoding="UTF-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/utf8" android:title="@string/code_utf8" android:icon="@android:drawable/ic_menu_edit" /> <item android:id="@+id/gb2312" android:title="@string/code_gb2312" android:icon="@android:drawable/ic_menu_edit" /> <item android:id="@+id/about" android:title="@string/about" android:icon="@android:drawable/ic_menu_info_details" /> </menu>
6.strings.xml就不写了,没必要

浙公网安备 33010602011771号