嗨,我正在一個應用程序中,我需要使用瀏覽按鈕選擇文件。 我如何實現Android瀏覽按鈕?需要瀏覽按鈕?
Q
需要瀏覽按鈕?
10
A
回答
26
哦,我downvote .....好我正在更新我的答案。我爲示例應用程序提供代碼,其中,我使用了一個按鈕,可以從手機的任何目錄中選擇文件。
佈局
file_picker_empty_view.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="No files or directories"
android:background="@android:drawable/toast_frame"
android:textSize="28sp"
android:gravity="center_vertical|center_horizontal"/>
file_picker_list_item.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/file_picker_image"
android:layout_width="40dip"
android:layout_height="40dip"
android:layout_marginTop="5dip"
android:layout_marginBottom="5dip"
android:layout_marginLeft="5dip"
android:src="@drawable/file"
android:scaleType="centerCrop"/>
<TextView
android:id="@+id/file_picker_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="left|center_vertical"
android:textSize="28sp"
android:layout_marginLeft="10dip"
android:singleLine="true"
android:text="filename"/>
</LinearLayout>
file_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_width="fill_parent">
<TextView android:text="@+id/TextView01"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textStyle="bold"
android:layout_marginTop="5dip"
android:layout_marginLeft="5dip"></TextView>
<TextView android:text="@+id/TextView02"
android:id="@+id/TextView02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"></TextView>
</LinearLayout>
main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical">
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/start_file_picker_button"
android:text="Browse" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Selected file"
android:textStyle="bold"
android:textColor="#fff"
android:textSize="24sp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/file_path_text_view"
android:text="No file has been selected"
android:textSize="18sp" />
</LinearLayout>
活動
FilePickerActivity
import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
*
* @author pankaj
*
*/
public class FilePickerActivity extends ListActivity {
public final static String EXTRA_FILE_PATH = "file_path";
public final static String EXTRA_SHOW_HIDDEN_FILES = "show_hidden_files";
public final static String EXTRA_ACCEPTED_FILE_EXTENSIONS = "accepted_file_extensions";
private final static String DEFAULT_INITIAL_DIRECTORY = "/";
protected File mDirectory;
protected ArrayList<File> mFiles;
protected FilePickerListAdapter mAdapter;
protected boolean mShowHiddenFiles = false;
protected String[] acceptedFileExtensions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the view to be shown if the list is empty
LayoutInflater inflator = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View emptyView = inflator.inflate(R.layout.file_picker_empty_view, null);
((ViewGroup)getListView().getParent()).addView(emptyView);
getListView().setEmptyView(emptyView);
// Set initial directory
mDirectory = new File(DEFAULT_INITIAL_DIRECTORY);
// Initialize the ArrayList
mFiles = new ArrayList<File>();
// Set the ListAdapter
mAdapter = new FilePickerListAdapter(this, mFiles);
setListAdapter(mAdapter);
// Initialize the extensions array to allow any file extensions
acceptedFileExtensions = new String[] {};
// Get intent extras
if(getIntent().hasExtra(EXTRA_FILE_PATH)) {
mDirectory = new File(getIntent().getStringExtra(EXTRA_FILE_PATH));
}
if(getIntent().hasExtra(EXTRA_SHOW_HIDDEN_FILES)) {
mShowHiddenFiles = getIntent().getBooleanExtra(EXTRA_SHOW_HIDDEN_FILES, false);
}
if(getIntent().hasExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS)) {
ArrayList<String> collection = getIntent().getStringArrayListExtra(EXTRA_ACCEPTED_FILE_EXTENSIONS);
acceptedFileExtensions = (String[]) collection.toArray(new String[collection.size()]);
}
}
@Override
protected void onResume() {
refreshFilesList();
super.onResume();
}
/**
* Updates the list view to the current directory
*/
protected void refreshFilesList() {
// Clear the files ArrayList
mFiles.clear();
// Set the extension file filter
ExtensionFilenameFilter filter = new ExtensionFilenameFilter(acceptedFileExtensions);
// Get the files in the directory
File[] files = mDirectory.listFiles(filter);
if(files != null && files.length > 0) {
for(File f : files) {
if(f.isHidden() && !mShowHiddenFiles) {
// Don't add the file
continue;
}
// Add the file the ArrayAdapter
mFiles.add(f);
}
Collections.sort(mFiles, new FileComparator());
}
mAdapter.notifyDataSetChanged();
}
@Override
public void onBackPressed() {
if(mDirectory.getParentFile() != null) {
// Go to parent directory
mDirectory = mDirectory.getParentFile();
refreshFilesList();
return;
}
super.onBackPressed();
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
File newFile = (File)l.getItemAtPosition(position);
if(newFile.isFile()) {
// Set result
Intent extra = new Intent();
extra.putExtra(EXTRA_FILE_PATH, newFile.getAbsolutePath());
setResult(RESULT_OK, extra);
// Finish the activity
finish();
} else {
mDirectory = newFile;
// Update the files list
refreshFilesList();
}
super.onListItemClick(l, v, position, id);
}
private class FilePickerListAdapter extends ArrayAdapter<File> {
private List<File> mObjects;
public FilePickerListAdapter(Context context, List<File> objects) {
super(context, R.layout.file_picker_list_item, android.R.id.text1, objects);
mObjects = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = null;
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.file_picker_list_item, parent, false);
} else {
row = convertView;
}
File object = mObjects.get(position);
ImageView imageView = (ImageView)row.findViewById(R.id.file_picker_image);
TextView textView = (TextView)row.findViewById(R.id.file_picker_text);
// Set single line
textView.setSingleLine(true);
textView.setText(object.getName());
if(object.isFile()) {
// Show the file icon
imageView.setImageResource(R.drawable.file);
} else {
// Show the folder icon
imageView.setImageResource(R.drawable.folder);
}
return row;
}
}
private class FileComparator implements Comparator<File> {
public int compare(File f1, File f2) {
if(f1 == f2) {
return 0;
}
if(f1.isDirectory() && f2.isFile()) {
// Show directories above files
return -1;
}
if(f1.isFile() && f2.isDirectory()) {
// Show files below directories
return 1;
}
// Sort the directories alphabetically
return f1.getName().compareToIgnoreCase(f2.getName());
}
}
private class ExtensionFilenameFilter implements FilenameFilter {
private String[] mExtensions;
public ExtensionFilenameFilter(String[] extensions) {
super();
mExtensions = extensions;
}
public boolean accept(File dir, String filename) {
if(new File(dir, filename).isDirectory()) {
// Accept all directory names
return true;
}
if(mExtensions != null && mExtensions.length > 0) {
for(int i = 0; i < mExtensions.length; i++) {
if(filename.endsWith(mExtensions[i])) {
// The filename ends with the extension
return true;
}
}
// The filename did not match any of the extensions
return false;
}
// No extensions has been set. Accept all file extensions.
return true;
}
}
}
MainActivity //這必須是默認的活動,作爲主要的清單中
public class MainActivity extends Activity implements OnClickListener {
private static final int REQUEST_PICK_FILE = 1;
private TextView mFilePathTextView;
private Button mStartActivityButton;
private File selectedFile;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set the views
mFilePathTextView = (TextView)findViewById(R.id.file_path_text_view);
mStartActivityButton = (Button)findViewById(R.id.start_file_picker_button);
mStartActivityButton.setOnClickListener(this);
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.start_file_picker_button:
// Create a new Intent for the file picker activity
Intent intent = new Intent(this, FilePickerActivity.class);
// Set the initial directory to be the sdcard
//intent.putExtra(FilePickerActivity.EXTRA_FILE_PATH, Environment.getExternalStorageDirectory());
// Show hidden files
//intent.putExtra(FilePickerActivity.EXTRA_SHOW_HIDDEN_FILES, true);
// Only make .png files visible
//ArrayList<String> extensions = new ArrayList<String>();
//extensions.add(".png");
//intent.putExtra(FilePickerActivity.EXTRA_ACCEPTED_FILE_EXTENSIONS, extensions);
// Start the activity
startActivityForResult(intent, REQUEST_PICK_FILE);
break;
case R.id.You_can_handle_more_onclick_events_from_here:
//Do something
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode == RESULT_OK) {
switch(requestCode) {
case REQUEST_PICK_FILE:
if(data.hasExtra(FilePickerActivity.EXTRA_FILE_PATH)) {
// Get the file path
selectedFile = new File(data.getStringExtra(FilePickerActivity.EXTRA_FILE_PATH));
// Set the file path text view
mFilePathTextView.setText(selectedFile.getPath());
//Now you have your selected file, You can do your additional requirement with file.
}
}
}
}
}
現在Iam上傳圖片,你可以ñ使用你自己的圖像。
圖片名稱:文件
圖片名稱:文件夾
最後
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.myContactAdder.adder"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".FilePickerActivity"
android:label="@string/app_name">
</activity>
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="7" />
</manifest>
這些是更多信息的鏈接:Android file picker Activity和Creating simple file chooser。
3
你需要做的:
創建運行在獨立的活動(startActivityForResult)按鈕。
此文件選擇活動應列出來自特定位置的所有文件和文件夾。如果您單擊某個文件夾,則該文件夾的活動將重新初始化(從中列出文件)。
如果一個文件被點擊,那麼活動應該設置結果,傳遞文件名在extras中,並完成。
1
+4
鏈接已關閉 – 2014-10-04 13:25:27
相關問題
- 1. 提交按鈕需要點擊兩次IE瀏覽器
- 2. VB瀏覽按鈕
- 3. FTP瀏覽按鈕
- 4. 在網頁中瀏覽/瀏覽按鈕
- 5. 瀏覽器JavaScript需要webworker
- 6. 編輯瀏覽按鈕
- 7. ExtJS中的瀏覽按鈕
- 8. 啓用Jquery瀏覽按鈕。
- 9. GWT:FileUpload瀏覽按鈕造型
- 10. 瀏覽器後退按鈕
- 11. 定製的瀏覽按鈕
- 12. C#攔截瀏覽按鈕
- 13. 禁用瀏覽器按鈕
- 14. 關閉瀏覽器窗口時(當點擊瀏覽器的X按鈕時)我需要提示消息
- 15. c#Web瀏覽器模擬按鈕按
- 16. 在打印PDF文件的瀏覽器中需要打印按鈕
- 17. 需要關於onbeforeunload的幫助或點擊瀏覽器後退按鈕
- 18. HTML5瀏覽器驗證 - 1表單,2個按鈕,需要更改驗證
- 19. HTML頁面和按鈕文本自動換行 - 需要跨瀏覽器支持
- 20. 需要使用瀏覽器的後退按鈕重定向到主頁
- 21. 完全禁用瀏覽器的後退按鈕,完全不需要
- 22. 需要複製的按鈕按鈕
- 23. Facebook的Like按鈕和Twitter跟隨按鈕iOS上的瀏覽器(Chrome瀏覽器/ Safari瀏覽器)
- 24. Html - 如何使瀏覽按鈕打開在所需的路徑
- 25. 需要創建按鈕
- 26. 需要點擊按鈕
- 27. 需要CSS3按鈕樣式
- 28. AlertDialog按鈕需要雙擊
- 29. 不需要後退按鈕
- 30. 不要用瀏覽器後退按鈕填充Django表單
-1因爲發佈鏈接不是一個好的答案。請提供一些關於您發佈的鏈接的詳細信息,以便每個人都可以瞭解他在跟蹤他們時可能找到的內容。 – WarrenFaith 2011-04-29 10:07:35
@WarrenFaith我更新了我的答案,如果這是給出答案的好方法,您可以取消你的倒票嗎?有些時候你很忙,那麼你不能發佈一些代碼,所以通常我會鏈接,如果不是回答任何問題的好方法,我會照顧它的。 – 2011-04-30 19:40:06
這現在是一個相當不錯的答案,我現在積極投票。如果你很忙,爲了創建一個好的答案,你可以考慮把一些鏈接作爲評論或者完全放棄它(我只是在底部編輯你的鏈接名稱,1和2不是一個好的選擇鏈接名稱.. ) – WarrenFaith 2011-05-01 11:02:44