Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La interfaz de usuario de Tablet no funciona en mi aplicación

Estoy tratando de crear una aplicación que tiene dos diferentes interfaces de usuario para tablets y teléfonos, y estoy usando fragmentos para implementar esto. He creado dos archivos xml separados para cada diseño de tableta y teléfono y ambos se llaman activity_main.xml, con el diseño del teléfono colocado en la carpeta res / layout y el diseño de la tableta que se coloca en la carpeta res / layout-sw600dp.

Sin embargo, cuando intento ejecutar mi aplicación en un emulador de Nexus 10 (Android Studio), automáticamente va al diseño de teléfono predeterminado. La aplicación no se bloquea o nada, pero sólo se ejecuta en la interfaz de usuario del teléfono cuando se supone que se ejecute en la interfaz de usuario de tableta. No sé qué fuente de este error podría ser y por lo que cualquier ayuda sería apreciada.

He aquí una actualización, he intentado cambiar el nombre de la carpeta a res / layout-large-mdpi, pero todavía no encontró ningún cambio. ¿Es posible que tenga algo que ver con el emulador?

Aquí está mi manifiesto:

<?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 diseño:

 <?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> 

Disposición normal:

 <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" /> 

Y finalmente esta es mi clase 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!"); } } } 

  • Android: cómo cambiar el diseño en el botón de clic?
  • ¿Cuál es la notación de puntos entre los nombres de las clases y qué significa?
  • Android Parcelable - Escriba y lea ArrayList <IA> cuando IA es una interfaz
  • Diferencia de regex de Java y Android
  • Android Java; ¿Cómo puedo analizar un archivo JSON local de carpeta de activos en un ListView
  • ¿Es posible reemplazar el cuadro de diálogo "Forzar cierre" por defecto en Android?
  • Error de Android RecyclerView
  • Usando get () y put () para acceder a valores de píxeles en OpenCV para Java
  • 4 Solutions collect form web for “La interfaz de usuario de Tablet no funciona en mi aplicación”

    Para mí, el código era correcto, pero el problema era con el emulador. Si configuras tu emulador No skin , debería funcionar. ¡Quita esa piel!

    ¿Has probado lo que sucede con el diseño cuando gira el dispositivo? (Por ejemplo, como por el proyecto de sol que necesita para crear tanto el diseño-sw600dp-puerto y layout-sw600dp)

    Layout-sw600dp es para 7 pulgadas de tableta / emulador

    Layout-sw720dp es para 10 pulgadas de tableta / emulador

    El uso de layout-xhdpi funcionará para este escenario específico y un emulador de tableta Nexus 7 o 10 para Nanodegree. Nunca podría conseguir el diseño-sw600dp para cargar correctamente en mi emulador y en lugar de eso actualmente mantengo Sunshine con un layout-xhdpi y un layout-sw600dp con el mismo activity_main.xml.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.