2016-03-28 11 views
0

ミュージシャンのリストを見ることができるシンプルなアプリを開発しています。ミュージシャンをクリックすると、ジャンル(トップヒット、バイオグラフィー)に関する詳細が表示されます。 私が達成したい機能は次のとおりです。ワイドスクリーンで見ている場合は、ミュージシャンのリストを左側に、詳細が右側に表示されるようにします(ミュージシャンをクリックすると)。画面が狭い場合は、新しい画面に詳細が別々に表示されます。機能はフラグメントとFramelayoutsで実行する必要があります。Androidのアクティビティが間違ったレイアウトファイルを読み込む

だから私はactivity_main.xmlを持っている、と私は、新しいリソース・ファイルに追加に行ってきました - >レイアウトファイルをし、私は自動的に横長のスマートフォンやタブレットにロードすることを期待activity_main.xml (w600dp)を追加しました。

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/muzicari_lista" 
     android:layout_weight="1"> 
    </FrameLayout> 

</LinearLayout> 

w600dp/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@+id/lista_muzicara"></FrameLayout> 
    <FrameLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:id="@+id/detalji_muzicar"></FrameLayout> 
</LinearLayout> 

XMLのリストが含まれており、詳細は、いくつかのテキストブロックとかなりシンプルですフラグメントの。 ここmainActivityのクラスのonCreateメソッドです:

protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     unosi = new ArrayList<Muzicar>(); //let's presume there's something in this list 


     wideL = false; 
     FragmentManager fm = getFragmentManager(); 
     //fetching FragmentManager 
     FrameLayout ldetalji = (FrameLayout)findViewById(R.id.detalji_muzicar); 
     if(ldetalji!=null){ 
//layout for wide screens 
      wideL=true; 
      FragmentDetalji fd; 
      fd = (FragmentDetalji)fm.findFragmentById(R.id.detalji_muzicar); 
//checking if there is FragmentDetalji already created: 
      if(fd==null) { 
       //if not, we're creating it now 
       fd = new FragmentDetalji(); 
       fm.beginTransaction().replace(R.id.detalji_muzicar, fd).commit(); 
      } 
     } 

     FragmentLista fl = (FragmentLista)fm.findFragmentByTag("Lista"); 
//we're checking if there's already fl created 

     if(fl==null){ 
      //if it hasn't been created: 
      fl = new FragmentLista(); 
      Bundle argumenti = new Bundle(); 
      argumenti.putParcelableArrayList("Alista",unosi); 
      fl.setArguments(argumenti); 
      fm.beginTransaction().replace(R.id.muzicari_lista, fl).commit(); 
     }else{ 
      //case when we change from portrait to landscape, and there was FragmentDetalji already open 

      fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
     } 
    } 

クラスFragmentDetaljiFragmentListaonCreateViewを利用以外にも多くの特別行いません(彼らはトラブルの原因になる可能性がある場合、私はそれらを追加することができますが)。

問題は、このアプリケーションの読み込みに何を使用しても、activity_mainはw600dpではなく、デフォルトの形式で読み込まれることです。私は間違って何をしていますか?

+0

あなたのresフォルダ構造のスクリーンショットを投稿してください。 –

+0

@Shadab Ansari http://prntscr.com/alaq06 activity_pocetni = activity_main。 –

+0

マニフェストファイルを貼り付けてください。 –

答えて

0

代替レイアウトリソースを提供するには、layout-sw600dpという名前のresフォルダ内にサブディレクトリを作成し、そこに変更されたレイアウトを置き、EXACT名をもう1つの小さな画面レイアウトとして配置する必要があります。次に、あなたのアクティビティは自動的にこのフォルダ内を検索します。したがって、xmlファイルのタイトルがactivity_main.xmlの場合は、同じ名前のファイルがlayout-sw600dpフォルダにあるはずです。

大画面用にlayout-landまたはlayout-sw600dp-landと呼ばれるサブディレクトリを作成して、横向きの代替レイアウトを提供することもできます。

sw600dpw600dpを使用しての間に違いがあることに注意してください - 詳細は、この質問を参照してください:Difference between sw600dp and w600dp?

+0

Android Studioが自動的にこれを行っています。私はちょうどそれがロードされていない理由を取得していない。 –

+0

ユーザが画面を回転したときにレイアウトを変更したい場合は、代わりに 'layout-land'を使う必要があります。大画面でレイアウトを異ならせたい場合は、 'w600dp'ではなく' sw600dp'を使います。この2つの詳細については、私の答えにリンクされている質問を参照してください。 – NoChinDeluxe

+0

私はそれが十分広い画面でほぼ同じように動作することを期待していますが、ランドスケープスマートフォンは単なる例にすぎず、タブレットやその他のものであってもかまいません。 –

関連する問題