Dzięki temu osiągnąłem dobre rozwiązanie:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-1dp" android:right="-1dp" android:left="-1dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke android:width="1dp" android:color="#ffffff" />
</shape>
</item>
</layer-list>
Działa to dobrze, jeśli potrzebujesz przezroczystego tła, ale wciąż otwartego koloru obrysu (w moim przypadku potrzebowałem tylko dolnej linii). Jeśli potrzebujesz koloru tła, możesz dodać jednolity kolor kształtu, jak w odpowiedzi Maragues.
EDYCJA 1
Czasami, w przypadku urządzeń o wysokiej gęstości, używanie niskich wartości spadku może kończyć się bardzo cienkimi lub niewidocznymi pociągnięciami lub odległościami. Może się to zdarzyć również podczas ustawiania dzielników ListView.
Najprostszym obejściem jest użycie odległości 1 piksela zamiast 1 dp. Dzięki temu linia będzie zawsze widoczna przy wszystkich gęstościach. Najlepszym rozwiązaniem byłoby utworzenie zasobów wymiarów dla każdej gęstości, aby uzyskać najlepszy rozmiar dla każdego urządzenia.
Edytuj 2
Zabawne, ale próbowałem tego użyć 6 lat później i nie mogę uzyskać dobrego wyniku na urządzeniach Lollipop.
Prawdopodobnie obecnym rozwiązaniem jest użycie 9 łatek. Android po tylu latach powinien był łatwo rozwiązać ten problem.