2015-08-17 2 views
1

Любая проблема, которую я нашел, связанная с этим, всегда была устранена путем исправления путей файлов макета, и я уверен, что мои права верны.Ресурс «ценности-большие земли» Android не загружается

У меня очень простой макет, который должен иметь разделенный вид для больших ландшафтных устройств. Поэтому у меня есть:

  • макет/main.xml
  • макет/main_twopane.xml
  • значения/main.xml
  • значения-большой земли/main.xml

И Я загружаю планшет Nexus 7 в ландшафт (который классифицируется как большое устройство). Проблема в том, что всегда загружается main.xml, когда в соответствии с Android documentation я должен загрузить две панели для больших устройств на ландшафт.

Вот код:

макет/main.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:layout_height="match_parent"> 

<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/fragment_catches" 
    android:name="com.cohenadair.anglerslog.fragments.CatchesFragment" 
    tools:layout="@layout/fragment_catches" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

</LinearLayout> 

макет/main_twopane.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"> 

    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/fragment_catches" 
     android:name="com.cohenadair.anglerslog.fragments.CatchesFragment" 
     tools:layout="@layout/fragment_catches" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" /> 

    <fragment xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/fragment_catch" 
     android:name="com.cohenadair.anglerslog.fragments.CatchFragment" 
     tools:layout="@layout/fragment_catch" 
     android:layout_width="fill_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

значения/main.xml

<resources> 
    <item name="main_layout" type="layout">@layout/main</item> 
    <bool name="has_two_panes">false</bool> 
</resources> 

значения -large-land/main.xml

<resources> 
    <item name="main_layout" type="layout">@layout/main_twopane</item> 
    <bool name="has_two_panes">true</bool> 
</resources> 

код, который загружает раскладку, в MainActivity.java:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

И в каждом отдельном фрагменте:

@Override 
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View aView = super.onCreateView(inflater, container, savedInstanceState); 

    // set the list's adapter 
    ArrayAdapter adapter = new ArrayAdapter<Catch>(this.getActivity(), android.R.layout.simple_list_item_1, Logbook.getSharedLogbook().getCatches()); 
    setListAdapter(adapter); 

    return aView; 
} 

И

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_catch, container, false); 
} 
+0

Пожалуйста, разместите свой Java-код, где вы загружаете этот макет. – CommonsWare

+0

Хм?У меня создалось впечатление, что система автоматически загружает макет в зависимости от размера или ориентации устройства. Ссылка на документацию в вопросе ничего не говорит о загрузке макета (если это так, я пропустил его). – cohenadair

+0

«У меня создалось впечатление, что система автоматически загружает макет в зависимости от размера устройства/ориентации» - только в ответ на какой-то Java-код где-то, пытающийся загрузить макет, например 'setContentView()' в 'Activity 'или' inflate() 'на' LayoutInflater'. – CommonsWare

ответ

2

Проблема она всегда загружается main.xml

Это потому, что вы рассказываете Android загрузить main:

setContentView(R.layout.main); 

Если вы хотите, чтобы загрузить main_layout, как подсказывает ваш values/... материал, то измените это на:

setContentView(R.layout.main_layout); 

Я не совсем уверен, почему вы идете сюда с помощью псевдонима ресурса макета. Было бы проще, ИМХО, чтобы у вас были res/layout/main.xml и res/layout-large-land/main.xml, а затем просто запросите R.layout.main в вашем Java-коде и сбрасывайте псевдонимы. Но ваши псевдонимы должны работать, но тогда и только тогда, когда вы запрашиваете псевдоним.

+0

Я использую псевдонимы, потому что в конце концов я собираюсь повторно использовать фрагменты несколько раз, и я не хочу дублировать файлы layout.xml. Переключение на 'R.layout.main_layout', похоже, не сработало. Я собираюсь изменить устройства в качестве комментария, упомянутого выше, о возможной ошибке в планшете Nexus 7. – cohenadair

+1

Это ваша проблема, я думаю, в любом случае, нет необходимости переключать устройства, просто проверьте, действительно ли он считает, что он большой. – weston

+0

Это решение. Спасибо, CommonsWare. И Уэстон, ты прав, Android действительно думает, что симулятор Nexus 7 - это телефон. Спасибо вам за это. – cohenadair

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