android 布局中控件居中且向左偏移的写法

本文介绍了如何在Android布局中实现控件居中并进行左右偏移。通过两种方法实现这一效果:一是使用FrameLayout并设置控件属性;二是利用translationX属性。尽管第二种方法在Eclipse预览时存在显示问题,但实际运行效果相同。作者最终推荐使用第一种方案,因为它更直观且易于理解。

目标是实现类似如图的效果,居中且向左偏移若干,居中且向右偏移若干


在eoe 提问后大神给出的方案是:


 

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
 
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginRight="70dp"
        android:background="@drawable/red_circle" />
 
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:background="@drawable/green_circle" />
 
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginLeft="70dp"
        android:background="@drawable/blue_circle" />
 
</FrameLayout>

 

 

我自己也琢磨了一种方法:

   上面的imageview 使用android:translationX 属性,-70dp表示向左偏移70dp,70dp表示向右偏移70dp

也可以实现同样的效果

 

总结:

第一种方案限定外层使用FrameLayout,直观,明了

第二种方案 不限layout,但是在eclipse预览的时候发现很奇怪的问题,就是虽然view 移动了,但是图形工具里拿鼠标去点那个view的时候发现他还在原来的位置上,不知道这是adt的bug,还是什么原理。但是我有一种预感是,android 界面初始化以后,有一个类似平移动画的动作,这点有待证实。所以最终我还是选择了第一种方案。

<think>好的,我现在需要解决用户的问题:如何在Delphi或C++Builder中使cxListView控件水平和垂直居中。用户提到了使用OnResize事件,并参考了相关的引用内容,特别是引用[1]和[2]提到了利用OnResize事件动态调整控件位置。同时,用户还提供了引用[3]中的代码示例,虽然那个是针对编辑控件的文本居中,但可能对布局调整有参考价值。引用[4]则说明VCL在Windows 11中的兼容性,可能需要考虑不同系统的适配,但暂时可能不是主要问题。 首先,我需要明确cxListView控件属于第三方组件库,可能是DevExpress的组件,所以可能需要特定的属性或方法。但用户的问题是关于如何居中显示,所以可能需要通用的方法,比如调整控件的Left和Top属性,或者设置Align属性为alNone,然后计算位置。 根据引用[1]和[2]的建议,应该在Form的OnResize事件中编写代码,这样当窗体大小改变时,控件的位置会自动调整。所以步骤应该是: 1. 在窗体设计器中放置cxListView控件,确保其Align属性为alNone,否则无法手动设置位置。 2. 在窗体的OnResize事件处理程序中,计算控件居中位置。 3. 设置cxListView的Left和Top属性,使其水平和垂直居中。 具体来说,水平居中的Left值等于(Form.ClientWidth - cxListView.Width) / 2;垂直居中的Top值等于(Form.ClientHeight - cxListView.Height) / 2。需要注意的是ClientWidth和ClientHeight是窗体客户区的尺寸,而不是整个窗体的宽度和高度,这样计算更准确。 另外,用户提供的引用[3]中的代码是用于编辑控件内部文本的居中,虽然不直接相关,但思路类似,都是通过计算位置来实现居中。可能需要注意控件本身是否有边框或其他属性影响尺寸计算。 需要验证这些步骤是否正确,并确保在C++Builder和Delphi中代码的写法。例如,在Delphi中,Form的OnResize事件处理程序可能写在FormCreate或者单独的事件中。同时,需要处理窗体初始显示时的位置,以及在调整大小时的位置更新。 可能还需要考虑控件的Anchors属性,如果设置为[akLeft, akTop],则调整窗体大小时控件位置不会自动改变,需要手动调整。而如果设置为其他组合,可能会影响居中效果,所以最好将Anchors设置为空,或者确保在OnResize事件中覆盖位置。 此外,用户提到的是水平和垂直居中,所以需要同时计算Left和Top。如果控件的大小是固定的,直接计算即可;如果控件大小需要随窗体调整,可能需要调整Width和Height,但用户的问题可能只是定位,而不是改变大小。 最后,根据引用[4],需要注意不同Windows版本的兼容性,但VCL本身处理应该没问题,只要不假设固定分辨率或窗体大小。 总结步骤:在OnResize事件中,设置cxListView的Left和Top为(ClientWidth - Width)/2和(ClientHeight - Height)/2,确保Align为alNone,Anchors不冲突。</think>在Delphi或C++Builder中实现`cxListView`控件居中显示,可以通过以下步骤完成: ### 步骤说明 1. **设置控件属性** 确保`cxListView`的`Align`属性为`alNone`(默认值),避免自动对齐影响手动定位。同时检查`Anchors`属性是否为`[akLeft, akTop]`(默认值),否则可能因锚点导致位置偏移。 2. **编写窗体OnResize事件** 在窗体的`OnResize`事件中动态计算控件位置。窗体大小变化时(包括初始创建、最大化/最小化、手动调整等),此事件会被触发,确保控件始终居中[^1][^2]。 ### 代码实现 #### Delphi版本 ```delphi procedure TForm1.FormResize(Sender: TObject); begin cxListView1.Left := (ClientWidth - cxListView1.Width) div 2; cxListView1.Top := (ClientHeight - cxListView1.Height) div 2; end; ``` #### C++Builder版本 ```cpp void __fastcall TForm1::FormResize(TObject *Sender) { cxListView1->Left = (ClientWidth - cxListView1->Width) / 2; cxListView1->Top = (ClientHeight - cxListView1->Height) / 2; } ``` ### 注意事项 - **控件尺寸调整** 若需控件随窗体大小等比缩放,可修改`cxListView`的`Width`和`Height`属性,例如: ```delphi cxListView1.Width := ClientWidth * 0.8; // 宽度占窗体80% cxListView1.Height := ClientHeight * 0.6; ``` 再按上述方法居中。 - **兼容性** VCL框架已原生支持多分辨率适配,代码在Windows 11等新系统中无需额外修改即可运行[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值