繁体   English   中英

具有2x2 imageview android的Gridlayout

[英]Gridlayout with 2x2 imageview android

我有一个从适配器获取4个图像视图的gridview,我希望将它们调整为2x2大小并安装在屏幕上。

这是该代码:

@Override
protected View createQuizContentView() {
    mAnswerView = new GridView(getContext());

    StateListDrawable selector = new StateListDrawable();
    selector.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(Color.LTGRAY));
    selector.addState(new int[]{-android.R.attr.state_pressed}, new ColorDrawable(Color.WHITE));

    mAnswerView.setSelector(selector);
    //mAnswerView.setSelector(R.drawable.selector_button);

    mAnswerView.setNumColumns(2);
    mAnswerView.setAdapter(new OptionsQuizAdapter(getQuiz().getOptions(),
            R.layout.imgitem_answer));


    mAnswerView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            mAnswered = position;
            allowAnswers(mAnswerView,position);
        }
    });
    return mAnswerView;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        convertView = inflater.inflate(mLayoutId, parent, false);
    }
    final ImageView imageView;
    String text = getText(position);
    Context context = parent.getContext();

    Resources resources = context.getResources();

    String stripped = text.replace("-", "");
    final int resourceId = resources.getIdentifier(stripped, "drawable",
            context.getPackageName());

    Drawable d = ContextCompat.getDrawable(context, resourceId);

    WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int height = size.y;

    double dviewheight = height/3.32;
    int viewheight = (int)dviewheight;

    imageView = (ImageView) convertView;
    imageView.setPadding(64, 64, 64, 64);

    convertView.setLayoutParams(newGridView.LayoutParams(GridView.AUTO_FIT, viewheight));

    imageView.setImageDrawable(d);

    return imageView;
}

目前,我正在通过获取屏幕尺寸并对其进行划分来设置gridview内imageview的高度,这在大多数设备分辨率下都可以正常工作,但是我仍然希望有一个更动态的解决方案,如果我向gridview添加更多行,该解决方案就可以使用。

它是这样的:

屏幕尺寸/幻数

当我在高度上使用GridView.AUTO_FIT时,它将添加很多无用的空间,并且我在右侧得到一个滚动条,如下所示:

垂直无用空间

我尝试了几种配置和延伸,但似乎都没有用。 任何方式来实现我想要的编程方式而无需xml?

试试这个:gridView.setNumColumns(2);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM