在relativelayout中动态移动视图

时间:2011-07-19 11:03:16

标签: android-layout relativelayout

我正在做一个pageindex,当前页面应该用箭头图像(imageview)突出显示。

索引是RelativeLayout,添加了25个textviews:

for (int i = 0; i < 25; i++) {
        TextView tv = new TextView(this);
        tv.setText(Integer.toString(i+1));
        tv.setGravity(Gravity.CENTER);
        int id = 2000+i;
        tv.setId(id);
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.FILL_PARENT);
        if(i==0)
            params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
        else
            params.addRule(RelativeLayout.RIGHT_OF, prevViewId);
        prevViewId = id;
        rl.addView(tv,params);
    }

当页面改变时,我会做这样的事情:

        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_BOTTOM, 2000+i);
        params.addRule(RelativeLayout.ALIGN_RIGHT, 2000+i);
        params.addRule(RelativeLayout.ALIGN_LEFT, 2000+i);
        arrowImageView.setLayoutParams(params);
        rl.requestLayout();
        rl.invalidate();

一切看起来都是正确的,我可以将箭头放在“启动”的任意页面上,但是当页面改变时箭头不会移动。我已经调试并验证代码运行并且一切看起来都正确,但箭头仍然停留在第一个位置。如果我强制删除并添加新的imageview而不是更新LayoutParams,则箭头将完全消失。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题..我还希望在参考布局中的运行时移动我的视图。所以,如果有人帮助那将是非常棒的。

我认为上面发生的是箭头IS的位置发生了变化,但它没有更新到屏幕上。如果我错了,请纠正我,拜托,这只是我的猜测,因为我也有同样的问题。

CNC中 经过一番乱搞之后,我发现对我有用的是首先删除然后添加。 rl.removeView(TV); rl.addView(TV,则params);

CNC中 此外,你可以将移动视图的参数保存为一个独特的变量,这样所有ude必须做的就是改变边距...... 例如:代替params,让它成为自己的名字“arrowParams” 然后移动它只需要:arrowParams.leftMargin = 2000 + i;等等...

相关问题