最近在做一个音乐播放器的小实例,其中涉及音乐文件选取。通过窗口模式的Activity来选择添加音乐文件或者文件夹。
menuaddgridview.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content">
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="@drawable/radiogroup_bg1"
- android:padding="5.0dip">
- <ImageButton
- android:id="@+id/MenuAddGridView_button_openfolder"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:layout_marginLeft="10.0dip"
- android:src="@drawable/radiogroup_openfolder"
- android:adjustViewBounds="true"
- android:padding="10.0dip"
- android:layout_alignParentLeft="true"/>
- <ImageButton
- android:id="@+id/MenuAddGridView_button_addSingle"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:layout_marginLeft="10.0dip"
- android:src="@drawable/radiogroup_addsingle"
- android:adjustViewBounds="true"
- android:padding="10.0dip"
- android:layout_toRightOf="@id/MenuAddGridView_button_openfolder"/>
- <ImageButton
- android:id="@+id/MenuAddGridView_button_addFolder"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:layout_marginLeft="10.0dip"
- android:src="@drawable/radiogroup_addfolder"
- android:adjustViewBounds="true"
- android:padding="10.0dip"
- android:layout_toRightOf="@id/MenuAddGridView_button_addSingle"/>
- <ImageButton
- android:id="@+id/MenuAddGridView_button_backFolder"
- android:layout_width="wrap_content" android:layout_height="wrap_content"
- android:layout_marginRight="10.0dip"
- android:src="@drawable/radiogroup_backfolder"
- android:adjustViewBounds="true"
- android:padding="10.0dip"
- android:layout_alignParentRight="true"/>
- </RelativeLayout>
- <GridView xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/MenuAddGridView_gridview"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:numColumns="auto_fit"
- android:verticalSpacing="10dp"
- android:horizontalSpacing="10dp"
- android:columnWidth="90dp"
- android:stretchMode="columnWidth"
- android:gravity="center"
- />
- </LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_height="wrap_content"
- android:paddingBottom="4dip" android:layout_width="fill_parent">
- <ImageView
- android:layout_height="wrap_content"
- android:id="@+id/MenuAddGridView_ItemImage"
- android:layout_width="wrap_content"
- android:layout_centerHorizontal="true">
- </ImageView>
- <TextView
- android:layout_width="wrap_content"
- android:layout_below="@id/MenuAddGridView_ItemImage"
- android:layout_height="wrap_content"
- android:layout_centerHorizontal="true"
- android:id="@+id/MenuAddGridView_ItemText">
- </TextView>
- </RelativeLayout>
设置Activity为窗口模式
<activity android:name=".MenuAddGridView" android:theme="@android:style/Theme.Dialog"></activity>
记得要添加权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
MenuAddGridView的代码:
- public class MenuAddGridView extends Activity {
- GridView gridview;
- SimpleAdapter gridviewAdapter;
- ImageButton openFolder,addSingle,addFolder,backFolder;
- String sdcardFilePath,thisFilePath,selectFilePath;
-
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
- this.setContentView(R.layout.menuaddgridview);
-
- sdcardFilePath=Environment.getExternalStorageDirectory().getAbsolutePath();//得到sdcard目录
- thisFilePath=sdcardFilePath;
-
- openFolder=(ImageButton) this.findViewById(R.id.MenuAddGridView_button_openfolder);
- openFolder.setVisibility(View.INVISIBLE);//设置不可见
- openFolder.setOnClickListener(new buttonOnClickListener());//添加监听器
- addSingle=(ImageButton) this.findViewById(R.id.MenuAddGridView_button_addSingle);
- addSingle.setVisibility(View.INVISIBLE);
- addSingle.setOnClickListener(new buttonOnClickListener());
- addFolder=(ImageButton) this.findViewById(R.id.MenuAddGridView_button_addFolder);
- addFolder.setVisibility(View.INVISIBLE);
- addFolder.setOnClickListener(new buttonOnClickListener());
- backFolder=(ImageButton) this.findViewById(R.id.MenuAddGridView_button_backFolder);
- backFolder.setOnClickListener(new buttonOnClickListener());
-
- gridview=(GridView) this.findViewById(R.id.MenuAddGridView_gridview);
- //设置gridView的数据
- updategridviewAdapter(thisFilePath);
- gridview.setOnItemClickListener(new OnItemClickListener(){
- public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
- long arg3) {
- HashMap<String, Object> item=(HashMap<String, Object>) arg0.getItemAtPosition(arg2);
- selectFilePath=(String) item.get("ItemFilePath");
-
- if(item.get("type").equals("isDirectory"))//判断是否是文件夹
- {
- openFolder.setVisibility(View.VISIBLE);//打开文件按钮可见
- addSingle.setVisibility(View.INVISIBLE);//选择单曲按钮不可见
- addFolder.setVisibility(View.VISIBLE);//选择整个文件夹按钮可见
- }
- else if(item.get("type").equals("isMp3"))
- {
- openFolder.setVisibility(View.INVISIBLE);
- addSingle.setVisibility(View.VISIBLE);
- addFolder.setVisibility(View.INVISIBLE);
- }
- else
- {
- openFolder.setVisibility(View.INVISIBLE);
- addSingle.setVisibility(View.INVISIBLE);
- addFolder.setVisibility(View.INVISIBLE);
- }
-
- }});
- this.setResult(0);
- }
- private File[] folderScan(String path)
- {
- File file=new File(path);
- File[] files=file.listFiles();
- return files;
- }
- //设置gridView的数据
- private void updategridviewAdapter(String filePath)
- {
- File[] files=folderScan(filePath);
- ArrayList<HashMap<String, Object>> lstImageItem = getFileItems(files);
- gridviewAdapter = new SimpleAdapter(MenuAddGridView.this,lstImageItem,R.layout.menuaddgridview_item,new String[] {"ItemImage","ItemText"}, new int[] {R.id.MenuAddGridView_ItemImage,R.id.MenuAddGridView_ItemText});
- gridview.setAdapter(gridviewAdapter);
- gridviewAdapter.notifyDataSetChanged();
- }
- //列表循环判断文件类型然后提供数据给Adapter用
- private ArrayList<HashMap<String, Object>> getFileItems(File[] files)
- {
- ArrayList<HashMap<String, Object>> lstImageItem = new ArrayList<HashMap<String, Object>>();
- //循环加入listImageItem数据
- if(files==null)
- {
- return null;
- }
- for(int i=0;i<files.length;i++)
- {
- HashMap<String, Object> map = new HashMap<String, Object>();
- String fileName=files[i].getName();//得到file名
- map.put("ItemText", fileName);
- if(files[i].isDirectory())//判断是否是文件夹
- {
- map.put("ItemImage", R.drawable.folder);//显示文件夹图标
- map.put("type", "isDirectory");
- }
- else if(files[i].isFile())//判断是否是文件
- {
- if(fileName.contains(".mp3"))//判断是否是MP3文件
- {
- map.put("ItemImage", R.drawable.mp3flie);//加入MP3图标
- map.put("type", "isMp3");
- }
- else
- {
- map.put("ItemImage", R.drawable.otherfile);//加入非MP3文件图标
- map.put("type", "isOthers");
- }
- }
- map.put("ItemFilePath", files[i].getAbsolutePath());//保存文件绝对路径
-
- lstImageItem.add(map);
- }
- return lstImageItem;
- }
- private ArrayList<String> getResultArrayList(ArrayList<HashMap<String, Object>> al)
- {
- ArrayList<String> musicResult=new ArrayList<String>();
- for(int i=0;i<al.size();i++)
- {
- HashMap<String, Object> map=al.get(i);
- String type=(String) map.get("type");
- String itemFilePath=(String) map.get("ItemFilePath");
- if(type.equals("isMp3"))
- {
- musicResult.add(itemFilePath);
- }
- }
- return musicResult;
- }
- class buttonOnClickListener implements OnClickListener
- {
- ArrayList<String> musicResult;
- Intent intent;
- public void onClick(View v) {
- switch(v.getId())
- {
- case R.id.MenuAddGridView_button_openfolder://打开文件夹
- updategridviewAdapter(selectFilePath);//获取文件夹下数据并显示
- thisFilePath=selectFilePath;//记录当前目录路径
- openFolder.setVisibility(View.INVISIBLE);
- addSingle.setVisibility(View.INVISIBLE);
- addFolder.setVisibility(View.INVISIBLE);
- break;
- case R.id.MenuAddGridView_button_addSingle:
- musicResult=new ArrayList<String>();
- musicResult.add(selectFilePath);
- intent=new Intent();
- intent.putStringArrayListExtra("musicResult", musicResult);
- MenuAddGridView.this.setResult(1, intent);
- MenuAddGridView.this.onDestroy();
- break;
- case R.id.MenuAddGridView_button_addFolder:
- //得到文件夹下所有mp3文件
- musicResult=getResultArrayList(getFileItems(folderScan(selectFilePath)));
- intent=new Intent();
- //返回给上一个activity数据
- intent.putStringArrayListExtra("musicResult", musicResult);
- MenuAddGridView.this.setResult(1, intent);
- MenuAddGridView.this.onDestroy();
- break;
- case R.id.MenuAddGridView_button_backFolder://返回上级目录
- if(!thisFilePath.equals(sdcardFilePath))
- {
- File thisFile=new File(thisFilePath);//得到当前目录
- String parentFilePath=thisFile.getParent();//上级的目录路径
- updategridviewAdapter(parentFilePath);//获得上级目录数据并显示
- thisFilePath=parentFilePath;//设置当前目录路径
-
- openFolder.setVisibility(View.INVISIBLE);
- addSingle.setVisibility(View.INVISIBLE);
- addFolder.setVisibility(View.INVISIBLE);
- }
- else
- {
- MenuAddGridView.this.onDestroy();
- }
- break;
- }
- }
-
- }
- protected void onDestroy() {
- this.finish();
- super.onDestroy();
- }
-
- }
效果图: