我做了一个以某种方式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;
}
}