it-swarm.com.de

android Wie man Zeilen in der Rasteransicht streckt, um den Bildschirm zu füllen?

Ich habe einfache GridView (mit einer Spalte und sechs Zeilen), die ImageView mit TextView in der Zelle anzeigt (ich erstelle Adapter). Wie kann ich Zeilen dehnen, um die gesamte Bildschirmhöhe zu füllen? Jetzt habe ich etwas Platz unter den Zellen ...

main.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" 
Android:layout_height="fill_parent"
Android:orientation="horizontal">
<LinearLayout Android:layout_height="fill_parent"
    Android:layout_width="150dp" 
    Android:orientation="vertical"
    Android:id="@+id/left">
    <include layout="@layout/menu_grid"></include>
</LinearLayout>
<LinearLayout Android:layout_height="fill_parent"
    Android:layout_width="fill_parent" 
    Android:orientation="vertical"
    Android:id="@+id/right">
    <ImageView Android:src="@drawable/image"
        Android:layout_height="wrap_content" 
        Android:layout_width="wrap_content"
        Android:id="@+id/imageMain" 
        Android:layout_gravity="center">
    </ImageView>
</LinearLayout>

menu_grid.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent" Android:layout_height="fill_parent">
<GridView Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" 
    Android:id="@+id/gridView"
    Android:padding="10dp" 
    Android:verticalSpacing="10dp"
    Android:horizontalSpacing="10dp" 
    Android:numColumns="1"
    Android:columnWidth="100dp" 
    Android:stretchMode="columnWidth"
    Android:gravity="center"></GridView>

item.xml

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:orientation="vertical" Android:gravity="fill_horizontal">
<ImageView Android:src="@drawable/icon"
    Android:layout_height="70dp" Android:id="@+id/imageIcon"
    Android:layout_width="70dp" Android:layout_gravity="center_horizontal"></ImageView>
<TextView Android:id="@+id/textIcon" Android:text="TextView"
    Android:layout_gravity="center" Android:layout_height="wrap_content"
    Android:layout_width="wrap_content"></TextView>

ImageAdapter.Java

public class ImageAdapter extends BaseAdapter {
//....some code
//....

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view;
    if (convertView == null) {  
        LayoutInflater inflater = (LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.item, null);

        TextView text = (TextView) view.findViewById(R.id.textIcon);
        text.setText(labels[position]);

        ImageView image = (ImageView) view.findViewById(R.id.imageIcon);
        image.setImageResource(icons[position]);        

    } else {
        view = convertView;
    }

    return view;
}

}

17
snil

Was ich verstanden habe, ist die Frage: Wenn ich 6 Datenzeilen in der gridView ausfüllen muss, wie kann ich diese 6 Zeilen dazu bringen, den gesamten Bildschirm auszufüllen, anstatt 6 Zeilen und etwas Leerstelle unter der letzten Zeile anzuzeigen.

Um dies zu erreichen, müssen Sie die minimale Höhe des Layouts von gridView-Elementen (in Ihrem Fall item.xml) auf (Höhe des Bildschirms)/6 setzen, wobei 6 die Anzahl der zu füllenden Zeilen ist. Diese Mindesthöhe kann in dem von Ihnen verwendeten Adapter eingestellt werden.

So ermitteln Sie die Höhe des Bildschirms des Geräts:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int width = metrics.widthPixels;
int height = metrics.heightPixels;

finden Sie diese Werte in der Aktivität und machen Sie sie öffentlich statisch und verwenden Sie sie im Adapter. Ich hatte ein Problem beim Finden dieser Werte in der Adapterklasse

dann, um die minimale Höhe einzustellen:

view = inflater.inflate(R.layout.item, null);
view.setMinimumHeight(GridViewActivity.height/6);

Ich habe es ausprobiert, nachdem ich den Beitrag gesehen hatte, und es hat perfekt funktioniert.

29
Archie.bpgc

Wenn Sie nur den Abstand zwischen den Zeilen vergrößern möchten, können Sie das Auffüllen verwenden. Es sollte funktionieren. Sie können das Auffüllen durch XML oder programmgesteuert je nach Anforderung festlegen.

// this you can set inside your view.
Android:paddingLeft="5px"
Android:paddingRight="5px"
Android:paddingTop="10px"
Android:paddingBottom="10px"

// this you can set to your any widgets like TextView/Layouts/Buttons etc..
setPadding(top, left, bottom, right);
3
Daud Arfin

Erweitern Sie ein Layout, sagen Sie Framelayout, und überschreiben Sie die onMeasure-Methode. 

public class CameraView extends FrameLayout 

public TextView titleView;

public CameraView(Context context,AttributeSet attrs) {
    super(context, attrs)
    titleView = rootView.findViewById(R.id.titleView);
}


@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}

Sie können diese Ansicht dann in Ihrem BaseAdapter verwenden und layout_width und layout_height auf match_parent setzen.

0
Edu