2016-03-28 13 views
0

Müzisyenlerin bir listesini görebileceğiniz basit bir uygulama geliştiriyorum ve bir müzisyeni tıkladığınızda bununla ilgili ayrıntılar (tür, en çok hit ve biyografi) elde edersiniz. Elde etmek istediğim işlevsellik şudur: geniş bir ekranda görüntülüyorsanız, müzisyenlerin listesi solda olmalı ve detaylar sağda görünmelidir (bir kez müzisyen tıklandığında); dar bir ekransa, ayrıntılar yeni bir ekranda ayrı olarak görünmelidir. İşlevler, fragmanlar ve Framelayouts ile gerçekleştirilmelidir. Android hareketleri yanlış düzen dosyası yüklüyor

Yani activity_main.xml var ve yeni kaynak dosyası ekleyin gitti -> düzeni dosyası ve ben otomatik yatay yönlü akıllı telefonlar veya tabletler üzerine yüklenmesini istiyor activity_main.xml (w600dp) eklendi.

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: listesini içerir ve ayrıntıları birkaç TextBlocks oldukça basit parçaların

<?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 en. İşte MainActivity sınıfının onCreate bir yöntem vardır:

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

Sınıflar FragmentDetalji ve FragmentListaonCreateView kullanan yanında çok özel yapmayın (onlar sorun kaynağı olabilir eğer ekleyebilirsiniz rağmen).

Sorun şu ki, bu uygulamayı yüklemek için kullandığım her ne olursa olsun, event_main varsayılan formuna yüklenir, w600dp sürümü! Neyi yanlış yapıyorum?

+0

sizin res klasör yapısı ekran görüntüsü gönderin. –

+0

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

+0

Lütfen Manifest dosyanızı yapıştırın. –

cevap

0

Alternatif mizanpaj kaynakları sağlamak için, layout-sw600dp adlı res klasörünüzün içinde bir alt dizin oluşturmanız ve değiştirilmiş mizanpajı buraya, diğer küçük ekran mizanpajı olarak EXACT adıyla yerleştirmeniz gerekir. Ardından, Etkinliğiniz bu klasöre otomatik olarak bakmalıdır. Yani, xml dosyanız activity_main.xml olarak adlandırılmışsa, aynı adı da layout-sw600dp klasöründe olmalıdır.

Ayrıca, geniş bir ekran için layout-land veya layout-sw600dp-land adlı bir alt dizin oluşturarak, yatay düzenlemeler için alternatif düzenler sağlayabilirsiniz.

Ayrıca sw600dp ve w600dp kullanmak arasındaki farklar olduğunu unutmayınız - daha fazla bilgi için bu soruya bakın: Difference between sw600dp and w600dp?

+0

Android Studio bunu otomatik olarak benim için yaptı. Anlamadım, neden yüklenmiyor? –

+0

Kullanıcının ekranı döndüğü sırada düzenin değişmesini istiyorsanız, bunun yerine 'layout-land 'öğesini kullanmanız gerekir. Eğer mizanpajın daha büyük ekranlarda farklı olmasını istiyorsanız, "sw600dp" yi ve w600dp'yi kullanmayın. İkisi hakkında daha fazla bilgi için cevabımda bağlantı kurduğum soruya bakın. – NoChinDeluxe

+0

Ben yeterince geniş bir ekran hemen hemen aynı şekilde çalışmak için bekliyorum, peyzaj akıllı telefon sadece bir örnek, bir tablet ya da her ne olabilir. –

İlgili konular