Как найти планшет или телефон в Android, программно?
Мое дело в том, что логика одинакова для телефона и планшета. Но в макете есть небольшая разница. И я попробовал со следующим кодом
public static boolean findoutDeviceType(Context context)
{
return (context.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK)>=
Configuration.SCREENLAYOUT_SIZE_LARGE;
}
Samsung Tab 10 "имеет разрешение 1280 * 800 и S3 имеет разрешение 1270 * 720. И этот код возвращает размер как XLarge как для Tab, так и для телефона, поскольку его критерии проверки → 960 * 720.
Я тестировал вставку соответствующего пользовательского интерфейса в папку макета в Res как Layout, Layout-Large и Layout-xLarge. Но это никак не повлияло. при проверке он взял пользовательский интерфейс из папки "Макет".
В любом случае, хотя я размещаю пользовательский интерфейс в разных папках макета, я должен проверить их в файле класса, чтобы установить соответствующий ContentView.
Есть ли другой способ его найти?
Ответы
Ответ 1
Попробуйте это
public boolean isTablet(Context context) {
boolean xlarge = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);
boolean large = ((context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);
return (xlarge || large);
}
Он вернет true, если вы используете планшет. Он был проверен на Samsung Galaxy Tab 7 "и Samsung Galaxy S3.
Ответ 2
Этот вопрос обсуждается в Android Training:
http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali
Если вы читаете всю тему, они объясняют, как установить логическое значение в файле определенных значений (как res/values-sw600dp/
):
<resources>
<bool name="isTablet">true</bool>
</resources>
Поскольку квалификатор sw600dp действителен только для платформ выше android 3.2. Если вы хотите убедиться, что этот метод работает на всех платформах (до 3.2), создайте тот же файл в папке res/values-xlarge
:
<resources>
<bool name="isTablet">true</bool>
</resources>
Затем в "стандартном" файле значений (как res/values/
) вы устанавливаете значение boolean в false:
<resources>
<bool name="isTablet">false</bool>
</resources>
Затем в вашей деятельности вы можете получить это значение и проверить, работает ли вы на устройстве размера планшета:
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
Это не моя логика, кредит идет ol_v_er для этого простого и простого подхода. Я просто скопировал его.
Вы можете проверить оригинальный ответ здесь
Дополнительная информация
Теперь вы указываете, работает ли ваше приложение на телефоне или планшете.
Я создал два пакета для обработки пользовательского интерфейса и его функциональность,
com.phone
com.tablet
И вы перенаправляете управление на необходимый пакет
boolean tabletSize = getResources().getBoolean(R.bool.isTablet);
if (tabletSize) {
// do something
//Start activity for tablet
} else {
// do something else
//Start activity for phone
}
Обратитесь
Примечание. Я думаю, что для приложения размером 10 дюймов и 7 дюймов требуется использовать ресурсы от res/values-sw600dp/
. Но, если быть более конкретным, я думаю, что для 10-дюймового планшета для планшетов мы можем использовать res/values-sw720dp/
<resources>
<bool name="isTablet">true</bool>
</resources>
Ответ 3
Например, вы можете установить некоторую папку res-values:
RES/значения-XLarge
RES/значение-большое
res/values-sw600dp
и т.д.. Затем вы можете объявить логическое значение для каждого из них:
<resources>
<bool name="isXLarge">true</bool>
</resources>
или
<resources>
<bool name="isLarge">true</bool>
</resources>
вы можете получить значение
boolean xlargeValue = getResources().getBoolean(R.bool.isXlarge);
boolean largevalue = getResources().getBoolean(R.bool.isLarge);
boolean tabletValue = getResources().getBoolean(R.bool.sw620dp):
Ответ 4
Попробуйте этот код, ваше приложение работает на телефоне или планшете устройства, чтобы легко вызвать метод oncreate() внутри
isTabletDevice (активность)
private static boolean isTabletDevice(Context activityContext) {
boolean device_large = ((activityContext.getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE)
DisplayMetrics metrics = new DisplayMetrics();
Activity activity = (Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
if (device_large) {
//Tablet
if (metrics.densityDpi == DisplayMetrics.DENSITY_DEFAULT){
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_TV){
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_280){
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_XHIGH) {
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_400) {
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_XXHIGH) {
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_560) {
return true;
}else if(metrics.densityDpi == DisplayMetrics.DENSITY_XXXHIGH) {
return true;
}
}else{
//Mobile
}
return false;
}
Ответ 5
Попробуйте этот код. Вы можете получить дюймы экрана. На основе размера вы можете получить планшет или устройство Android.
String inputSystem;
inputSystem = android.os.Build.ID;
Log.d("hai",inputSystem);
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
Log.d("hai",width+"");
Log.d("hai",height+"");
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(width/dm.xdpi,2);
double y = Math.pow(height/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);
Log.d("hai","Screen inches : " + screenInches+"");
Ответ 6
Используйте разные файлы ресурсов, а не пытайтесь определить его программно. Этого будет достаточно для большинства случаев, и это рекомендует .
![введите описание изображения здесь]()
Смотрите мой более полный ответ здесь.
Ответ 7
Старый вопрос, но это может кому-то помочь. Если вы хотите узнать, является ли устройство планшетом (экран больше 7 дюймов) или телефоном, вы можете использовать этот метод утилит:
Котлин
fun isTablet(): Boolean {
return App.instance.resources.configuration.smallestScreenWidthDp >= 600
}
Джава
public static Boolean isTablet(){
return App.instance.resources.configuration.smallestScreenWidthDp >= 600
}
App.instance является экземпляром приложения.
Ответ 8
Это отлично работает в моем приложении:
private boolean isPhoneDevice(){
return getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
}
Ответ 9
public boolean isTablet() {
try {
// Compute screen size
Context context = this;
DisplayMetrics dm =
context.getResources().getDisplayMetrics();
float screenWidth = dm.widthPixels / dm.xdpi;
float screenHeight = dm.heightPixels / dm.ydpi;
double size = Math.sqrt(Math.pow(screenWidth, 2) +
Math.pow(screenHeight, 2));
// Tablet devices have a screen size greater than 6
inches
return size >= 6;
} catch(Throwable t) {
Log.e("Failed to compute screen size", t.toString());
return false;
}
}