Android - orientacja pozioma

0

Witam serdecznie,

chcę, aby moja aplikacja obsługiwała w indywidualny sposób widoki w orientacji pionowej i poziomej. Mam w tym celu stworzony w folderze layout-land plik xml o tej samej nazwie, co xml z orientacji pionowej. Jak na razie w moim xml-u land nic nie ma (white screen), jedynie pusty RelativeLayout. Mimo to, przy obrocie ekranu telefonu aplikacja jest zatrzymywana. Czy o czymś zapomniałam? Trzeba jeszcze coś dopisać w manifeście etc.?

0

W domyślnym layoucie zapewne definiujesz jakieś symbole - identyfikatory widoków (zawsze się coś takiego robi).
Jeśli w alternatywnym layoucie nie używasz tych symboli, a próbujesz za ich pomocą odnaleźć jakiś widok to zapewne dostajesz "null reference exeception".
Pokaż kod activity.Create i domyślny xml.

0

Mój wyjściowy (pionowy) widok:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:id="@+id/mainLayout"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
        
        android:clickable="true"
        android:onClick="onClick"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="vertical" >
         
       <requestFocus />
		
        <ImageView
            android:id="@+id/logowanie_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            android:contentDescription="@string/LOGOWANIE_LOGO_TXT"
            android:src="@drawable/logo" />

        <TextView
            android:id="@+id/logowanie_txt_haslo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/logowanie_txt_login"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="25dp"
            android:text="@string/LOGOWANIE_HASLO"
            android:textSize="17sp" />

        <EditText
            android:id="@+id/logowanie_haslo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@id/logowanie_txt_haslo"
            android:layout_alignBottom="@id/logowanie_txt_haslo"
            android:layout_alignParentRight="true"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_toRightOf="@id/logowanie_txt_haslo"
            android:inputType="textPassword" 
            android:lines="1"/>
        
         <TextView
             android:id="@+id/logowanie_txt_powitanie"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
             android:layout_below="@id/logowanie_logo"
             android:layout_marginLeft="15dp"
             android:layout_marginRight="15dp"
             android:layout_marginTop="35dp"
             android:gravity="center_horizontal"
             android:text="@string/LOGOWANIE_POWITANIE"
             android:textSize="17sp" />

         <TextView
             android:id="@id/logowanie_txt_login"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignRight="@id/logowanie_txt_haslo"
             android:layout_below="@id/logowanie_txt_powitanie"
             android:layout_marginLeft="10dp"
             android:layout_marginTop="35dp"
             android:text="@string/LOGOWANIE_LOGIN"
             android:textSize="17sp" />

         <EditText
             android:id="@+id/logowanie_login"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignBaseline="@+id/logowanie_txt_login"
             android:layout_alignBottom="@id/logowanie_txt_login"
             android:layout_alignParentRight="true"
             android:layout_marginLeft="10dp"
             android:layout_marginRight="10dp"
             android:layout_toRightOf="@id/logowanie_txt_login"
             android:ems="10"
             android:inputType="text"
             android:lines="1" />

         <Button
            android:id="@+id/logowanie_przycisk_dalej"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/logowanie_haslo"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="34dp"
            android:minHeight="50dp"
            android:minWidth="100dp"
            android:onClick="logIN"
            android:text="@string/LOGOWANIE_DALEJ" />

         <CheckBox
             android:id="@+id/logowanie_zapamietaj"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_alignParentBottom="true"
             android:layout_alignParentLeft="true"
             android:layout_marginBottom="10dp"
             android:text="@string/LOGOWANIE_ZAPAMIETAJ"
             android:textSize="12sp" />

     </RelativeLayout>

Xml orientacji poziomej:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    

</RelativeLayout>
 

Metoda onCreate:


protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_logowanie);
		
	upr = Uprawnienia.wezInstancje();
		
	checkBox = (CheckBox) findViewById(R.id.logowanie_zapamietaj);
        login = (EditText) findViewById(R.id.logowanie_login);
        haslo = (EditText) findViewById(R.id.logowanie_haslo);
        
        SharedPreferences pref = this.getSharedPreferences("Ustawienia", Context.MODE_PRIVATE);
        String str = pref.getString(LOGIN, BRAK_LOGINU);
        
        
        if (!(str.equals(BRAK_LOGINU) || (str.equals(NULL)))){
        	login.setText(str);
        	checkBox.setChecked(true);
        }
        else{
        	login.setText("");
        	checkBox.setChecked(false);
        }
}

 

Jeśli jest tak jak mówisz, to faktycznie mój problem może być związany z otrzymywaniem NullPointerException przy landscape. Czyli rozumiem, że wszystkie komponenty na widoku poziomym powinny się nazywać tak samo, jak w pionowym? Dzięki za pomoc

0

W domyślnym layoucie powinny się znaleźć jedynie takie: "@+id/<nazwa symbolu="symbolu">" (z plusikiem) definicje identyfikatorów. (+ powoduje tworzenie nowej stałej).
Wszystkie alternatywne layouty powinny, używać tych samych symboli, ale bez plusów (chyba, że z jakiegoś powodu mają jakiś nowy własny obiekt).

Biorąc pod uwagę jak wygląda twój onCreate minimalny layout alternatywny wygląd tak:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent" 
              android:layout_height="fill_parent" 
              android:orientation="vertical" >
    <EditText
             android:id="@id/logowanie_login"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content" />
</LinearLayout>

"logowanie_haslo" jest niepotrzebne bo mimo, że szukasz tego elementu, to go nie używasz.

0

Tak, na razie nie używam, bo to jeszcze niedokończony projekt. Na razie aplikacja działa bez logowania, stąd nie używam hasła, ale w przyszłości mi się ono przyda ;) Pięknie dziękuję za pomoc. Sądzę, że możemy temat zamknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1