1

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

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

主要的.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>

项目.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;
    }
}
4

1 回答 1

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;
于 2018-10-11T08:35:34.107 回答