Kiedy mam TextView
z \n
w tekście ,, po prawej mam dwie singleLine
TextView
s, jeden pod drugim bez odstępu pomiędzy nimi. Dla wszystkich trzech ustawiłem następujące TextView
.
android:lineSpacingMultiplier="1"
android:lineSpacingExtra="0pt"
android:paddingTop="0pt"
android:paddingBottom="0pt"
Pierwsza linia lewej TextView
linii idealnie pokrywa się z prawym górnymTextView
.
Druga linia po lewej stronie TextView
jest nieco wyższa niż druga linia w prawym dolnym rogu TextView
.
Wygląda na to, że na górze i na dole TextView
s znajduje się ukryta wyściółka . Jak mogę to usunąć?
Odpowiedzi:
lub w
XML
tym byłoby:Ustaw, czy ma
TextView
zawierać dodatkową górną i dolną wyściółkę, aby zrobić miejsce na akcenty, które przekraczają normalne wejście i zejście. Domyślnie jest to prawda.źródło
1dp
górne / dolne wypełnienie, czy się mylę? (UżywamDeveloper options -> Show layout bounds
)includeFontPadding="false"
usuwa część przestrzeni, ale nie całość. bardzo dziwny.includeFontPadding
doskonale nadaje się do usuwania wszelkich dodatkowych wypełnień z samej czcionki, ale może powodować problemy w językach, w których wznoszenia i zstępowania są dozwolone. Jeśli to zrobisz, upewnię się, że testujesz języki takie jak hiszpański i tajski, jeśli je wspierasz.Czuję twój ból. Próbowałem wszystkich odpowiedzi powyżej, w tym
setIncludeFontPadding
fałszywe, które nic dla mnie nie zrobiły.Moje rozwiązanie?
layout_marginBottom="-3dp"
naTextView
dole daje rozwiązanie na dole, BAM!Chociaż -3dp
layout_marginTop
nie powiedzie się ... ugh.źródło
Dużo szukałem prawidłowej odpowiedzi, ale nie znalazłem odpowiedzi, która mogłaby dokładnie usunąć wszystkie wypełnienia z
TextView
, ale w końcu po przejrzeniu oficjalnego dokumentu udało mi się znaleźć tekst dla pojedynczej liniiDodanie tych dwóch linii do
TextView
xml wykona pracę.Pierwszy atrybut usuwa dopełnienie zarezerwowane dla akcentów, a drugi atrybut usuwa odstępy zarezerwowane, aby zachować odpowiednią przestrzeń między dwoma wierszami tekstu.
źródło
fontPath
atrybut?Jeśli używasz
AppCompatTextView
(lubAPI 28
odtąd), możesz użyć kombinacji tych 2 atrybutów, aby usunąć odstępy w pierwszym wierszu:XML
Kotlin
źródło
To mnie również zirytowało, a odpowiedź znalazłem, że w samej czcionce jest więcej miejsca, a nie TextView. Jest to dość irytujące, biorąc pod uwagę tło publikowania dokumentów, ograniczoną kontrolę Androida nad elementami typograficznymi. Polecam użycie niestandardowego kroju pisma (takiego jak Bitstream Vera Sans, który jest licencjonowany do redystrybucji), który może nie mieć tego problemu. Nie jestem jednak pewien, czy tak się dzieje.
źródło
Możesz spróbować użyć tego atrybutu (ConstraintLayout):
layout_constraintBaseline_toBaselineOf
Lubię to:
źródło
Usuwam odstępy w moim widoku niestandardowym - NoPaddingTextView.
https://github.com/SenhLinsh/NoPaddingTextView
źródło
Dzięki dodatkowemu ImageView możemy ustawić TextView tak, aby był wyrównany do linii bazowej z ImageView i ustawić
android:baselineAlignBottom
na ImageView wartość true, co spowoduje, że linia podstawowa ImageView będzie na dole. Inne widoki mogą się wyrównywać za pomocą dolnej krawędzi ImageView, która sama jest taka sama jak linia bazowa TextView.To jednak naprawia tylko dolne wypełnienie, a nie górne.
źródło
Myślę, że ten problem można rozwiązać w następujący sposób:
Oto wyniki:
ScreenShot-1
ScreenShot-3
Chociaż linia znaków specjalnych w rightLowerText wygląda nieco wyżej niż druga linia leftText, ich linie bazowe są nadal wyrównane.
źródło
Ponieważ moim wymaganiem jest zastąpienie istniejącego textView
findViewById(getResources().getIdentifier("xxx", "id", "android"));
, więc nie mogę po prostu spróbowaćonDraw()
innej odpowiedzi.Ale po prostu wymyślam właściwe kroki, aby rozwiązać mój problem, oto końcowy wynik Inspektora układu:
Ponieważ chciałem po prostu usunąć górne spacje, więc nie muszę wybierać innej czcionki, aby usunąć dolne spacje.
Oto krytyczny kod, aby to naprawić:
Pierwszym kluczem jest ustawienie niestandardowej czcionki „fonts / myCustomFont.otf”, która ma miejsce na dole, ale nie na górze, możesz łatwo to odkryć, otwierając plik otf i klikając dowolną czcionkę w Android Studio:
Jak widać, kursor na dole ma dodatkowe odstępy, ale nie na górze, więc rozwiązało to mój problem.
Drugim kluczem jest to, że nie możesz po prostu pominąć żadnego kodu , w przeciwnym razie może nie działać. To jest powód, dla którego niektórzy ludzie komentują, że odpowiedź działa, a inni komentują, że nie działa.
Zilustrujmy, co się stanie, jeśli usunę jeden z nich.
Bez
setTypeface(mfont);
:Bez
setPadding(0, 0, 0, 0);
:Bez
setIncludeFontPadding(false);
:Bez 3 z nich (tj. Oryginału):
źródło
Jedyne, co zadziałało, to
źródło
Zaktualizowany XML
źródło
Działa prosta metoda:
Jeśli to nie zadziałało, spróbuj dodać to powyżej tego kodu:
Jeśli potrzebujesz wielu linii, być może będziesz musiał dokładnie obliczyć wysokość dopełniania u góry iu dołu za pomocą temp. Pojedynczej linii TextView (przed i po usunięciu dopełniania), a następnie zastosuj wynik zmniejszenia wysokości z ujemnym dopełnieniem lub układem duchów z tłumaczeniem Y. Lol
źródło
Możesz spróbować wyrównać dolną część lewego tekstu z dolną częścią drugiego prawego tekstu.
źródło
Według mojej wiedzy jest to nieodłączne dla większości widżetów, a ilość „wypełnienia” różni się w zależności od producenta telefonu. To dopełnienie jest naprawdę białą przestrzenią między ramką obrazu a obrazem w pliku obrazu z 9 poprawkami.
Na przykład na moim Droid X widżety obrotowe mają dodatkową białą przestrzeń niż przyciski, co sprawia, że wygląda to niezręcznie, gdy masz pokrętło w linii z przyciskiem, ale na telefonie mojej żony ta sama aplikacja nie ma tego samego problemu i wygląda świetnie!
Jedyną sugestią, którą chciałbym mieć, jest utworzenie własnych 9 plików łatek i użycie ich w swojej aplikacji.
Ach, bóle, które są na Androida.
Edytowano: Wyjaśnienie dopełnienia vs białe spacje.
źródło
Ta sztuczka zadziałała dla mnie (dla min-sdk> = 18 ).
Użyłem
android:includeFontPadding="false"
i ujemny margines jakandroid:layout_marginTop="-11dp"
i umieściłemTextView
wFrameLayout
( lub dowolnej grupie ViewGroup ... )i na koniec przykładowe kody:
źródło
Zobacz:
Wyrównaj ImageView z EditText w poziomie
Wygląda na to, że obraz tła EditText ma przezroczyste piksele, które również dodają dopełnienie.
Rozwiązaniem jest zmiana domyślnego tła EditText na coś innego (lub nic, ale żadne tło dla EditText jest prawdopodobnie niedopuszczalne). Można to zrobić, ustawiając atrybut android: tło XML.
źródło
Po prostu użyj
źródło
Użyj tego w swoim ImageView xml
android: adjustViewBounds = "true"
źródło