2012-07-30 14 views
5

Używam różnych układów dla różnych ekranizatów i urządzeń. Używam Fragmentów z określonymi Folderami Układu. Koncepcja jest świetna, jeśli chodzi o tablety i urządzenia z dużym ekranem, umieszczam plik układu w postaci layout-sw600dp, a system Android umożliwia dostarczenie odpowiedniego układu na różnych urządzeniach.Jaki jest najlepszy sposób oddzielenia różnych logik programowania dla różnych układów w systemie Android?

Co mam do mnie: Jak mogę się dowiedzieć, jaki układ jest używany w moim Kodzie. Moje fragmenty wymagają nieco innych kodów dla różnych układów.

W ogóle, jaka jest najlepsza praktyka oddzielania logiki programowania układu niestandardowego w obrębie moich fragmentów/działań?

Moje podejście jest teraz trochę hacky i nie jest zsynchronizowane z różnymi folderami układu.

private boolean isTabletDevice() { 
    if (android.os.Build.VERSION.SDK_INT >= 11) { // honeycomb 
     // test screen size, use reflection because isLayoutSizeAtLeast is 
     // only available since 11 
     Configuration con = getResources().getConfiguration(); 
     try { 
     Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast", int.class); 
     Boolean r = (Boolean) mIsLayoutSizeAtLeast.invoke(con, 0x00000004); // Configuration.SCREENLAYOUT_SIZE_XLARGE 
     return r; 
     } catch (Exception x) { 
     x.printStackTrace(); 
     return false; 
     } 
    } 
    return false; 
    } 

a następnie

if(isTabletDevice()) { 
//findViewById(R.id.onlyInTabletLayoutButton); 
}else{ 
// 
} 

Odpowiedz

2

Jest to metoda używam osobiście:

W każdym układzie, dodaję Tag do głównego układu i upewnij się, że wszystkie z korzeniami układ mają takie same ID. Tak na przykład, będę mieć układ, który wygląda mniej więcej tak:

<RelativeLayout 
android:id="@+id/rootView" 
android:tag="landscapehdpi"> 
<!-- Rest of layout --> 
</RelativeLayout> 

A potem mieć inny jak:

<RelativeLayout 
android:id="@+id/rootView" 
android:tag="portraitmdpi"> 
<!-- Rest of layout --> 
</RelativeLayout> 

Wtedy gdy układ został nadmuchany, używam:

View rootView = (View) findViewById(R.id.rootView); 

Powoduje zwrócenie aktualnie używanego układu głównego układu.Teraz, aby określić, który układ jest dokładnie i uruchomić odpowiedni kod, używam serię if-else bloków:

String tag = rootView.getTag().toString(); 

if(tag.equals("landscapehdpi")) 
{ 
//Code for the landscape hdpi screen 
} 
else if(tag.equals("portraitmdpi")) 
{ 
//Code for the portrait mdpi screen 
} 
//And so on... 

Więc w zasadzie za pomocą tego można wiedzieć, który układ został załadowany przy starcie i uruchomić odpowiedni kod.

1

myślę szukasz tego samego rozwiązania, jak to pytanie tutaj,

How can I detect which layout is selected by Android in my application?.

Jeśli chcesz zobaczyć najlepszą odpowiedź, dostępne są dwie opcje.

  1. Najpierw należy użyć config do folderu wartości, a następnie pobrać ciąg z pliku xml i sprawdzić go. (Aby użyć go jako flagi).

https://stackoverflow.com/a/11670441/603744

  1. a kolejna jest ustawiony znacznik do swoich układów i uzyskać etykietę z kodem, aby dowiedzieć się, które tag drukuje i na tej podstawie znaleźć układ, co wykorzystał . Ale trzeba również zauważyć, że w tym podejściu jest mały błąd. Ale jeszcze ich nie zmęczyłem.

https://stackoverflow.com/a/11205220/603744

Powiązane problemy