布局比屏幕宽时选择环绕视图

时间:2012-03-07 06:28:45

标签: android android-layout

我有一个带有图像和几个文本视图的水平线性布局。在某些语言(德语...)中,文本太长以至于无法将所有内容放在一行上,布局必须比屏幕宽。为了防止这种情况,android会自动将文本视图换行到下一行。

有没有办法选择哪个文本视图最终会换行?目前看来,添加到布局的最后一个视图是包装的视图。但是我真的想让一个早期的文本视图换行并让最后一个文本视图始终显示在一行上。这可能吗?我已经将大部分视图都包含在子类中,因此我可以覆盖受保护的方法。

以下是我的代码的粗略轮廓:

<LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="horizontal">
  <ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/some_icon" />
  <TextView
    android:id="@+id/can_wrap_if_neccessary"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/some_really_long_text" />
  <TextView
    android:id="@+id/shouldnt_wrap"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/some_more_really_long_text" />
</LinearLayout

2 个答案:

答案 0 :(得分:2)

我们可以知道哪个文字会换行。

<强>逻辑: 首先计算文本的宽度如果Text的宽度大于屏幕的宽度,则该文本将被包装

如果文本将被包装,则以下方法返回true,否则返回false

源代码

boolean isTextWrapped(String text) {
        boolean isWrapped = false;
        int widthOfText = 0;
        int deviceWidth = 0;
        // calculate widthOftext
        TextView textView = new TextView(this);
        textView.setVisibility(View.GONE);
        Rect bounds = new Rect();
        Paint textPaint = textView.getPaint();
        textPaint.getTextBounds(text, 0, text.length(), bounds);
        widthOfText = bounds.width();
        System.out.println("...text view width..."+widthOfText);
        // calculate width of screen
        DisplayMetrics displaymetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        deviceWidth = displaymetrics.widthPixels;
        System.out.println("...text view width..."+widthOfText+"...screen width..."+deviceWidth);
        isWrapped = widthOfText > deviceWidth ? true : false;
        return isWrapped;

    }

答案 1 :(得分:2)

我明白了:解决方法是在我想要包装的视图上设置layout_weight属性,而不是在我不想包装的视图上设置它。具有layout_weight的任何视图都将优先于那些没有的视图。