How to programmatically configure Android ActionBar

I am developing an application for Google TV where all navigation will be done using the D-Pad / Keyboard.

In my activity there is an ActionBar and several horizontal lists below it. for example, list A, B and the C . Lists B and C load data based on the selected list item A .. so that they can / cannot load data.

The problem is that when the ActionBar has focus, and I press DOWN D-Pad, the focus is lost and not transferred to List C (or B if C has no data). Y?

To achieve this, I tried to make the ActionBar the next smooth view programmatically as follows

getActionBar().getCustomView().setNextFocusDownId(R.Id.list_C_id);

but does not work.

I also tried to check the layout hierarchy using the Hierarchy Viewer ... but, to be honest, I did not understand what to do with its results.

How can I configure Android ActionBar software control programmatically?

Any help is greatly appreciated.

The XML action is as follows:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainContainer" style="@style/main" >

<!-- Splash Screen -->
<LinearLayout
    android:id="@+id/splash_screen"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/welcome"
    android:orientation="vertical" >
</LinearLayout> 

<!-- main content holder.. it is shown afetr some time of showing above splash screen -->
<LinearLayout
    android:id="@+id/main_content_screen"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:focusable="true"
    android:visibility="invisible">

    <!-- All Packages List -->

    <LinearLayout
        android:layout_width="205dp"
        android:layout_height="match_parent"
        android:background="@drawable/content_round_bg"
        android:focusable="true"
        android:orientation="vertical" >

        <!-- Header of Packages-->
        <RelativeLayout
            style="@style/marginLeft5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"                
            android:background="@drawable/content_round_bg" >

            <ImageView
                android:id="@+id/packagesIcon"
                style="@style/titleIcon"
                android:src="@drawable/packages" >
            </ImageView>

            <TextView
                style="@style/title"
                android:layout_toRightOf="@+id/packagesIcon"
                android:text="Packages" >
            </TextView>

            <ProgressBar
                android:id="@+id/progressBarPackages"
                style="@style/progressBar" />
        </RelativeLayout>

        <!-- <View style="@style/horizontalSeperator" /> -->

        <ListView
            android:id="@+id/allPackagesList"
            style="@style/list"
            android:nextFocusRight="@+id/gridChannels">
        </ListView>

        <!-- Message which is hidden by default and is made visible if list has no data -->
        <LinearLayout
            android:id="@+id/packageNotFound"
            style="@style/emptyListIdentifier" >

            <ImageView
                style="@style/titleIcon"
                android:src="@drawable/info" >
            </ImageView>

            <TextView
                style="@style/emptyListIdentifierText"
                android:layout_marginLeft="5dp"
                android:text="Packages not available" >
            </TextView>
        </LinearLayout>
    </LinearLayout>

    <View style="@style/verticalSeperator" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:focusable="true"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/relativeLayout1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:focusable="true"
            android:layout_below="@+id/titleContainer" >

            <LinearLayout
                android:id="@+id/channelsContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.35"
                android:background="@drawable/content_round_bg"
                android:focusable="true"
                android:orientation="vertical" >

                <!-- Header of Channels-->
                <RelativeLayout
                    style="@style/marginLeft5"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/content_round_bg" >

                    <ImageView
                        android:id="@+id/channelsIcon"
                        style="@style/titleIcon"
                        android:src="@drawable/channels" >
                    </ImageView>

                    <TextView
                        style="@style/title"
                        android:layout_toRightOf="@+id/channelsIcon"
                        android:text="Channels" >
                    </TextView>

                    <ProgressBar
                        android:id="@+id/progressBarChannels"
                        style="@style/progressBar" />
                </RelativeLayout>

                <RelativeLayout style="@style/listsContiner" android:focusable="true" >

                    <GridView
                        android:id="@+id/gridChannels"
                        style="@style/grid"
                        android:divider="#10F1F1F1"
                        android:nextFocusLeft="@+id/allPackagesList"
                        android:nextFocusRight="@+id/gridAllVODs"
                        android:numColumns="2" />
                </RelativeLayout>

                <!-- Message which is hidden by default and is made visible if list has no data -->
                <RelativeLayout
                    android:id="@+id/channelsNotFound"
                    style="@style/emptyListIdentifier" >

                    <ImageView
                        android:id="@+id/NoChannelsIcon"
                        style="@style/titleIcon"
                        android:src="@drawable/info" >
                    </ImageView>

                    <TextView
                        style="@style/emptyListIdentifierText"
                        android:layout_toRightOf="@+id/NoChannelsIcon"
                        android:text="Channels are currently not available" >
                    </TextView>
                </RelativeLayout>
            </LinearLayout>

            <View style="@style/verticalSeperator" />

            <LinearLayout
                android:id="@+id/vodsContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="0.65"                    
                android:background="@drawable/content_round_bg"
                android:orientation="vertical" >

                 <!-- Header of VODs-->
                <RelativeLayout
                    style="@style/marginLeft5"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="@drawable/content_round_bg" >

                    <ImageView
                        android:id="@+id/VODsIcon"
                        style="@style/titleIcon"
                        android:src="@drawable/vod" >
                    </ImageView>

                    <TextView
                        style="@style/title"
                        android:layout_toRightOf="@+id/VODsIcon"
                        android:text="VOD" >
                    </TextView>

                    <ProgressBar
                        android:id="@+id/progressBarVODs"
                        style="@style/progressBar" />
                </RelativeLayout>                    

                <RelativeLayout style="@style/listsContiner" >
                    <GridView
                        android:id="@+id/gridAllVODs"
                        style="@style/grid"
                        android:divider="#10F1F1F1"
                        android:nextFocusLeft="@+id/gridChannels"
                        android:nextFocusRight="@+id/allPackagesList"
                        android:numColumns="1" />
                </RelativeLayout>

                <!-- Message which is hidden by default and is made visible if list has no data -->

                <RelativeLayout
                    android:id="@+id/videosNotFound"
                    style="@style/emptyListIdentifier" >

                    <ImageView
                        android:id="@+id/NoVODsIcon"
                        style="@style/titleIcon"
                        android:src="@drawable/info" >
                    </ImageView>

                    <TextView
                        style="@style/emptyListIdentifierText"
                        android:layout_centerInParent="true"
                        android:layout_toRightOf="@+id/NoVODsIcon"
                        android:text="Videos are currently not available" >
                    </TextView>
                </RelativeLayout>
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

All containers of each list / grid to the Top of LinearLayout itself set the android: focusable = "true" directly or according to their own style.

EDIT: An example application that describes exactly my spp screen can be downloaded from here.

In the first list indicate . You can find it by id allPackagesList in the main.xml file. I forgot to insert it. excuse me

Problems in this app:

  • Focus does not fall into the list / grid from the ActionBar.
  • ActionBar D-Pad "LEFT" "RIGHT"
+5
1

, ? android: focusable = "true" .

0

All Articles