Mam linię poziomą LinearLayout
zawierającą a, TextView
po której następuje a Spinner
. Jest LinearLayout
to wielokrotnie dynamicznie zawyżane w ustalonej pionie LinearLayout
zawartej w RelativeLayout
.
Problem polega na tym, że odkąd przełączyłem się z Theme.light
na Theme.holo.light
, ostatnia linia została TextView
przecięta o połowę. Dzieje się tak, gdy tekst dynamiczny jest długi i obejmuje więcej niż jeden wiersz.
Udało mi się to naprawić, dodając dolną wyściółkę do poziomu LinearLayout
zawierającego TextView
i Spinner
.
To nie jest poprawka, ale raczej włamanie. Czy ktoś może mi doradzić, jak to naprawić?
Przeczytałem też kilka innych pytań, ale żadne nie wydają się pomocne.
Poziomy układ liniowy:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView1"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:text="TextView"/>
<Spinner
android:id="@+id/spinner1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Względny układ, w którym powyższy układ jest dynamicznie zawyżany w układzie liniowym o identyfikatorze ll2_7:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/relLayoutButtonNext"
android:layout_below="@id/textView1" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:text="2.7" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@id/textView10"
android:text="@string/question2_7" />
<LinearLayout
android:id="@+id/ll2_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView11"
android:layout_below="@+id/textView11"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
EDYCJA: Oto pełny plik XML układu dla powyższego:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
style="@style/question_section_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text="@string/question2_header" />
<RelativeLayout
android:id="@+id/relLayoutButtonNext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/bottomBar"
android:paddingBottom="3dp"
android:paddingLeft="50dp"
android:paddingRight="50dp"
android:paddingTop="3dp" >
<Button
android:id="@+id/buttonNext"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:onClick="nextStep"
android:text="Next Section"
android:textSize="20sp" />
<Button
android:id="@+id/buttonPrevious"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:onClick="previousStep"
android:text="Previous Section"
android:textSize="20sp" />
</RelativeLayout>
<ScrollView
android:id="@+id/scrollView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/relLayoutButtonNext"
android:layout_below="@id/textView1" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="20dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp" >
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="30dp"
android:text="2.7" />
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:layout_toRightOf="@id/textView10"
android:text="@string/question2_7" />
<LinearLayout
android:id="@+id/ll2_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView11"
android:layout_below="@+id/textView11"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView10"
android:layout_below="@+id/ll2_7"
android:text="2.8" />
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_7"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_8" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView3"
android:layout_below="@+id/textView3"
android:layout_marginBottom="20dp"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView2"
android:layout_below="@+id/ll2_8"
android:text="2.9" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_8"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_9" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView5"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView4"
android:layout_below="@+id/ll2_9"
android:text="2.10" />
<TextView
android:id="@+id/textView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_9"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_10" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView7"
android:layout_marginBottom="20dp"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" >
</LinearLayout>
<TextView
android:id="@+id/textView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView6"
android:layout_below="@+id/ll2_10"
android:text="2.11" />
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_10"
android:layout_toRightOf="@+id/textView10"
android:text="@string/quesiton2_11" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView9"
android:layout_below="@+id/textView9"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView8"
android:layout_below="@+id/ll2_11"
android:text="2.11.1" />
<TextView
android:id="@+id/textView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ll2_11"
android:layout_toRightOf="@+id/textView10"
android:text="@string/question2_11_1" android:layout_marginBottom="10dp"/>
<LinearLayout
android:id="@+id/ll2_11_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView13"
android:layout_toRightOf="@+id/textView10"
android:orientation="vertical" android:layout_marginBottom="20dp">
</LinearLayout>
</RelativeLayout>
</ScrollView>
</RelativeLayout>
źródło
Odpowiedzi:
Napotkałem ten sam problem z odcięciem, jak pokazano na zrzucie ekranu. Jest to spowodowane wyrównaniem linii bazowej w poziomie
LinearLayout
.TextView
iSpinner
mają różne linie bazowe ze względu na różnice w rozmiarze czcionki. Aby rozwiązać ten problem, należy wyłączyć wyrównanie linii bazowej dla układu, ustawiając:lub w kodzie:
źródło
Po wypróbowaniu miliona różnych rzeczy myślę, że mam odpowiedź.
Zastosowałem a
LayoutGravity
do elementu TextView:Wydaje się, że rozwiązuje wszystkie problemy z przycinaniem, które miałem. Mam nadzieję, że pomoże to komuś z tym samym problemem.
źródło
@android:style/Widget.TextView
i dodaję następujące linie:<item name="android:gravity">fill</item>
<item name="android:padding">1sp</item>
android:baselineAligned="false"
doLinearLayout
Miałem ten sam problem i stwierdziłem, że po prostu dodałem
ostatnia linia tekstu nie miała już obciętych dolnych krawędzi.
źródło
Dodałem trochę pustej spacji po tekście, dodając
Wypróbowałem wszystkie inne rozwiązania, ale to było jedyne rozwiązanie, które zadziałało
źródło
Umieść problematyczny widok tekstu w układzie framelayout. Myślę, że widok tekstu nie jest poprawnie obliczany z powodu widoku rodzeństwa, Spinner.
źródło
CheckBox
w tym samymLinearLayout
. To rozwiązało problem.W takim przypadku należy upewnić się, że
TextView
nie jest większy niż jego pojemnik -Jeśli a
TextView
jest ustawiony nawrap_content
i jego pojemnik (lub pojemnik przodka) nie pozostawia miejsca,TextView
w którym mógłby w nim wyrosnąć, może zostać zatkany.Jeśli tak nie jest, to jest to również możliwe,
onMeasure()
zTextView
czasem nie prawidłowo zmierzyć ogonki liter, znaków spoza alfabetu łacińskiego lub efekty z tych tekstów jest pochylony. Możesz to naprawić, ustawiając globalny styl dla swojego,TextView
aby został pobrany bez konieczności zmiany całej bazy kodu:Upewnij się, że Twoja aplikacja / działania używają niestandardowego motywu, takiego jak:
Odpowiedź @Rynadt była bardzo pomocna w dotarciu do powyższego etapu. Ustawienie wagi tekstu wewnątrz widoku zapewnia na niektórych urządzeniach, że okluzja nigdy nie ma miejsca (tekst jest prawidłowo dopasowany w widoku), na innych pomocna dłoń z dopełnieniem wartości sp zapewnia, że ogony i inne są uwzględniane z wartością określoną dla TextSize.
źródło
Moje rozwiązanie było zbliżone do zaakceptowanego, ale musiałem zmienić je na
zamiast. W przeciwnym razie pozostałe wiersze również byłyby rozciągnięte z dodanymi przerwami w wierszach w przypadkowych miejscach. Na przykład największy wiersz miał 4 wiersze, więc inny wiersz został zmieniony z
this is a testphrase
do
źródło
Znalazłem inne rozwiązanie, rozszerzając TextView i dodając niestandardową klasę w następujący sposób:
źródło
this.setEllipsize(TextUtils.TruncateAt.END);
powyższą instrukcję if i usuńandroid:ellipsize="end"
z XML-a, który z jakiegoś powodu go łamie.spróbuj usunąć androida: paddingBottom = "20dp"
z
źródło
getViewTreeObserver().addOnGlobalLayoutListener
nie działa w widoku recyklera. Jeśli używasz recyklera, użyjView.addOnLayoutChangeListener
:Zauważyłem, że elipsa, którą zdefiniowałem
textView
w xml, nie zawsze była odzwierciedlona, więc programowo ustawiłem ją przed ponownym przypisaniem właściwości text. To zadziałało dla mnie.źródło
Jeśli masz ten problem i
TextView
znajdujesz się wewnątrz aRelativeLayout
, spróbuj zamienićRelativeLayout
naLinearLayout
.To rozwiązało problem
źródło
Możesz użyć odbiornika globalnego układu dla TextView w dowolnym typie ViewGroup.
Więcej na ten temat przeczytasz tutaj
źródło
Myślę, że niewiele można zrobić, aby to zadziałało, zmieniając układy. Ponieważ odkryłem, że niektóre metody działają tylko w niektórych przypadkach. Myślę, że zależy to od całej hierarchii układu i nie jest rozwiązaniem uniwersalnym. Zauważyłem również, że dzieje się tak szczególnie, gdy masz inną czcionkę, którą chcesz ustawić na TextView.
Pewna metoda ujęcia, którą eksperymentowałem i testowałem, polega na tym, że możesz ustawić atrybuty czcionki w kodzie po zawyżeniu widoku. Zakładam, że masz czcionkę w folderze aktywów / czcionek, którą chcesz.
Na przykład we fragmencie:
Oraz w działaniu:
źródło
Mam ten sam problem i jest on bardzo irytujący.
Dzieje się tak tylko w przypadku tekstu arabskiego.
Jeśli utworzysz etykietę wielowierszową i dodasz plik
\n
na końcu swojego ciągu, naprawiłoby to, ale problem polega na tym, że byłaby duża przerwa między tą etykietą a obiektem pod nią, ze względu na fakt, że to pole teraz ma nowy pusty wiersz poniżej.Aby obejść ten problem, można zrobić niestandardową kontrolę. Ale ogólnie jest to irytujący błąd.
źródło
Najlepszym sposobem obejścia tego problemu jest dodanie fikcyjnego widoku o żądanej wysokości (tj. Doda to samo wypełnienie) u dołu widoku.
Tak jak w moim przypadku dodałem jeszcze jeden wiersz tabeli u dołu widoku. Mam nadzieję, że to może komuś pomóc.
źródło
Wiem, że jest tak późno, ale dla mnie to działa jak urok. dodaj ten kod do swojego
textview
źródło
Dodaj dopełnienie u dołu widoku tekstu:
źródło
W końcu to naprawiłem!
Próbuję dodać ciąg do TextView w usłudze, a następnie wywołuję scrollTo (), ostatnia linia zostaje odcięta!
ScrollTo () powinien być wywoływany w „Runnable”, na przykład:
Myślę, że to dlatego, że w monencie wywołania scrollTo () w serwisie aktualizacja TextView nie jest gotowa.
źródło