ListView Row Styling - Texto alinhado à esquerda e ícone alinhado à direita
-
22-09-2019 - |
Pergunta
Estou tentando obter ListView Row para parecer o seguinte:
| Text-Text-Text <ImageButton> |
Com o ImageButton estalado na borda direita. Como posso fazer isso? Aqui está o código de layout atual que estou usando. O que estou fazendo errado?
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layercontainer"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#699">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="left">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="YO HOW SI IT GOESSDA" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_gravity="right">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/trash" />
</LinearLayout>
</LinearLayout>
Meu código atualmente produz isso:
Solução
Etapa 1: use um RelativeLayout
base.
Etapa 2: Coloque o seu ImageButton
como tendo android:layout_alignParentRight="true"
Etapa #3: Coloque o seu TextView
tem android:layout_alignParentLeft="true"
, android:layout_toLeftOf="..."
(Onde ...
é o ID do seu ImageButton
), e talvez algum outro RelativeLayout.LayoutParams
valor para alinhamento vertical
Outras dicas
O snippet de código a seguir fornece um exemplo de como criar uma linha ListView que possui algum texto (horizontalmente alinhado à esquerda, via android:layout_alignParentLeft="true"
) e um ícone (horizontalmente alinhado via android:layout_alignParentRight="true"
), e todos centrados verticalmente (android:layout_centerVertical="true"
).
Renderiza da seguinte maneira (YMMV, dependendo dos estilos globais):
Há também um ícone adicional comentado que pode ser colocado à esquerda do ícone mais à direita; Remova as tags de comentários XML para ativar.
Aqui está o layout xml:
<?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="?android:attr/listPreferredItemHeight"
android:descendantFocusability="blocksDescendants"
android:padding="6dp">
<!-- Note: android:descendantFocusability="blocksDescendants" set to ensure that
OnItemClickListener works by ensuring constituent controls do not take focus -->
<TextView
android:id="@+id/lbl_list_item_row_text"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:lines="1"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:text="My List Item Text"
/>
<!-- This can be uncommented to add another button
<ImageButton
android:id="@+id/btn_additional_icon"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/icon_additional_icon"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:padding="3dp"
android:background="@null"
android:src="@drawable/icon_additional_icon" />
-->
<ImageButton
android:id="@+id/icon_additional_icon"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@null"
android:padding="3dp"
android:src="@drawable/icon_right_aligned_icon" />
</RelativeLayout>