2013-03-20 2 views
0

i Хочу, чтобы хранилище Iternal получало память и использовало память в прогрессбар, как на картинке ниже в моем приложении. Как подать заявку, пожалуйста, помогите мне custome progressbar, используемому в android.and я использовал приложение для загрузки. enter image description hereКак проверить количество встроенных памяти в android?

+0

Вы пробовали обычный индикатор выполнения и два текстовых вида, выровненных по разные стороны? – sandrstar

+0

да, я хочу, чтобы 2 textview внутри progressbar. – crickpatel0024

ответ

2

Вот как это может быть достигнуто:
TestActivity.java:

public class TestActivity extends Activity { 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final TextView occupiedSpaceText = (TextView)findViewById(R.id.occupiedSpace); 
     final TextView freeSpaceText = (TextView)findViewById(R.id.freeSpace); 
     final ProgressBar progressIndicator = (ProgressBar)findViewById(R.id.indicator); 
     final float totalSpace = DeviceMemory.getInternalStorageSpace(); 
     final float occupiedSpace = DeviceMemory.getInternalUsedSpace(); 
     final float freeSpace = DeviceMemory.getInternalFreeSpace(); 
     final DecimalFormat outputFormat = new DecimalFormat("#.##"); 

     if (null != occupiedSpaceText) { 
      occupiedSpaceText.setText(outputFormat.format(occupiedSpace) + " MB"); 
     } 

     if (null != freeSpaceText) { 
      freeSpaceText.setText(outputFormat.format(freeSpace) + " MB"); 
     } 

     if (null != progressIndicator) { 
      progressIndicator.setMax((int) totalSpace); 
      progressIndicator.setProgress((int)occupiedSpace); 
     } 
    } 

    /** 
    * From question http://stackoverflow.com/questions/2652935/android-internal-phone-storage by Lazy Ninja 
    */ 
    public static class DeviceMemory { 

     public static float getInternalStorageSpace() { 
      StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
      //StatFs statFs = new StatFs("/data"); 
      float total = ((float)statFs.getBlockCount() * statFs.getBlockSize())/1048576; 
      return total; 
     } 

     public static float getInternalFreeSpace() { 
      StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
      //StatFs statFs = new StatFs("/data"); 
      float free = ((float)statFs.getAvailableBlocks() * statFs.getBlockSize())/1048576; 
      return free; 
     } 

     public static float getInternalUsedSpace() { 
      StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath()); 
      //StatFs statFs = new StatFs("/data"); 
      float total = ((float)statFs.getBlockCount() * statFs.getBlockSize())/1048576; 
      float free = ((float)statFs.getAvailableBlocks() * statFs.getBlockSize())/1048576; 
      float busy = total - free; 
      return busy; 
     } 
    } 
} 

макет/main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 


    <ProgressBar 
     android:id="@+id/indicator" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     style="@android:style/Widget.ProgressBar.Horizontal" 
     android:progressDrawable="@drawable/memory_indicator_progress" /> 

    <TextView 
     android:id="@+id/occupiedSpace" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentBottom="true" 
     android:gravity="left" 
     android:layout_marginLeft="5dp" 
     android:textColor="@android:color/black" 
     android:textStyle="bold" /> 
    <TextView 
      android:id="@+id/freeSpace" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentBottom="true" 
      android:gravity="right" 
      android:layout_marginRight="5dp" 
      android:textColor="@android:color/black" 
      android:textStyle="bold" /> 
</RelativeLayout> 

рисуем/memory_indicator_progress.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:id="@android:id/background"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@android:color/holo_green_light" /> 
     </shape> 
    </item> 
    <item android:id="@android:id/progress"> 
     <clip> 
      <shape android:shape="rectangle"> 
       <solid android:color="@android:color/darker_gray" /> 
      </shape> 
     </clip> 
    </item> 

</layer-list> 

Я не уверен, если это именно то, что вы ищете, но на моем XPERIA V с 4.1 андроида я получаю следующую картину: enter image description here

на вашем цвета устройства могут отличаться от разных платформ.

+0

Спасибо Sandrstar за ответ, я проверю его. – crickpatel0024

0

Используйте android.os.Environment, чтобы найти внутренний каталог, а затем используйте android.os.StatFs, чтобы вызвать системный вызов Unix statfs на нем. Бесстыдно stolen из приложения Android настройки:

File path = Environment.getDataDirectory(); 
StatFs stat = new StatFs(path.getPath()); 
long blockSize = stat.getBlockSize(); 
long availableBlocks = stat.getAvailableBlocks(); 
return Formatter.formatFileSize(this, availableBlocks * blockSize); 

От this answer

+0

Спасибо за ответ !!, но как установить текст в строке прогресса в android.used цвет памяти и доступный цвет памяти в рабочем состоянии, как можно, пожалуйста, помогите мне !!! – crickpatel0024

Смежные вопросы