如何使用宽度和高度的百分比将子视图添加到父RelativeLayout

时间:2014-06-27 15:33:56

标签: android android-layout

我有一个父RelativeLayout,我想用它来容纳一些项目视图。想象一下,洗牌一堆卡片,看到一堆卡片,彼此略微歪斜,像堆叠一样彼此叠加。我通过迭代集合来实现这一点,展开了一个布局XML文件,它是每个"卡的模板。在将该视图添加到父RelativeLayout之前,设置X,Y和旋转属性,然后使用该项详细信息填充它。

这样可行,但每张卡的宽度和高度与父RelativeLayout相同,因此如果它们不旋转,它们将占用整个父布局。旋转的那些,它们的角落从RelativeLayout的边界消失,你看不到它们。

我想要的是每个子视图的宽度和高度为父亲RelativeLayout的90%,这样随着堆叠视图的旋转,您可以看到下方的角落出来了两侧。我不知道怎么做。

这是父亲RelativeLayout

<RelativeLayout 
            android:id="@+id/layoutview"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_above="@id/tayle_buttons"
            android:layout_height="wrap_content" 
            android:layout_width="fill_parent"
            android:background="#005500"/>

这是我的片段

的onCreateView()方法
View rootView = inflater.inflate(R.layout.fragment_tayleresults, container, false);             
        windowwidth = m_windowManager.getDefaultDisplay().getWidth();       
        screenCenter = windowwidth / 2;     

        parentView = (RelativeLayout) rootView.findViewById(R.id.layoutview);

这是填充每个子视图的代码(删除了不必要的代码)

final View m_view = inflater.inflate(R.layout.fragment_tayle, null);            
        RelativeLayout m_topLayout = (RelativeLayout) m_view.findViewById(R.id.t_layout);           
                   //Populate the View control values, eg TextViews, ImageViews here

m_view.setX(0);         
        m_view.setY(0);         
        m_view.setTag(i);           

        if (i == 0) { m_view.setRotation(0); } 
        else if (i == 1) { m_view.setRotation(-5); } 
        else if (i == 2) { m_view.setRotation(3); } 
        else if (i == 3) { m_view.setRotation(7); } 
        else if (i == 4) { m_view.setRotation(-2); } 
        else if (i == 5) { m_view.setRotation(5); }         
        parentView.addView(m_view);

最后,每个&#34;卡&#34;

的子布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/t_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="4dip" 
    android:weightSum="2"
    android:background="@drawable/tayle_border"
    >

<ImageView 
        android:id="@+id/genre"
        android:layout_height="60dp"
        android:layout_width="50dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true" />

   ...and so on

1 个答案:

答案 0 :(得分:0)

要了解父级的宽度和高度,您可以实现视图树观察器。此代码是here的修改后的代码段:

ViewTreeObserver viewTreeObserver = relativeLayout.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
 viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
      view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
      viewWidth = relativeLayout.getWidth();
      viewHeight = relativeLayout.getHeight();
    }
  });
}

现在您拥有视图的宽度和高度(以像素为单位)。您现在可以相应地缩放imageview。这里 relativeLayout.getWidth()返回像素,但是在 layout-pass 之前或期间调用将返回0. Viewtreeobserver用于缓解它。