web-dev-qa-db-ja.com

androidグリッドビューの行を拡大して画面全体に表示するにはどうすればよいですか?

セルにTextViewを含むImageViewを表示する(1つの列と6つの行を含む)単純なGridViewがあります(アダプターを作成します)。画面全体の高さを満たすように行を伸ばす方法は??今、私はセルの下にいくつかのスペースがあります...

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

私が理解したところ、問題は、gridViewに6行のデータを入力する場合、最後の行の下に6行と空のスペースを表示する代わりに、これらの6行を画面全体に表示するにはどうすればよいかということです。

これを実現するには、gridViewアイテムレイアウトの最小の高さ(この場合はitem.xml)を(画面の高さ)/ 6に設定する必要があります。ここで、6は(入力する必要のある行数)です。この最小の高さは、使用しているアダプターで設定できます。

デバイスの画面の高さを見つけるには:

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

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

アクティビティでこれらの値を見つけ、それらをpublic staticにしてアダプターで使用します。アダプタークラスでこれらの値を見つけるのに問題がありました。

次に、最小の高さを設定します。

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

投稿を見た後私はこれを試しました、そしてそれは完全に働きました。

30
Archie.bpgc

行間のスペースを増やしたいだけの場合は、パディングを使用できます。 xmlを介して、または要件に基づいてプログラムでパディングを設定できます。

// 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

Framelayoutなどのレイアウトを拡張してから、onMeasureメソッドをオーバーライドします。

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);
}
}

次に、BaseAdapterでこのビューを使用して、layout_widthおよびlayout_heightmatch_parentに設定できます。

0
Edu