我发现的与此相关的任何问题始终都是通过更正布局文件路径来解决的,我很确定我的是正确的。
我有一个非常简单的布局,应该有大型景观设备的分割视图。所以我有:
我正在横向加载Nexus 7平板电脑(被归类为大型设备)。问题是,根据我Android documentation所提供的内容,它总是加载main.xml
,应该为横向上的大型设备加载两个窗格布局。
以下是代码:
布局/ 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>
值-大脊/ 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 :(得分: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
,然后只需在Java代码中请求R.layout.main
,并转储别名。但是,您的别名应该有效,但是当且仅当您请求别名时。