[英]Choose wrapping view when layout is wider than screen
我有一個圖像和幾個文本視圖的水平線性布局。 在某些語言(德語...)中,文本是如此之長,以至於所有內容都只能放在一行上,因此布局必須比屏幕寬。 為防止這種情況,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
我們可以知道將要換行的文本。
邏輯: 首先計算文本的寬度如果文本的寬度大於屏幕的寬度,則該文本將被換行
如果文本將被換行,則以下方法返回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;
}
我知道了:解決方案是在我要包裝的視圖上設置layout_weight屬性,而不是在我不想包裝的視圖上完全不設置它。 具有layout_weight的任何視圖將優先於沒有view_wrap的視圖進行包裝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.