2012-01-14 2 views
2

왼쪽 패널을 만들어야하는 경우가 있습니다. 저의 관리자는 TV & Movies Google TV 장치에있는 응용 프로그램과 같아야하며 처음에는 아이콘 만 표시하고 초점이 맞으면 아이콘의 텍스트를 표시 할 수있는 내용을 오른쪽으로 확장합니다.Google TV의 "TV & Movies"응용 프로그램과 같은 Android 왼쪽 패널 만들기

Required Left Panel Structure

확대 이미지를 볼 수 있습니다

here

:

나는 탭이 다음 이미지 (흰색 상자 내 링크입니다 빨간색 ractangle 내 왼쪽 패널입니다)처럼되고 싶어요

왼쪽 패널에 대한 내 요구 사항은 다음과 같습니다.

  1. 그것의 링크 중 하나가 집중 될 때. 나는 너비가 어려워서는 안된다. 하지만 컨트롤이 왼쪽 패널에 있음을 알 수 있습니까/포커스를 잃었습니까?
  2. 링크가 왼쪽 패널에서 클릭 될 때 별도의 액티비티가 오른쪽의 FrameLayout에로드됩니다 ... 나는 또한 해결 방법. 그러나 나는 훌륭한 접근 방법을 알고 싶어합니다.
  3. 왼쪽 패널의 너비가 줄어야하며 사용자가 RIGHT D-PAD 버튼을 눌러로드 된 활동에 집중하면 아이콘의 텍스트를 숨겨야합니다.

  4. 내가 왼쪽 패널과 용기 FrameLayout이로드되어 자식 활동 컨트롤 사이 키보드를 사용하여 이동이 자유롭게 할 수 있어야합니다. 이는 내 응용 프로그램이 D-Pad을 사용하여 내비게이션을 선점하는 Google TV 용 애플리케이션이기 때문입니다. 내가

모든 위에서 언급 한 점을 가지고 부모의 이웃 컨트롤에 자식 컨트롤에서 탐색 할 수없는 나처럼 이 ... 내가 직면하고있는 주요 문제가 나는 TabHost 보았지만 수 내가 필요로하는 것처럼 보이게하는 방법을 찾지 못했습니다.

나는 또한 themissingtabwidget을 보았습니다. 그러나 수직 탭이 모든 수직 사용 가능한 공간을 채우고 배치가 나를 위해 제어 할 수 없기 때문에 원하는 위치에 링크를 배치 할 수있는 구조와 같은 왼쪽 패널과 같은 것이 필요합니다. 그래서 이것은 실패했습니다.

이제 직접 제작하기로 결정했습니다. - 난 너무 왼쪽에서 마진을 설정 한

  1. 이 main.xml에 활동을 유지하기위한
    • FrameLayout이을 보유하고 루트에 FrameLayout이이 포함 나는 그것을 다음과 같은 방법을하고있는 중이 야 그 다음 왼쪽 패널이 그 공간에 맞을 것인가 패널의 크기를 움직일 때 그 프레임의 밑으로가는 프레임을 덮을 때
    • Relativ 왼쪽 패널 항목을 보유하기위한 eLayout.

      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); 
      
           } 
          }); 
      }  
      } 
      

      로서 다음과 같이

      <?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> 
      

      메인 탭 활성은 다음과 같이

main.xml에이며 주요 TestActivity가 탭을 구현하는 기능을 제공하는 TabActivity임을 알 수 있습니다. 필자는 내 활동에 따라 TabActivity에서 활동을 확장했다. 내 지식에 따르면 이것이 FrameLayout에 자식보기로 활동을 추가하는 유일한 방법이기 때문입니다.

이것은 또한 특정 이름을 가진 TabHost을 갖게했습니다. 그래서 나는 그것을 추가하고 가시성을 으로 설정하여이되어 불평을 멈추게합니다. ... 예 아니요 ... 알고 계셨습니까? 이건 아주 간단한 해결 방법입니다. ..하지만 적절한 방법을 알고 있다면 여기에 없었을 것입니다. 더 나은 방법이 있다면 저를 도와주세요.

내 현재 테스트 프로젝트의 또 다른 문제는 내가 오른쪽 화살표 키를 사용하여 FrameLayout이에로드 자식 활동에 버튼을 집중할 때 ... 내가 LEFT를 사용하여 왼쪽 패널의 버튼에 다시 초점을 맞출 수 없다는 것입니다 키보드 키 ...

그것을 어떻게 ????????????

나는 작은 샘플 프로젝트 here을 업로드했습니다. 그것을 다운로드하여보십시오. AndroidManifest.xml에서 .TestActivity의 테마를 android : theme = "@ android : style/Theme.Holo"로 설정하면 앱을 전체 화면으로 볼 수 있습니다.

귀하의 도움에 감사드립니다.

참고 : Google TV 용 탐색 앱은 주로 D-Pad ...에 의존하므로이 앱을 어디서나 Kayboard를 사용하여 연결할 수 있는지 확인해야합니다.

도와주세요.

답변

1

Android 조각이 귀하의 목적에 완벽 할 것입니다. documentation을 살펴보십시오. 실제로는 명확하고 올바르게 사용하는 방법을 설명합니다. 내가 잘못 본게 아니라면