如何设置relativelayout高度等于它的宽度?

问题描述:

我搜索了很多,以找出它的工作原理,我什么都没有。 我发现一些Java代码动态地做到这一点,但没有工作主题的蚂蚁,当打开程序,显示一个力量关闭。 这是我的代码:如何设置relativelayout高度等于它的宽度?

<LinearLayout android:baselineAligned="false" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 

    <RelativeLayout 
     android:id="@+id/rlv1" 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:layout_weight="1" 
     android:background="@drawable/rectengle2" > 
    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/rlv2" 
     android:layout_width="fill_parent" 
     android:layout_weight="1" 
     android:background="@drawable/rectengle" > 
    </RelativeLayout> 
</LinearLayout> 

,你可以看到我创建了一个矩形形状,并用lineaer布局父用它在一个相对布局和我分裂该线性布局verticali两个部分的每个相对布局。 现在我想要设置这些相对的布局高度等于它的宽度来得到一个纯正方形的矩形。 我尝试了很多方法,但...可以帮助我的任何人吗? thnaks ..

最后我自己发现了什么在这种情况下做的。所以我会解释如何解决那些有或将会有我的问题的人。 在我的xml ui文件中,我设置了layout_weight = 1的一对相对布局,它们在线性布局中被分割到屏幕中,实际上它们的宽度都是我的屏幕宽度的一半。我的问题是关于高度,我尝试了很多java代码来设置等于其宽度的相对布局高度。 最后我计算了“DP”术语中的屏幕宽度,并将每个相对布局的高度设置为此。这是解决的代码:

Display display = getWindowManager().getDefaultDisplay(); 
    DisplayMetrics outMetrics = new DisplayMetrics(); 
    display.getMetrics(outMetrics); 

    float density = getResources().getDisplayMetrics().density;   
    float dpWidth = outMetrics.widthPixels/density; 

    RelativeLayout Rl1 = (RelativeLayout) findViewById(R.id.rlv1); 
    Rl1.getLayoutParams().height = (int) (dpWidth); 

    RelativeLayout Rl2 = (RelativeLayout) findViewById(R.id.rlv2); 
    Rl2.getLayoutParams().height = (int) (dpWidth); 

所以我得到了一个纯正的广场!好好享受。谢谢

最简单的解决方案,即imo,是子类的RelativeLayout,并覆盖onMeasure,提供给超级相同的宽度和高度的大小。例如

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
} 

由@ZakTaccardi指出,声明它在你的布局像

<com.example.subclassrelativelayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" /> 
+0

我不知道如何使用。我应该如何在你写的代码中调用我的布局? – mohammadf255 2014-09-10 16:22:04

+3

这是更好的答案。 您可以在XML中使用完全限定的类名引用新的子类。因此,而不是'',使用'' – ZakTaccardi 2015-02-11 00:28:20

+0

@ZakTaccardi为您的输入 – Blackbelt 2015-05-28 19:26:04