【问题标题】:Positional differences between creating views in XML or programatically以 XML 或以编程方式创建视图之间的位置差异
【发布时间】:2016-01-29 20:45:59
【问题描述】:

我在创建一种视图时遇到了麻烦。假设我正在尝试创建类似于时钟的东西。这意味着我们必须将数字定位在与中心的距离和角度。

我试图模拟一种定位两个元素的方法。一个中心 ImageView 和一个时钟编号。在 XML 中我有类似的东西:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lyt_rootView"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/ivCenter"
        android:background="@drawable/cid"/>

    <ImageView
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:id="@+id/ivNumber"
        android:background="@drawable/add_big"
        android:layout_marginLeft="-50dp"
        android:layout_marginTop="50dp"/>

</RelativeLayout>

而且效果很好,图像设置为应有的状态,将第一张图像 (ivCenter) 完全居中,并从中心留出一些边距以定位第二张图像。

现在我必须以编程方式执行相同的操作,以便创建大量模拟数字的图像视图。所以我有这个代码:

RelativeLayout lyt = (RelativeLayout) findViewById(R.id.lyt_rootView);
int avatarSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 70, getResources().getDisplayMetrics());
int distance = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());

// center image
ImageView ivImageCenter = new ImageView(this);
ivImageCenter.setImageResource(R.drawable.cid);
RelativeLayout.LayoutParams lp = new     RelativeLayout.LayoutParams(avatarSize,avatarSize);
lyt.addView(ivImageCenter, lp);


// first image (simulating a number in a clock)
ImageView ivNumber1 = new ImageView(this);
ivNumber1.setImageResource(R.drawable.add_big);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(avatarSize,avatarSize);
lp2.setMargins(distance, distance, 0, 0);
lyt.addView(ivNumber1, lp2);

但结果与 XML 示例不同。我没有看到我错过了什么。以编程方式创建视图的结果是两个 imageView 试图定位在屏幕的中心空间中,从而使第一个图像不在屏幕的中心。

我错过了什么?

【问题讨论】:

    标签: java android xml imageview position


    【解决方案1】:

    最后我通过创建一个以 XML 为中心的单像素布局来解决这个问题,该布局充当参考,并以编程方式在该参考视图中添加视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      相关资源
      最近更新 更多