使用LayoutParams在RelativeLayout中居中自定义视图

时间:2012-03-02 20:31:07

标签: android android-layout relativelayout

我正在尝试将相对布局中的自定义视图居中。此图像旋转,因此它需要位于布局的中心,因此它不会超出布局边界。现在它显示在左上角。这是我的代码:


container = (RelativeLayout) findViewById(R.id.lay_container);

bmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.charlie_sheen);

rotate_view = new RotationView(this, bmap);

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

params.addRule(RelativeLayout.CENTER_IN_PARENT);

rotate_view.setLayoutParams(params);
container.addView(rotate_view);

这是我的相对xml布局

 <RelativeLayout
            android:id="@+id/lay_container"
            android:layout_width="200dip"
            android:layout_height="200dip"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/txt_1"
            android:layout_marginRight="45dp"
            android:layout_marginTop="56dp" 
            android:padding="10dip" />

你有什么想法吗?我知道这个问题可能有一个简单的解决方案,但我似乎无法找到答案。将LayoutParameter设置为center应该将视图居中放置在右侧?

提前感谢您的任何帮助或建议

2 个答案:

答案 0 :(得分:2)

总体而言,添加自定义视图的代码看起来是正确的。这可能是一个弱建议,但为了排除视图自定义可能导致的任何问题,您可以尝试以两种方式之一修改代码。

选项1:使用addRule()的显式形式,即

params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);

选项2:使用addView()的显式形式,不要在视图本身上设置参数,即

//Omit the line above this one
container.addView(rotate_view, params);

除此之外,或许对自定义视图有一些洞察力,特别是它如何衡量自身(它不是试图填充父级)?

HTH

答案 1 :(得分:0)

好的Devunwired我会这样做。

以下是我如何使图像居中。

1)我使用BitmapDrawable setGravity(Gravity.CENTER)属性将图像置于画布中心。

2)我将RotationView置于我的相对布局中:

 <RelativeLayout
   android:id="@+id/image_container"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_below="@+id/txt_1"
   android:layout_centerHorizontal="true" >

    <com.mobicartel.acceldatatester.RotationView
       android:id="@+id/rotate_view"
       android:layout_centerInParent="true"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content" />

</RelativeLayout>

我将添加背景并告知您。 (现在图像根本没有显示。有时你需要向后退一步才能朝正确的方向走两个!)