gpt4 book ai didi

android - 创建一个 Android 左侧面板,就像 google tv 中 "TV & Movies"应用程序中的面板一样

转载 作者:搜寻专家 更新时间:2023-11-01 09:10:03 25 4
gpt4 key购买 nike

我有一种情况需要创建一个左侧面板。我的经理说这应该像 中使用的一样影视谷歌电视设备上的应用程序,它最初只显示图标,并在内容上扩展到右侧,当它获得焦点时也显示图标的文本。
我希望标签如下图所示(白色框是我的链接,红色框是我的左侧面板):
Required Left Panel Structure
可以查看放大的图像here
我对左侧面板的要求是:

  • 当它的任何链接被聚焦时,它应该扩展到右侧部分。我认为动画的宽度应该不难。但是我怎么知道一个控件是左面板得到/失去焦点
  • 当在左侧面板中单击任何链接时,单独的 Activity 将加载到右侧的 FrameLayout 中......我也使用变通方法完成了它。但我更愿意知道一些体面的好方法。
  • 当用户通过按下 RIGHT D-PAD 按钮聚焦加载的 Activity 时,左侧面板的宽度应该减小并且应该隐藏图标的文本。
  • 我必须能够使用 自由导航键盘 中加载的左侧面板和子 Activity 控件之间容器框架布局。这是因为我的应用程序适用于 Google TV,用户可以使用 进行导航。方向键 . 这是我面临的主要问题...因为我无法从子控件导航到其父控件的邻居控件

  • 为了获得上述所有要点,我查看了 TabHost,但找不到一种方法使其看起来像我需要的那样。
    我也看过 themissingtabwidget但它的垂直选项卡填充了所有垂直可用空间,并且位置对我来说是无法控制的,我需要更像左侧面板这样的结构,我可以在我想要的任何位置放置链接。所以这也失败了。
    现在我决定自己创建一个。
    我正在通过以下方式进行操作:
  • main.xml 包含 框架布局在根本上持有
  • 框架布局用于举行 Activity ——我从左边设置了它的边距,以便下一个左边的面板适合那个空间,当我为面板的大小设置动画时,什么时候会覆盖框架而不是进入它下面
  • 相对布局 用于保存左侧面板项目。


  • Main.xml 如下:
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <!--
    THIS First TabHost IS NOT USED AT ALL.
    I JUST PUT IT HERE AS THE underlying TabActivity required it and was giving me error.
    You can see its visibility is set to GONE.

    You can just minimize it and forget it as its a silly Workaround.
    and help me if you know of some better way
    -->
    <TabHost
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:visibility="gone" >

    <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <TabWidget
    android:id="@android:id/tabs"
    android:layout_width="100dp"
    android:layout_height="fill_parent"
    android:layout_weight="0"
    android:orientation="vertical" />

    <FrameLayout
    android:id="@android:id/tabcontent"
    android:layout_width="fill_parent"
    android:layout_height="0dip"
    android:layout_weight="1" />
    </LinearLayout>
    </TabHost>

    <!--
    Activities are loaded here in this frame.
    Its margin from Left is set to 150dp to have space.
    Its placed on the first place as the second RelativeLayout would be used as Left Panel.
    -->
    <FrameLayout
    android:id="@+id/container"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginLeft="150dp"
    android:nextFocusLeft="@+id/leftpanel"
    android:background="#CCAAAA" >
    </FrameLayout>

    <!--
    Left Panel holding links/buttons etc to load a separate activity in above FrameLayout
    -->
    <RelativeLayout
    android:id="@+id/leftpanel"
    android:layout_width="200dp"
    android:layout_height="fill_parent"
    android:background="#33FAFAFA"
    android:focusable="True"
    android:orientation="vertical" >

    <Button
    android:id="@+id/btnArtists"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Artists" >
    </Button>

    <Button
    android:id="@+id/btnAlbum"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/btnArtists"
    android:text="Album" >
    </Button>

    <Button
    android:id="@+id/btnLogin"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="True"
    android:text="Login" >
    </Button>
    </RelativeLayout>

    主要标签 Activity 如下:
    public class TestActivity extends TabActivity {
    FrameLayout container;
    Intent artistsIntent;
    Intent albumsIntent;

    /** Called when the activity is first created. */
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    container = (FrameLayout)findViewById(R.id.container);
    artistsIntent = new Intent().setClass(this, ArtistsActivity.class);
    albumsIntent = new Intent().setClass(this, AlbumsActivity.class);

    Button btnArtist = (Button)findViewById(R.id.btnArtists);
    btnArtist.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
    container.removeAllViews();
    View view = getLocalActivityManager().startActivity("ArtistsActivity",
    new Intent(getApplicationContext(), ArtistsActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
    container.addView(view);
    }
    });

    Button btnlbum = (Button)findViewById(R.id.btnAlbum);
    btnlbum.setOnClickListener(new OnClickListener() {

    public void onClick(View v) {
    container.removeAllViews();
    View view = getLocalActivityManager().startActivity("AlbumsActivity",
    new Intent(getApplicationContext(), AlbumsActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
    container.addView(view);

    }
    });
    }
    }
    正如你所看到的,主要的 TestActivity 是一个 TabActivity 它提供了实现选项卡的功能。我从 扩展了我的 Activity TabActivity 因为,据我所知,这是将 Activity 作为 subview 添加到 FrameLayout 的唯一方法。
    这也迫使我有一个 TabHost 用那个特定的名字。所以我添加了它并将其可见性设置为 走了 让它停止提示。 ... 是的,我知道...这是一个愚蠢的解决方法 ..但如果我知道一些正确的方法,我就不会在这里......所以如果有更好的方法可以帮助我。
    我当前测试项目的另一个问题是,当我聚焦在 中加载的子 Activity 中的按钮时框架布局使用右箭头键 .. 我无法使用 将注意力集中在左面板中的按钮上左 键盘键...
    怎么做????????????
    我上传了小样本项目here .请下载并查看它。还要在 AndroidManifest.xml 中将 .TestActivity 的主题设置为 android:theme="@android:style/Theme.Holo"以按预期全屏查看应用程序。
    非常感谢您的帮助。
    注意:我正在为 Google TV 创建这个应用程序......其中导航主要取决于方向键......所以我必须确保我可以使用 Kayboard 到达任何地方。
    所以帮帮我。

    最佳答案

    如果我没记错的话,您正在寻找 Left Navigation Bar Library由 Google 专门为此目的而提供。

    另请参阅提供的 sample code for using it .

    关于android - 创建一个 Android 左侧面板,就像 google tv 中 "TV & Movies"应用程序中的面板一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862924/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com