2013-08-14 4 views
0

У меня есть ListView внутри HorizontalScrollView, scrollbartrack занимает область справа. Когда я перехожу на Scrollbarstyle:insideOverlay, он все еще не занят. Если я перейду на полосы прокрутки: ни одна область не исчезнет, ​​поэтому я знаю, что она имеет какое-то отношение к полосам прокрутки.ListView Полосы прокрутки insideOverlay no effect

Я тестировал все стили на полосах прокрутки и играл с отступом, а маржа не нашла способа получить его на самом деле. Кажется, что HorizontalScrollView создает проблему, если я удалю, что полосы прокрутки наложены правильно.

В этом коде я устанавливаю наложение как в xml, так и в коде, но ни один из них не работает.

Вот базовый рабочий пример, где возникает проблема. В моем реальном коде макет не просто зеленый, поэтому решение с раскраской трассы зеленого не будет работать.

public class ScrollTest extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_scroll_test); 
     ListView lv= getListView(); 

     lv.setDivider(null); 

     //Just to make sure! 
     lv.setScrollBarStyle(ListView.SCROLLBARS_INSIDE_OVERLAY); 

     // create the grid item mapping 
     String[] from = new String[] {"rowid", "col_1", "col_2", "col_3", "col_4", "col_5"}; 
     int[] to = new int[] { R.id.item1, R.id.item2, R.id.item3, R.id.item4, R.id.item5 , R.id.item6}; 

     // prepare the list of all records 
     List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
     for(int i = 0; i < 50; i++){ 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("rowid", "" + i); 
      map.put("col_1", "col_1_item_" + i); 
      map.put("col_2", "col_2_item_" + i); 
      map.put("col_3", "col_3_item_" + i); 
      map.put("col_4", "col_4_item_" + i); 
      map.put("col_5", "col_5_item_" + i); 
      fillMaps.add(map); 
     } 

     // fill in the grid_item layout 
     SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.row, from, to); 
     lv.setAdapter(adapter); 
    } 
} 

И соответствующий xml для макета. activty_scroll_test.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent"> 
      <ListView 
      android:id="@android:id/list" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:scrollbarStyle="insideOverlay"/> 
    </HorizontalScrollView> 

row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:background="@android:color/holo_green_dark" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <TextView android:id="@+id/item1" 
      android:text="row_id" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="40dip" 
      android:padding="5dp" 
     /> 
     <TextView android:id="@+id/item2" 
      android:text="col_1" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
      android:padding="5dp" 
     /> 
     <TextView android:id="@+id/item3" 
      android:text="col_2" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
      android:padding="5dp" 
     /> 
     <TextView android:id="@+id/item4" 
      android:text="col_3" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
      android:padding="5dp" 
     /> 
     <TextView android:id="@+id/item5" 
      android:text="col_4" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
      android:padding="5dp" 
     /> 
     <TextView android:id="@+id/item6" 
      android:text="col_5" 
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:width="100dip" 
      android:padding="5dp" 
     /> 
</LinearLayout> 

ответ

0

От android:scrollbarStyle (правда, не самая лучшая документация в Android):

При вставке, они добавляют к Перетяжка Посмотреть. [..] Если вы хотите, чтобы они появлялись на краю представления, игнорируя отступы, вы можете использовать outsideOverlay или outsideInset.

Так, установив его на insideOverlay, без заполнения на ListView и без полей на элементы списка, вы получите скроллбар поверх элементов списка.

Вы можете использовать Hierarchy Viewer, чтобы выяснить, откуда происходит интервал. Вероятно, добавление или поля в списках, а именно: 5dp на @+id/item6.

+0

Спасибо за ответ, к сожалению, мне не повезло с такими решениями. Я попытался увидеть, где он находится, как с помощью Hierarchy Viewer, так и с настройкой цветов фона на разных элементах макета. Ничего из этого, похоже, не помогает, единственное, что я удалил, - это полностью удалить ScrollBars. – larlin

+0

Я просто понял, что это немного странная настройка. Предполагается, что HorizontalScrollView должен иметь 1 ребенка, которому предоставляется неограниченный размер. Это может вызвать странность, когда дети ListView заполнены. Попробуйте добавить слой между ListView и HSV - LinearLayout может быть достаточно. – Delyan

+0

Я проверил, что никакой разницы. – larlin

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

  • Нет связанных вопросов^_^