Gridview中的方形项目

时间:2012-10-01 11:33:12

标签: android gridview

我做了CustomAdapter以某种方式在GridView中显示我的项目。在该CustomAdapter中,我覆盖了getView()方法。问题是,我想将我的网格项的高度设置为等于它们的宽度,每个智能手机的宽度可能不同。我已经看到了一个解决方案,但这对我来说没有用(它说我必须覆盖自定义视图中的onChanged()方法)。无论如何,任何人都可以让我走上正确的道路来处理这个问题吗?

我的xml / .java文件的代码是:

main.xml中

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backrepeat"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/horizontalLine"
        android:layout_width="fill_parent"
        android:layout_height="8dip"
        android:background="#33c2bd" />

    <GridView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/gvLevelSelector"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/backrepeat"
        android:columnWidth="100dp"
        android:gravity="center"
        android:horizontalSpacing="2dp"
        android:numColumns="3"
        android:stretchMode="columnWidth"
        android:verticalSpacing="2dp" >
    </GridView>

</LinearLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content" 
     android:background="#33c2bd">
     <TextView
       android:id="@+id/tvLevel"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerHorizontal="true" 
       android:text="Test here" />
     <TextView
       android:id="@+id/tvLevelScore"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:paddingBottom="15dip"
       android:layout_below="@+id/tvLevel"
       android:layout_centerHorizontal="true" 
       android:text="test2"/>
   </RelativeLayout>

自定义适配器

public class LevelSelectorAdapter extends ArrayAdapter<LevelSelectorItem> {

    public LevelSelectorAdapter(Context C, List<LevelSelectorItem> Arr) {
        super(C, R.layout.levelselector_item, Arr);
    }

    @Override
    public View getView(int position, View v, ViewGroup parent) {
        View mView = v;

        if (mView == null) {

            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            mView = vi.inflate(R.layout.item, null);
        }

        TextView level = (TextView) mView.findViewById(R.id.tvLevel);
        TextView levelScore = (TextView) mView.findViewById(R.id.tvLevelScore);

        if (mView != null) {

            level.setText(getItem(position).getLevel());
            levelScore.setText("test");             

        }
        return mView;
    }
}

1 个答案:

答案 0 :(得分:0)

使用资源并显示指标。 设置视图的布局参数。

您可以在onBindView期间执行此操作。

这是我使用的摘录:

        LayoutInflater.from(getContext()).inflate(R.layout.activity_cocktails_cocktail_tile,this);
    ConstraintLayout rootLayout = findViewById(R.id.cocktailTileRootLayout);
    rootLayout.getLayoutParams().width = getContext().getResources().getDisplayMetrics().widthPixels/2;
    rootLayout.getLayoutParams().height = getContext().getResources().getDisplayMetrics().widthPixels/2;