ListView将wrap_content应用于android上的项目

时间:2017-09-22 23:41:00

标签: android listview

我有ListView我希望显示固定高度的自定义项目。项目布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:orientation="horizontal">

    <ProgressBar
        android:id="@+id/progress"
        style="?android:attr/progressBarStyle"
        android:layout_width="20dp"
        android:layout_height="match_parent"
        android:layout_gravity="center_vertical" />

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        app:srcCompat="@drawable/login_btn_facebook" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="10dp"
        android:text="TextView"
        android:textColor="@color/gameMenuItem"
        android:textSize="16sp"/>

</LinearLayout>

注意根LinearLayout的固定高度。 适配器类:

public class SelectorMenuLoggedOutAdapter extends BaseAdapter {
    public static final int ACTION_LOGIN_FACEBOOK=0;
    public static final int ACTION_LOGIN_GOOGLE=1;
    public static final int ACTION_FEEDBACK=2;
    public static final int ACTION_RATE_US=3;
    private LayoutInflater inflater;
    private Context context;
    public SelectorMenuLoggedOutAdapter(Context ctx) {
        inflater=LayoutInflater.from(ctx);
        context=ctx;
    }
    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View res=convertView;
        if (res==null) {
            switch (position) {
                case 0:
                    res = inflater.inflate(R.layout.selector_menu_item_login,null);
                    ((TextView)res.findViewById(R.id.title)).setText(context.getText(R.string.selector_menu_login_facebook));
                    ((ImageView)res.findViewById(R.id.icon)).setImageResource(R.drawable.login_btn_facebook);
                    res.findViewById(R.id.progress).setVisibility(View.GONE);
                    break;
                case 1:
                    res = inflater.inflate(R.layout.selector_menu_item_login,null);
                    ((TextView)res.findViewById(R.id.title)).setText(context.getText(R.string.selector_menu_login_google));
                    ((ImageView)res.findViewById(R.id.icon)).setImageResource(R.drawable.login_btn_google);
                    res.findViewById(R.id.progress).setVisibility(View.GONE);
                    break;
            }
        }
        return res;
    }
}

然而,当我将此适配器设置为我的列表视图时,它显示的行与layout_height = wrap_content一样:

some description 一些无用的细节告诉解析器它主要不是代码,没有什么可以添加arghhh。

1 个答案:

答案 0 :(得分:1)

在您的getView方法中,您应该通过父ViewGroup作为根,并false参数attachToRoot来扩展您的观看次数。

inflater.inflate(R.layout.selector_menu_item_login, parent, false)

这将允许项目层次结构的父级获取一组LayoutParams值,以按预期布局自身。