Android网格视图调整到屏幕大小

pbwdgjma  于 2022-11-20  发布在  Android
关注(0)|答案(4)|浏览(155)

我的应用程序的网格视图有3行和3列。我希望它填充屏幕,而不考虑设备的屏幕大小。
我试着获取窗口大小并相应地设置layoutparams。但这并没有给出一个完美的对齐,因为它在linearlayout中与weightsum一起工作。
那么我们可以使用gridview的weightsum吗?或者还有其他的android属性可以使用吗?非常感谢你的时间和回应。

<GridView
                xmlns:android="http://schemas.android.com/apk/res/android"
                android:id="@+id/gridview"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_below="@+id/text1view"
                android:background="@drawable/home_bg"
                android:gravity="center"
                android:horizontalSpacing="10dip"
                android:numColumns="3"
                android:stretchMode="columnWidth" />

每个网格项被

<?xml version="1.0" encoding="utf-8"?>
<ImageView
    android:id="@+id/grid_item_image"
    android:layout_width="wrap_content"
    android:layout_height="75dip"
    android:layout_margin="0dip"
    android:padding="0dip" >
</ImageView>

<TextView
    android:id="@+id/grid_item_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_below="@+id/grid_item_image"
    android:gravity="center_horizontal"
    android:padding="0dip"
    android:textColor="#000000"
    android:textSize="10sp" >
</TextView>

适配器代码:

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater) mContext
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.griditems, null);
        holder = new ViewHolder();
        holder.text1 = (TextView) convertView
                .findViewById(R.id.grid_item_text);

        holder.image = (ImageView) convertView
                .findViewById(R.id.grid_item_image);

        // if it's not recycled, initialize some attributes
        holder.image.setImageResource(gridItemIds[position]);
        holder.text1.setText(gridTitles[position]);
        int h = mContext.getResources().getDisplayMetrics().densityDpi;

        // holder.image.setLayoutParams(new LayoutParams(h-50,h-50));
        convertView.setLayoutParams(new GridView.LayoutParams(h - 45,
                h - 39));
        // holder.image.setScaleType(ImageView.ScaleType.CENTER_CROP);
        // holder.image.setScaleType(ImageView.ScaleType.FIT_XY);
        // holder.image.setPadding(20, 20, 20, 20);

        // convertView.setLayoutParams(new GridView.LayoutParams(Utils
        // .getLayoutParameter(), Utils.getLayoutParameter()+50));

        holder.image.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                new ModuleManager().startModuleACtivity(position, mContext);
            }
        });
        convertView.setTag(holder);
    } else {

        holder = (ViewHolder) convertView.getTag();

    }

    return convertView;
}

static class ViewHolder {
    TextView text1;
    ImageView image;

}

请看线路

convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

我在不同大小的模拟器上进行了一些试验,得出了这个值。但我认为这不是定义高度和宽度的正确方法。

svujldwt

svujldwt1#

据我所知你的问题,因为你没有张贴任何代码,你想做的是,你希望网格视图出现在全屏。
首先,您必须使用某种布局来放置网格视图。请执行以下操作:
使布局的高度和宽度填充父项:

android:layout_width="fill_parent"
android:layout_height="fill_parent"

然后,将gridview高度和宽度也设置为fill_parent。
好吧,这只是一个假设的解决方案,你可能已经这样工作了。把一些代码会更好。希望这对你有用。

**更新:**问题可能在于:

convertView.setLayoutParams(new GridView.LayoutParams(h-45, h-39));

更改为:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
 convertView.setLayoutParams(new GridView.LayoutParams(params));

希望这对你有用。

erhoui1w

erhoui1w2#

@preetha:首先看看这个例子,我用了这个,我的布局不影响设计的高度和宽度....
http://developer.android.com/resources/tutorials/views/hello-gridview.html
在xml中设置以下内容

android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"

希望这对你有帮助。

nuypyhwy

nuypyhwy3#

x1c 0d1x这里我只更改了宽度和高度,以匹配父级和换行内容。

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:id="@+id/textView5"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:paddingTop="5dp"
            android:text="Category"
            android:textSize="20dp" />

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="170dp"
            android:layout_height="170dp"
            android:layout_gravity="center_horizontal"
            android:layout_marginTop="5dp"
            android:src="@drawable/iconclothcolor" />

        <TextView
            android:layout_width="wrap_content"
            android:id="@+id/textView3"
            android:layout_marginTop="2dp"
            android:textSize="16dp"
            android:textColor="#F37E98"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Shirt" />

        <TextView
            android:layout_width="wrap_content"
            android:id="@+id/textView4"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Gender - Male" />

        <TextView
            android:layout_width="wrap_content"
            android:id="@+id/textView8"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Quantity - 10" />

        <TextView
            android:layout_width="wrap_content"
            android:id="@+id/textView6"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="Size - S" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:id="@+id/textView10"
            android:textSize="20dp"
            android:text="Offer" />

        <TextView
            android:layout_width="wrap_content"
            android:id="@+id/textView7"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="20dp"
            android:textColor="#F37E98"
            android:text="Price - 1500 Rs" />

    </LinearLayout>

</androidx.cardview.widget.CardView>

"在主类中加上这个--〉"

GridLayoutManager gridLayoutManager=new GridLayoutManager(this,2);
        recyclerView.setLayoutManager(gridLayoutManager);
p5fdfcr1

p5fdfcr14#

将Gridview调整为屏幕大小
onCreate中取rowHeight:

root = binding.root

view.onGlobalLayout {
            rowHeight =
                root.measuredHeight / currentPageNumberOfRow
            fillView(appsList)
        }

在适配器中:

override fun getView(position: Int, ConvertView: View?, parent: ViewGroup?): View? {
            var mConvertView = ConvertView
            if (layoutInflater == null) {
                layoutInflater =
                    context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as 
                        layoutInflater!!.inflate(R.layout.item_app_shortcut, null)
          }

           if (mConvertView == null) {
                mConvertView =
                layoutInflater!!.inflate(R.layout.item_child_launcher_app, null)
               
        //Add this: 

         mConvertView.layoutParams = AbsListView.LayoutParams(GridView.AUTO_FIT, rowHeight)

            }

不要忘记设置行图像:

android:layout_width="0dp"
    android:layout_height="0dp"

适合屏幕大小

相关问题