1

機能するレイアウトを思いつくのは本当に難しいです。画面の幅いっぱいのビューがあります。3 つのサブビューが含まれています。

  1. いくつかのテキスト
  2. 本文の後の括弧内の数字
  3. ボタン

次のように、ボタンは右揃えで、テキスト項目は次々に左揃えになります。

| | いくつかの見出しテキスト (n) [ボタン] |

問題は、テキストが長すぎる場合にどうなるかを制御することです。このようにして、番号が常に本文のすぐ右側に表示されるようにします。他の 2 つのビューが表示されたままになるように、必要に応じて本文を切り捨てる必要があります。

| | いくつかの非常に長い見出し... (n) [ボタン] |

メインテキストをうまく切り捨てることができる最も近いものは、メインテキストが収まるほど短い場合でも、(n) が常にボタンの横に右揃えになります。それは私が望むものではありません。

これにどのようにアプローチしますか?

誰かの提案に偏見を持たないように、現在の XML はまだ投稿していません。

4

3 に答える 3

1

そのためのxmlレイアウトはないと思います。私の推測では、内部のテキストの長さを拡張TextViewして測定し、onDraw(...)それに応じてテキストを調整する必要があると思います (つまり、テキストがキャンバスに収まるまで一度に 1 文字ずつ削除します)。

あなたと非常によく似た別の質問を見つけました: TextView のセクションのみを省略します。真ん中の楕円形以外の答えはありません。


別の考え:

メインテキストellipsize leftwrap_content)を含む1つのテキストビューと、括弧内に数字(wrap_content)を含む別のテキストビューを、両方とも水平線形レイアウト内に配置するとうまくいくかどうか疑問に思っています。そのレイアウトは、相対レイアウトとボタンのlayout_toLeftOf内にあり、これはwrap_contentlayout_alignParentRightになります。

意味はありますか?私は今、自分でテストするための Eclipse を持っていません。(n) textview がボタンの後ろで失われるかどうか、または長いテキストで失われるかどうかはわかりません。

別の方法として (あまり面白くありません)、すべて layout_toRightOfの 2 つのテキストビューと右に配置されたボタン ( layout_alignParentRight ) を使用して1 つの相対レイアウトを設定し、最初のテキストビュー ( android:maxWidth ) の最大幅を設定できます。ただし、画面ごとに異なるレイアウトを設定する必要があります。


必要に応じて機能する固定最大幅の例:

<?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"
    >
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="click me"
    android:id="@+id/bt1"
    android:layout_alignParentRight="true"
    />    
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="short text"
    android:lines="1"
    android:ellipsize="end"
    android:id="@+id/t1"
    android:layout_alignParentLeft="true"
    />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="(n)"
    android:lines="1"
    android:id="@+id/n1"
    android:layout_toRightOf="@id/t1"
    />
    <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="click me"
    android:id="@+id/bt2"
    android:layout_below="@id/bt1"
    android:layout_alignParentRight="true"
    />    
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="very long text that will not fit in any layout, regardless of the size of the screen"
    android:lines="1"
    android:ellipsize="end"
    android:id="@+id/t2"
    android:layout_below="@id/bt1"
    android:layout_alignParentLeft="true"
    android:maxWidth="220dp"
    />
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="(n)"
    android:lines="1"
    android:id="@+id/n2"
    android:layout_below="@id/bt1"
    android:layout_toRightOf="@id/t2"
    />
</RelativeLayout>
于 2011-05-09T03:36:46.390 に答える
0

(n)ボタンとテキストが全体のレイアウトで十分なスペースを確保するために、重要なのはアイテムの順序です。これは、アイテムが測定される順序です。

<RelativeLayout
  android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  >

  <Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    />

  <TextView
    android:id="@+id/middle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:layout_toLeftOf="@id/button"
    android:text="(n)"
    />

   <TextView
     android:id="@+id/title"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_toLeftOf="@id/middle"
     android:layout_alignParentLeft="true"
     android:gravity="left"
     android:ellipsize="end"
     android:text="Some really long to text to make this flow over"
     android:lines="1"
     android:maxLines="1"
     />

</RelativeLayout>
于 2011-05-09T17:37:06.810 に答える
0

linearlayout を試し、テキスト ビューのウェイトを 1 に設定し、省略記号を に設定しTruncateAt.MIDDLEます。このレイアウトをチェック

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
    <TextView android:id="@+id/text" android:layout_width="0dp"
        android:layout_height="wrap_content" android:lines="1"
        android:ellipsize="middle" android:gravity="left"
        android:layout_weight="1" />
    <Button android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>
于 2011-05-09T05:20:35.147 に答える