2015-08-27 7 views
0

Я использую AA и хотел бы указать два разных файла макета xml для портретной и альбомной ориентации.Андронаты Android: разные макеты для портрета и пейзажа

В моем классе java, отмеченном как EActivity, предоставляется метод, аннотированный с помощью @Click, для ответа на событие click.

Все работает нормально в портретном режиме. Но когда телефон повернут, изменения макета и кнопки больше не отвечают.

Я предполагаю, что макет, предоставленный после аннотации @EActivity, представляет собой макет портрета.

Как я могу предоставить как портретные, так и ландшафтные макеты?

Заранее спасибо.

Update Я слушаю "ориентации изменения с использованием двух различных файлов макета один, для портрета, который называется макет/contact.xml, а другой, для пейзажа, который называется раскладка-земля/contact.xml. Android делает все остальное и использует правильный макет в соответствии с ориентацией телефона.

Чтобы зарегистрировать прослушиватель событий щелчка, я использую Android Аннотации:

contact.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:background="#000000" 
    android:layout_height="match_parent"> 

    <include 
     layout="@layout/header_layout" /> 

    <!-- Some elements --> 
</LinearLayout> 

header_layout.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:background="#000000" 
    android:layout_height="60dp"> 

    <ImageButton 
     android:id="@+id/menuHome" 
     android:layout_width="25dp" 
     android:src="@drawable/menu" 
     android:paddingTop="22dp" 
     android:paddingBottom="22dp" 
     android:layout_marginLeft="10dp" 
     android:layout_marginRight="10dp" 
     android:layout_gravity="center" 
     android:background="#00000000" 
     android:scaleType="fitCenter" 
     android:layout_height="match_parent" /> 
    <!-- Other buttons --> 
</LinearLayout> 

Contact.java

@EActivity(R.layout.activity_contact) 
public class ContactActivity extends TopLevelActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public String getPageTitle() { 
     return "Nous contacter"; 
    } 
} 

** TopLevelActivity.java **

@EActivity 
public abstract class TopLevelActivity extends Activity implements ITopLevelActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Click 
    public void menuHome() { 
     startActivity(new Intent(this, HomeActivity_.class)); 
    } 
} 
+0

Как вы слушаете изменения ориентации и когда вы регистрируете представления для прослушивания кликов? Добавьте этот код, чтобы мы могли лучше помочь. – JoxTraex

ответ

0

Добавьте следующий код в файл Java

@Override 
public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
    if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) 
    { 
     setContentView(R.layout.activity_main_h); 
     button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
    } 
    else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) 
    { 
     setContentView(R.layout.activity_main_v); 
     button1 = (Button)findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
    } 
} 

Кроме того, добавьте следующие строки в вашей деятельности в манифесте: android:configChanges="keyboardHidden|orientation|screenSize"

+0

Я обновил свой вопрос и, конечно же, попробовал то, что вы предложили. Спасибо за ваш ответ, я добавил ваш фрагмент кода в contact.java, но метод не вызывается (я поставил точку останова, и он никогда не запускался). – Arthur

+0

вам нужно будет добавить 'android: configChanges =" keyboardHidden | orientation | screenSize "' к вашей активности в манифесте, если этого не сделать, то этот метод не вызывается, см. Http://developer.android.com /reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration) –

+0

Спасибо за комментарий, он решил мою проблему. Положите его в ответ, чтобы я мог его принять ;-) – Arthur

Смежные вопросы