2013-08-30 29 views
27

Tôi đang cố gắng đặt thanh tiến trình nằm ngang ở đầu khung hình của mình. Nhưng có vẻ như padding mà tôi chỉ đơn giản là đã không thể loại bỏ. Bất kỳ giúp đỡ?Căn chỉnh tiến độBar ngang lên trên cùng (loại bỏ khoảng cách)

enter image description here

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
<ProgressBar android:id="@+id/flv_progress_bar" 
      android:layout_width="fill_parent" 
      style="@android:style/Widget.Holo.ProgressBar.Horizontal" 
      android:indeterminateOnly="true" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top"/> 
</FrameLayout> 

Trả lời

32

Câu trả lời của Pork'n'Bunny API cấp 16 trở lên. Giải pháp này hoạt động trong tất cả các thiết bị. Chỉ cần đẩy nó lên 6dp trong XML.

<ProgressBar 
     android:id="@+id/progressbar_Horizontal" 
     style="?android:attr/progressBarStyleHorizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:max="100" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="-6dp" /> 
+16

Mức độ mạnh mẽ này sẽ chống lại những thay đổi trong các kiểu mặc định như thế nào? Họ có được bảo đảm tìm kiếm và làm việc tương tự cho tất cả vĩnh cửu hay họ có thể thay thế chúng một cách lý thuyết bất cứ lúc nào bằng cách đẩy nó lên 6 pixel sẽ tạo ra vấn đề (ví dụ: thanh tiến trình vô hình)? – Joey

+6

Tính năng này không hoạt động trên mọi thiết bị. Trên Galaxy S6, ngay cả với lề trên '-6dp', khoảng trắng phía trên thanh tiến trình vẫn hiển thị. –

4

từ vẻ của nó, tôi nghĩ rằng nó gây ra bởi sự hình ảnh được sử dụng trong phong cách mặc định

style="@android:style/Widget.Holo.ProgressBar.Horizontal" 

(hình ảnh tôi đề cập đến là một trong những điều này: @android:drawable/progress_indeterminate_horizontal_holo@android:drawable/progress_horizontal_holo_dark)

Những hình ảnh này có rất nhiều nền canvas; do đó nó cho thấy khoảng cách này.

Tôi đề nghị:

sử dụng một hình ảnh tùy chỉnh để tạo kiểu bạn PregressBar. Một trong đó không có nhiều khoảng cách canvas.

enter image description here

+2

Đây là câu trả lời đúng.Tôi sẽ phải chỉnh sửa một phiên bản của tất cả các bản vẽ có thể vẽ được (9 bản vá) để loại bỏ phần đệm. –

-1

Tôi nghĩ rằng vấn đề là thuộc tính chiều cao. hãy thử đặt chiều cao bố cục thành một số giá trị

<ProgressBar 
      android:id="@+id/progressBar" 
      android:max="100" 
      android:layout_width="match_parent" 
      android:layout_height="2dp" 
      style="@android:style/Widget.ProgressBar.Horizontal" 
      /> 
+0

Tính năng này không hoạt động. –

+0

Nếu trường hợp đó xảy ra thì bạn nên thay đổi bản vẽ thành tùy chỉnh trong các tệp kiểu của bạn Raghuram

3

Giải pháp hoàn chỉnh cho vấn đề này sẽ như sau. Chỉ trong trường hợp nếu ai đó cần mảnh mã, đây là những gì tôi đã làm.

  1. sao chép tất cả các 8 không xác định drawables progressbar ngang
  2. Edited các drawables sử dụng một số hình ảnh thao túng và loại bỏ miếng đệm không cần thiết
  3. sao chép XML drawable tên progress_indeterminate_horizontal_holo.xml từ android nền tảng
  4. sao chép phong cách Widget. ProgressBar.Horizontal và cha mẹ của nó
  5. Đặt kiểu và chỉnh sửa theo cách thủ công trong bố cục

Đây là progress_indeterminate_horizontal_holo.xml

<animation-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false"> 
<item android:drawable="@drawable/progressbar_indeterminate_holo1" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo2" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo3" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo4" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo5" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo6" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo7" android:duration="50" /> 
<item android:drawable="@drawable/progressbar_indeterminate_holo8" android:duration="50" /> 

nguồn Phong cách sao chép vào tập tin phong cách địa phương của tôi.

<style name="Widget"> 
    <item name="android:textAppearance">@android:attr/textAppearance</item> 
</style> 

<style name="Widget.ProgressBar"> 
    <item name="android:indeterminateOnly">true</item> 
    <item name="android:indeterminateBehavior">repeat</item> 
    <item name="android:indeterminateDuration">3500</item> 
</style> 

<style name="Widget.ProgressBar.Horizontal"> 
    <item name="android:indeterminateOnly">false</item> 
    <item name="android:indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item> 
</style> 

Và cuối cùng, đặt chiều cao tối thiểu thành 4dp trong tệp bố cục cục bộ của tôi.

<ProgressBar 
    android:id="@+id/pb_loading" 
    style="@style/Widget.ProgressBar.Horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:indeterminate="true" 
    android:minHeight="4dp" 
    android:minWidth="48dp" 
    android:progressDrawable="@drawable/progress_indeterminate_horizontal_holo" /> 
+0

Cảm ơn Subin! Tôi đã không thực sự thiết lập về việc này được nêu ra bởi vì tôi đã không chắc chắn bao nhiêu ngoài chỉnh sửa một drawable nó sẽ làm để làm, bây giờ chúng ta đều biết. Cám ơn vì đã chia sẻ. –

+0

Câu hỏi là về '? Android: attr/progressBarStyleHorizontal' và không phải' @ style/Widget.ProgressBar.Horizontal' –

1

Bắt đầu với giải pháp khác vì bản vẽ có thể hoạt động như dự định trong ảnh chụp màn hình. Chỉ cần đẩy nó lên 6dp.

mProgress = (ProgressBar) view.findViewById(R.id.fwv_progress); 
    mProgress.animate().withLayer().yBy(-6.0f*getResources().getDisplayMetrics().density).setDuration(0).start(); 
+0

Chỉ hoạt động ở cấp API 16 trở lên .. Có cách nào để khắc phục API 8 trở lên không? – bCliks

Các vấn đề liên quan