【问题标题】:Gridlayout with 2x2 imageview android带有2x2 imageview android的Gridlayout
【发布时间】:2016-08-29 09:57:13
【问题描述】:

我有一个从适配器获取 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 内的图像视图的高度,这在大多数设备分辨率上都可以正常工作,但我仍然更喜欢一个更动态的解决方案,如果我添加更多行到网格视图。

看起来是这样的:

Screensize/magic number

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

Useless space vertically

我尝试了几种配置和拉伸,但似乎都不起作用。有什么方法可以在没有 xml 的情况下以编程方式实现我想要的?

【问题讨论】:

  • Any way to achieve what i want programmatically without xml?为什么你想用艰难的方式
  • 如果您使用 API 级别 21 及更高级别,您可以尝试将所有单独的 viewsweight 设置为 1。这会分配 GridLayout 的所有宽度和高度。

标签: java android user-interface gridview imageview


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多