2013-02-26 1 views
2

По умолчанию галерея выравнивается по центру. Поведение, которое я хочу, состоит в том, чтобы выровнять первый элемент в родительском макете, а не центрировать его. Как это можно сделать? Я также прошел через ссылку: https://stackoverflow.com/questions/4341158/android-align-first-item-in-gallery-to-the-leftКак выровнять первый элемент галереи слева?

Но это не работает для устройств 2.3.x. Как я могу это достичь?

+0

Ответ предложен в добавленной ссылке, не работающей на устройстве HTC 2.3.3, а также в Kindle Fire. – Nitin4Android

ответ

0

Ответ в приведенной ссылке: https://stackoverflow.com/questions/4341158/android-align-first-item-in-gallery-to-the-left работает отлично. Проблема в том, что у меня была обернутая галерея в FrameLayout, и, следовательно, она не работает, когда я изменил ее на RelativeLayout, она работает нормально.

+0

dead link 404 error –

2

частная пустота alignGalleryToLeft (Галерея) {

WindowManager manager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 

    int galleryWidth = manager.getDefaultDisplay().getWidth(); 

    // We are taking the item widths and spacing from a dimension resource 
    // because: 
    // 1. No way to get spacing at runtime (no accessor in the Gallery 
    // class) 
    // 2. There might not yet be any item view created when we are calling 
    // this 
    // function 
    int itemWidth = getsize(105); 
    int spacing = getsize(10); 

    // The offset is how much we will pull the gallery to the left in order 
    // to simulate left alignment of the first item 
    final int offset; 
    if (galleryWidth <= itemWidth) { 
     offset = galleryWidth/2 - itemWidth/2 - spacing; 
    } else { 
     offset = galleryWidth - itemWidth - 2 * spacing; 
    } 

    // Now update the layout parameters of the gallery in order to set the 
    // left margin 
    MarginLayoutParams mlp = (MarginLayoutParams) gallery.getLayoutParams(); 
    mlp.setMargins(-offset, mlp.topMargin, mlp.rightMargin, 
      mlp.bottomMargin); 
} 

GETSIZE() является методом:

public int getsize(int sizeInDip) { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    metrics = getResources().getDisplayMetrics(); 
    return (int) ((sizeInDip * metrics.density) + 0.5); 
} 

передать ваше значение в DPI в этот метод.

Надеюсь, это сработает для вас.