Skip to content

Commit 2b2a75e

Browse files
Make help FAQ cards fully clickable
1 parent 7e9aeb0 commit 2b2a75e

File tree

4 files changed

+80
-47
lines changed

4 files changed

+80
-47
lines changed

app/src/main/java/com/d4rk/androidtutorials/java/ui/screens/help/HelpActivity.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,9 +220,16 @@ private void bindFaqItems(ActivityHelpBinding binding) {
220220
itemBinding.answer.setText(item.answerResId);
221221
itemBinding.answer.setVisibility(View.GONE);
222222
itemBinding.toggleIcon.setRotation(0f);
223-
itemBinding.questionContainer.setContentDescription(itemBinding.question.getText());
223+
CharSequence questionText = itemBinding.question.getText();
224+
itemBinding.getRoot().setContentDescription(questionText);
225+
itemBinding.questionContainer.setContentDescription(questionText);
226+
ViewCompat.setStateDescription(itemBinding.getRoot(), getString(R.string.faq_state_collapsed));
224227
ViewCompat.setStateDescription(itemBinding.questionContainer, getString(R.string.faq_state_collapsed));
225-
itemBinding.questionContainer.setOnClickListener(v -> toggleFaqItem(itemBinding));
228+
229+
View.OnClickListener toggleListener = v -> toggleFaqItem(itemBinding);
230+
itemBinding.getRoot().setOnClickListener(toggleListener);
231+
itemBinding.questionContainer.setOnClickListener(toggleListener);
232+
itemBinding.toggleIcon.setOnClickListener(toggleListener);
226233
itemBinding.divider.setVisibility(i == FAQ_ITEMS.size() - 1 ? View.GONE : View.VISIBLE);
227234
faqList.addView(itemBinding.getRoot());
228235
}
@@ -237,8 +244,10 @@ private void toggleFaqItem(ItemHelpFaqBinding binding) {
237244
.rotation(rotation)
238245
.setDuration(200L)
239246
.start();
240-
ViewCompat.setStateDescription(binding.questionContainer,
241-
getString(expand ? R.string.faq_state_expanded : R.string.faq_state_collapsed));
247+
int stateRes = expand ? R.string.faq_state_expanded : R.string.faq_state_collapsed;
248+
CharSequence stateDescription = getString(stateRes);
249+
ViewCompat.setStateDescription(binding.getRoot(), stateDescription);
250+
ViewCompat.setStateDescription(binding.questionContainer, stateDescription);
242251
}
243252

244253
private static final class FaqItem {

app/src/main/res/layout/activity_help.xml

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,14 @@
3737
style="@style/Widget.Material3.CardView.Filled"
3838
android:layout_width="match_parent"
3939
android:layout_height="wrap_content"
40-
android:layout_marginBottom="24dp"
41-
app:shapeAppearance="@style/ShapeAppearanceOverlay.CardViewTopRoundedFilled">
40+
android:layout_marginBottom="2dp"
41+
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewTopRoundedFilled">
4242

4343
<androidx.appcompat.widget.LinearLayoutCompat
4444
android:id="@+id/faq_list"
4545
android:layout_width="match_parent"
4646
android:layout_height="wrap_content"
47-
android:orientation="vertical"
48-
android:padding="16dp" />
47+
android:orientation="vertical" />
4948
</com.google.android.material.card.MaterialCardView>
5049

5150
<com.d4rk.androidtutorials.java.ads.views.NativeAdBannerView

app/src/main/res/layout/ad_help.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
style="@style/Widget.Material3.CardView.Filled"
99
android:layout_width="match_parent"
1010
android:layout_height="wrap_content"
11-
app:shapeAppearance="@style/ShapeAppearanceOverlay.CardViewBottomRoundedFilled">
11+
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.CardViewBottomRoundedFilled">
1212

1313
<androidx.appcompat.widget.LinearLayoutCompat
1414
android:layout_width="match_parent"
Lines changed: 63 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,78 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
2+
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:id="@+id/faq_card"
6+
style="@style/Widget.Material3.CardView.Filled"
47
android:layout_width="match_parent"
58
android:layout_height="wrap_content"
6-
android:orientation="vertical">
9+
android:layout_marginHorizontal="0dp"
10+
android:layout_marginVertical="4dp"
11+
android:animateLayoutChanges="true"
12+
android:clickable="true"
13+
android:focusable="true"
14+
android:foreground="?attr/selectableItemBackground"
15+
app:cardBackgroundColor="@android:color/transparent"
16+
app:cardCornerRadius="12dp"
17+
app:cardElevation="0dp"
18+
app:strokeWidth="0dp">
719

820
<androidx.appcompat.widget.LinearLayoutCompat
9-
android:id="@+id/question_container"
21+
android:id="@+id/faq_item_root"
1022
android:layout_width="match_parent"
1123
android:layout_height="wrap_content"
12-
android:background="?attr/selectableItemBackground"
13-
android:clickable="true"
14-
android:focusable="true"
15-
android:gravity="center_vertical"
16-
android:orientation="horizontal"
17-
android:paddingVertical="12dp">
24+
android:animateLayoutChanges="true"
25+
android:orientation="vertical">
1826

19-
<com.google.android.material.textview.MaterialTextView
20-
android:id="@+id/question"
21-
android:layout_width="0dp"
27+
<androidx.appcompat.widget.LinearLayoutCompat
28+
android:id="@+id/question_container"
29+
android:layout_width="match_parent"
2230
android:layout_height="wrap_content"
23-
android:layout_weight="1"
24-
android:paddingEnd="16dp"
25-
android:textAppearance="@style/TextAppearance.Material3.TitleSmall"
26-
android:textStyle="bold" />
31+
android:clickable="true"
32+
android:clipToOutline="true"
33+
android:focusable="true"
34+
android:foreground="?attr/selectableItemBackground"
35+
android:gravity="center_vertical"
36+
android:orientation="horizontal"
37+
android:paddingHorizontal="12dp"
38+
android:paddingVertical="12dp"
39+
tools:targetApi="31">
2740

28-
<androidx.appcompat.widget.AppCompatImageView
29-
android:id="@+id/toggle_icon"
30-
android:layout_width="24dp"
31-
android:layout_height="24dp"
32-
android:contentDescription="@null"
33-
android:importantForAccessibility="no"
34-
android:tint="?attr/colorOnSurfaceVariant"
35-
app:srcCompat="@drawable/ic_expand_more_24" />
41+
<com.google.android.material.textview.MaterialTextView
42+
android:id="@+id/question"
43+
android:layout_width="0dp"
44+
android:layout_height="wrap_content"
45+
android:layout_weight="1"
46+
android:paddingStart="8dp"
47+
android:paddingEnd="8dp"
48+
android:textAppearance="@style/TextAppearance.Material3.TitleSmall"
49+
android:textStyle="bold" />
3650

37-
</androidx.appcompat.widget.LinearLayoutCompat>
51+
<com.google.android.material.button.MaterialButton
52+
android:id="@+id/toggle_icon"
53+
style="@style/Widget.Material3Expressive.Button.IconButton.Outlined"
54+
android:layout_width="wrap_content"
55+
android:layout_height="wrap_content"
56+
android:contentDescription="@null"
57+
android:importantForAccessibility="no"
58+
app:icon="@drawable/ic_expand_more_24"
59+
app:iconTint="?attr/colorOnSurfaceVariant" />
60+
</androidx.appcompat.widget.LinearLayoutCompat>
3861

39-
<com.google.android.material.textview.MaterialTextView
40-
android:id="@+id/answer"
41-
android:layout_width="match_parent"
42-
android:layout_height="wrap_content"
43-
android:layout_marginTop="8dp"
44-
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
45-
android:visibility="gone" />
62+
<com.google.android.material.textview.MaterialTextView
63+
android:id="@+id/answer"
64+
android:layout_width="match_parent"
65+
android:layout_height="wrap_content"
66+
android:layout_marginTop="8dp"
67+
android:paddingHorizontal="12dp"
68+
android:textAppearance="@style/TextAppearance.Material3.BodyMedium"
69+
android:visibility="gone" />
4670

47-
<com.google.android.material.divider.MaterialDivider
48-
android:id="@+id/divider"
49-
android:layout_width="match_parent"
50-
android:layout_height="wrap_content"
51-
android:layout_marginTop="12dp" />
71+
<com.google.android.material.divider.MaterialDivider
72+
android:id="@+id/divider"
73+
android:layout_width="match_parent"
74+
android:layout_height="wrap_content"
75+
android:layout_marginTop="12dp" />
5276

53-
</androidx.appcompat.widget.LinearLayoutCompat>
77+
</androidx.appcompat.widget.LinearLayoutCompat>
78+
</com.google.android.material.card.MaterialCardView>

0 commit comments

Comments
 (0)