2013-01-31 71 views
0

我有一個android佈局的問題。如何防止文本字段溢出android上的相鄰文本字段?

我有一行三個TextViews:職位名稱,年齡和日期。 我希望日期對齊到右側,工作標題向左。年齡應該與職位一致。

問題是職位可能變得很長。我希望它不會與其他視圖重疊,但會自動截斷。其他兩個文本視圖應始終可見。

任何想法,我可以如何實現這一點?我希望我的佈局能夠跨越屏幕的整個寬度,因此不希望使用絕對寬度。

我的佈局看起來如下:

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
     > 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Softwaredeveloper and some more very long job titles so that the text overflows" 
      android:id="@+id/occupation" 
      android:layout_gravity="left|center_vertical" 
      android:padding="5dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:singleLine="true" 
      android:ellipsize="end"/> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="(32)" 
      android:id="@+id/age" 
      android:layout_gravity="left|center_vertical" 
      android:padding="5dp" 
      android:layout_alignParentLeft="false" 
      android:layout_alignParentTop="true" 
      android:layout_toRightOf="@+id/occupation" 
      android:singleLine="true"/> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="01.02.2013" 
      android:id="@+id/date" 
      android:layout_alignParentLeft="false" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      android:singleLine="true" 
      android:padding="5dp"/> 
</RelativeLayout> 

而這就是我得到:

enter image description here

+0

爲所有的textview提供佈局權重。看看[這裏] [1]。 [1]:http://stackoverflow.com/questions/4986861/android-layout-weight –

+0

提供佈局重到所有的TextView的。看看[這裏] [1]。 [1]:http://stackoverflow.com/questions/4986861/android-layout-weight –

+0

我已經嘗試過,但並沒有達到我想要的。我希望「年齡」文本框直接適用於「職位」文本框。對於具有權重的線性佈局,兩個文本字段將佔用相同的空間量或我分配給它們的空間權重的空間比例,但是我沒有把它們理解爲正確,因此在職位名稱之間沒有空格和年齡.. – Frank

回答

0

試試這個:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Softwaredeveloper and some more very long job titles so that the text overflows" 
      android:id="@+id/occupation" 
      android:padding="5dp" 
      android:singleLine="true" 
      android:layout_weight="1" 
      android:ellipsize="end"/> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="(32)" 
      android:id="@+id/age" 
      android:padding="5dp" 
      android:singleLine="true"/> 

    <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="01.02.2013" 
      android:id="@+id/date" 
      android:singleLine="true" 
      android:padding="5dp"/> 
</LinearLayout> 

現在試試這個,它的正常工作:

<TableLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:stretchColumns="1" 
     android:shrinkColumns="0"> 

     <TableRow> 

      <TextView 
       android:id="@+id/occupation" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:ellipsize="end" 
       android:singleLine="true" 
       android:text="Softwaaaaaaa aared " /> 

      <TextView 
       android:id="@+id/age" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:singleLine="true" 
       android:text="(32)" /> 

       <TextView 
      android:id="@+id/date" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:text="01.02.2013" /> 

     </TableRow> 


    </TableLayout> 
+0

謝謝,我試過了。但是要知道職稱何時縮短,職稱與年齡之間存在很大差距。我希望這個年齡直接適用於職位。剩餘空間應該只在年齡和日期之間。這怎麼可能? – Frank

+0

謝謝阿南德。沒有看到您已編輯過您的帖子。與此同時,我提出了同樣的解決方案。這工作! – Frank

0

我會做這樣的事情,並調整layout_weight的,從而獲得所需寬度的

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="20dip" 
     android:layout_weight=0.3 
     android:text="Softwaredeveloper and some more very long job titles so that the text overflows" 
     android:textSize="18dip" 
     android:id="@+id/occupation" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp" 
     android:singleLine="true" 
     android:ellipsize="end"/> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="20dip" 
     android:layout_weight="2" 
     android:textSize="18dip" 
     android:text="(32)" 
     android:id="@+id/age" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp" 
     android:layout_toRightOf="@+id/occupation" 
     android:singleLine="true"/> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="20dip" 
     android:layout_weight="1" 
     android:textSize="18dip" 
     android:text="01.02.2013" 
     android:id="@+id/date" 
     android:singleLine="true" 
     android:padding="5dp"/> 

+0

不幸的是不是我所需要的。請參閱我對@Anand以上建議的評論。 – Frank

0

我建議ü增加體重總和的財產爲你的父母的佈局,並給予權重相應的孩子。

0

感謝這篇文章中的提示(How to get a layout where one text can grow and ellipsize, but not gobble up the other elements on the layout),我終於找到了一個可行的解決方案。

幫助我的是提示使用表格佈局。

我的解決方案如下所示:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:shrinkColumns="0" 
       android:stretchColumns="1"> 

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

     <TextView 
       android:layout_width="fill_parent" 
       android:layout_weight="1" 
       android:text="Softwaredeveloper and some more very long job titles so that the text overflows" 
       android:id="@+id/occupation" 
       android:paddingLeft="5dp" 
       android:paddingRight="5dp" 
       android:singleLine="true" 
       android:ellipsize="end" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical"/> 

     <TextView 
       android:layout_width="fill_parent" 
       android:layout_weight="2" 
       android:text="(32)" 
       android:id="@+id/age" 
       android:paddingLeft="5dp" 
       android:paddingRight="5dp" 
       android:singleLine="true" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical"/> 

     <TextView 
       android:layout_width="fill_parent" 
       android:layout_weight="1" 
       android:text="01.02.2013" 
       android:id="@+id/date" 
       android:singleLine="true" 
       android:padding="5dp" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical|right"/> 
    </TableRow> 

</TableLayout> 

長職務,現在被正確地截斷和年齡現在是直接相鄰甚至更短的職位。

這看起來就像是:

長職務: Long job title with ellipses

短職務: Short job title

0

我複製並粘貼您的佈局(編輯:到了我的一個應用程序)玩有一些。我將你的前兩個(職業和年齡)TextView s包裝在LinearLayout中,並在職業TextView中增加了兩行以使其工作。我希望這有幫助。我加了android:maxEmsandroid:singleLine。根據您的喜好調整android:maxEms值!

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation ="horizontal"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Softwaredeveloper and some more very long job titles so that the text overflows" 
     android:maxEms="25" 
     android:singleLine="false" 
     android:id="@+id/occupation" 
     android:layout_gravity="left|center_vertical" 
     android:padding="5dp" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:singleLine="true" 
     android:ellipsize="end"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="(32)" 
     android:id="@+id/age" 
     android:layout_gravity="left|center_vertical" 
     android:padding="5dp" 
     android:layout_alignParentLeft="false" 
     android:layout_alignParentTop="true" 
     android:layout_toRightOf="@+id/occupation" 
     android:singleLine="true"/> 
</LinearLayout>