如何使用xml单独匹配android中两个TextView的宽度

时间:2014-08-28 05:10:44

标签: android android-relativelayout

我有两个字符串资源。但是我不知道两个字符串中的哪一个会产生更宽的TextView。我想创建两个TextView,一个在另一个上面,一个使用第一个资源的文本,另一个使用第二个资源的文本。我希望TextViews的宽度相同,但不要超过必要的范围。

我能做到这一点。我使用的布局资源看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
    >
    <TextView
        android:id="@+id/green_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:textSize="18sp"
        android:padding="5dp"
        android:background="@android:color/white"
        android:textColor="@android:color/holo_green_dark"
        android:text="@string/green_text"
        />
    <TextView
        android:id="@+id/blue_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/green_text_view"
        android:layout_alignLeft="@id/green_text_view"
        android:gravity="center"
        android:textSize="18sp"
        android:padding="5dp"
        android:background="@android:color/white"
        android:textColor="@android:color/holo_blue_dark"
        android:text="@string/blue_text"
        />
</RelativeLayout>

并使用以下代码在onCreate()中使宽度匹配:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    TextView greenTextView = (TextView) findViewById(R.id.green_text_view);
    TextView blueTextView = (TextView) findViewById(R.id.blue_text_view);
    greenTextView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    blueTextView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
    int maxWidth = Math.max(greenTextView.getMeasuredWidth(), blueTextView.getMeasuredWidth());
    greenTextView.setWidth(maxWidth);
    blueTextView.setWidth(maxWidth);
}

有效。无论TextView自然更宽,TextView都会对齐并居中。

我的问题:是否可以单独使用xml?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

这似乎不可能。由于你不知道哪一个会自然地变宽,RelativeLayout(和你)无法分辨两者之间的依赖关系。如果您不小心使用layout_align*属性将较宽的视图B与正常视图对齐,则B的内容将被剪切。

答案 1 :(得分:0)

你可以尝试

android:layout_alignRight="@+id/green_text_view"
android:layout_alignLeft="@+id/green_text_view"

我还没有测试过它

答案 2 :(得分:0)

Change the layout_width of RelativeLayout to wrap_content
Change the layout_width of second textview to match_parent

如果您的第二个textView内容小于第一个,则此方法非常正常。检查here以获得更好的解决方案。