平板电脑用户界面不能在我的应用程序

我正在尝试创build一个应用程序,该应用程序针对平板电脑和手机有两个不同的用户界面,而我正在使用片段来实现此function。 我为每个平板电脑和手机布局创build了两个单独的xml文件,这两个文件都被称为activity_main.xml,电话布局放置在res / layout文件夹中,平板电脑布局放置在res / layout-sw600dp文件夹中。

但是,当我尝试在Nexus 10仿真器(Android Studio)上运行我的应用程序时,它会自动转到默认的电话布局。 该应用程序不会崩溃或任何东西,但它只是运行在手机用户界面,当它应该在平板电脑用户界面中运行。 我不知道这个错误的来源是什么,所以任何帮助将不胜感激。

这是一个更新,我试着将文件夹重命名为res / layout-large-mdpi,但是仍然没有发现变化。 这可能与模拟器有关吗?

这是我的清单:

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidattack.www.sunshine" > <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.androidattack.www.sunshine.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.androidattack.www.sunshine.DetailActivity" android:label="@string/title_activity_detail" android:parentActivityName="com.androidattack.www.sunshine.MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.androidattack.www.sunshine.MainActivity" /> </activity> <activity android:name="com.androidattack.www.sunshine.SettingsActivity" android:label="@string/title_activity_settings" android:parentActivityName="com.androidattack.www.sunshine.MainActivity" > <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.androidattack.www.sunshine.MainActivity" /> </activity> <provider android:authorities="com.androidattack.www.sunshine" android:name=".data.WeatherProvider" /> </application> </manifest> 

sw600dp布局:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="?android:attr/dividerHorizontal" android:baselineAligned="false" tools:context="com.androidattack.www.sunshine.MainActivity"> <fragment android:layout_width="0dp" android:layout_height="fill_parent" android:name="com.androidattack.www.sunshine.ForecastFragment" android:id="@+id/fragment_forecast" android:layout_gravity="center_vertical" android:layout_weight="1" /> <FrameLayout android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="2" android:id="@+id/weather_detail_container"> </FrameLayout> </LinearLayout> 

正常布局:

 <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragment_forecast" android:name="com.androidattack.www.sunshine.ForecastFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" tools:context="com.androidattack.www.sunshine.ForecastFragment" tools:ignore="MergeRootFrame" tools:layout="@android:layout/list_content" /> 

最后,这是我的MainActivity.java类:

 /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.androidattack.www.sunshine; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; public class MainActivity extends ActionBarActivity { private final String LOG_TAG = MainActivity.class.getSimpleName(); private boolean mTwoPane; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (findViewById(R.id.weather_detail_container) != null) { // Tablet view mTwoPane = true; // In two-pane mode, show the detail view by adding // or replacing the detail fragment using a // fragment transaction. if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .replace(R.id.weather_detail_container, new DetailFragment()) .commit(); } } else { // Phone View mTwoPane = false; } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { startActivity(new Intent(this, SettingsActivity.class)); return true; } if (id == R.id.action_map) { openPreferredLocationInMap(); return true; } return super.onOptionsItemSelected(item); } private void openPreferredLocationInMap() { SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); String location = sharedPrefs.getString( getString(R.string.pref_location_key), getString(R.string.pref_location_default)); // Using the URI scheme for showing a location found on a map. This super-handy // intent can is detailed in the "Common Intents" page of Android's developer site: // http://developer.android.com/guide/components/intents-common.html#Maps Uri geoLocation = Uri.parse("geo:0,0?").buildUpon() .appendQueryParameter("q", location) .build(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(geoLocation); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { Log.d(LOG_TAG, "Couldn't call " + location + ", no receiving apps installed!"); } } } 

Solutions Collecting From Web of "平板电脑用户界面不能在我的应用程序"

对我来说,代码是正确的,但问题是与模拟器。 如果你设置你的模拟器No skin ,它应该工作。 去掉那个皮肤!

旋转设备时,您是否尝试过布局会发生什么? (例如按照日照项目,您需要同时创buildlayout-sw600dp-port和layout-sw600dp)

layout-sw600dp适用于7英寸平板电脑/仿真器

layout-sw720dp适用于10英寸平板电脑/仿真器

使用layout-xhdpi将适用于这个特定场景,以及Nanodegree的Nexus 7或10平板模拟器。 我永远不能得到layout-sw600dp在我的模拟器上正确加载,而是我目前使用相同的activity_main.xml同时维护了一个layout-xhdpi和一个layout-sw600dp。