Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 设置新的宽度和高度后,不会重新绘制视图_Android - Fatal编程技术网

Android 设置新的宽度和高度后,不会重新绘制视图

Android 设置新的宽度和高度后,不会重新绘制视图,android,Android,我正因为这个问题而自杀,所以我急需帮助 我有一个带有自定义布局的片段,该片段以编程方式填充为线性布局,该线性布局由imageview和textview组成 用户可以动态更改片段的大小,问题就在这里 我在片段视图上设置了onLayoutChange listener,在该视图中,我根据容器的大小更改textview的大小,并且当容器大小更改时,所有内容都已正确设置,但视图本身不会重新绘制,在更改后,我所能看到的是具有旧宽度和高度的旧视图,就像新的宽度和高度一样高度从未应用过 我试图使textvie

我正因为这个问题而自杀,所以我急需帮助

我有一个带有自定义布局的片段,该片段以编程方式填充为线性布局,该线性布局由imageview和textview组成

用户可以动态更改片段的大小,问题就在这里

我在片段视图上设置了onLayoutChange listener,在该视图中,我根据容器的大小更改textview的大小,并且当容器大小更改时,所有内容都已正确设置,但视图本身不会重新绘制,在更改后,我所能看到的是具有旧宽度和高度的旧视图,就像新的宽度和高度一样高度从未应用过

我试图使textview无效,并试图在父视图上调用requestlayout,但没有成功

就好像设置了新视图,但显示了旧视图一样

代码如下:

private void GenerateViews(View view) {

    for (final Item artikl : listaArtikala) {

        LinearLayout l_artikl = new LinearLayout(getActivity());
        l_artikl.setPadding(10, 5, 0, 5);

        final ImageView img = new ImageView(getActivity());         
        img.setMinimumWidth(image_width);
        img.setMinimumHeight(image_height);
        img.setScaleType(ScaleType.FIT_CENTER);

        l_artikl.addView(img);

        final TextView txv = new TextView(getActivity());

    // dummy if to trigger after container size changes.        
        if(txv_artikl_width > 265)
            txv.setWidth(300);
        else
            txv.setWidth(100);

        txv.setWidth(300);              
        txv.setHeight(txv_artikl_height);
        txv.setText(artikl.getName());
        txv.setTextSize(15);
        txv.setClickable(true);

        txv.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
        txv.setBackgroundColor(getResources().getColor(
                R.color.LightSteelBlue));
        txv.setPadding(5, 0, 10, 5);            

        l_artikl.addView(txv);

        ((ViewGroup) view).addView(l_artikl);
    }


    view.requestLayout();
}

非常感谢您的帮助。

在您的if语句之后,您可以重置文本视图的宽度:

  if(txv_artikl_width > 265)
        txv.setWidth(300);
    else
        txv.setWidth(100);

    txv.setWidth(300); 

您可能不想这样做,对吧?

我没有使用ActionBar选项卡。我使用的是自定义布局,我用视图填充它,例如,如果我用textview填充它,然后在运行时我更改textview的大小,我将看不到它们的新大小。我将看到它们的旧大小,好像什么也没变。对不起,我想回答另一个问题。我会编辑一下我的答案。哦,我没有看到,但即使没有它,它仍然是一样的。设置了新的宽度,但未使用新参数重新绘制textview:)我还有一个问题。当我从布局中删除所有子视图,然后生成新的子视图时,它们都不显示。布局为空。我尝试了invalidate(),requestLayout()。