I have created an Android App for Android TV, I want to know how can I enable D-pad naigation to my menu. I am new to android TV applications,and could not find anyother way to do the same. For menu I have added 4 TextViews, but they are not accesible by D-Pad, is there anyother way to make them accessible to DPAD or I should use anyother View for this.
Here's the layout file:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true"
tools:context=".MainActivity">
<FrameLayout
android:id="@+id/mainframe"
android:layout_width="810dp"
android:layout_height="538dp"
android:layout_marginStart="1dp"
android:layout_marginTop="1dp"
android:layout_marginEnd="1dp"
android:layout_marginBottom="1dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/linearLayout"
app:layout_constraintTop_toTopOf="parent">
</FrameLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="148dp"
android:layout_height="0dp"
android:layout_marginTop="1dp"
android:layout_marginBottom="1dp"
android:background="@color/colorPrimaryDark"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0">
<TextView
android:id="@+id/NIYA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp"
android:fontFamily="cursive"
android:nextFocusDown="@+id/livePreview"
android:text="NIYA"
android:textColor="@color/colorPrimary"
android:textSize="30sp" />
<TextView
android:id="@+id/livePreview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:fontFamily="@font/montserrat"
android:gravity="center_horizontal"
android:nextFocusDown="@+id/AddDevice"
android:text="Live Preview"
android:textColor="@color/colorPrimary"
android:textSize="18sp" />
<TextView
android:id="@+id/AddDevice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:fontFamily="@font/montserrat"
android:gravity="center_horizontal"
android:nextFocusDown="@+id/deviceManager"
android:text="Add A Device"
android:textColor="@color/colorPrimary"
android:textSize="18sp" />
<TextView
android:id="@+id/deviceManager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:fontFamily="@font/montserrat"
android:gravity="center_horizontal"
android:nextFocusDown="@+id/chooseStorage"
android:text="Device Manager"
android:textColor="@color/colorPrimary"
android:textSize="18sp" />
<TextView
android:id="@+id/chooseStorage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:fontFamily="@font/montserrat"
android:gravity="center_horizontal"
android:text="Choose Storage"
android:textColor="@color/colorPrimary"
android:textSize="18sp" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
In general, you don't want to use a
TextViewfor something like this. It sounds to me like these views are meant to beButtons because you want the user to interact with them. Using aButtonis also better for accessibility and you can always style a Button to look how you want.The reason your layout doesn't work is because a TextView is not focusable by default. Although I highly recommend using a Button in this case, you can make a TextView focusable in the XML by adding
android:focusable="true"or by setting focusable to true at runtime with thesetFocusablesetter method. Just note that you need to make sure theViewitself has a means of showing that it's focused (e.g., aStateListDrawable).