Apakah ada cara untuk memeriksa apakah pengguna menggunakan tablet atau telepon? Saya punya masalah dengan fungsi kemiringan dan tablet baru saya (Transformer)
Anda mengajukan pertanyaan yang salah. Tidak masalah apakah perangkat itu telepon, tablet, televisi, pemanggang roti, cangkir teh, atau termometer. Yang penting adalah kemampuan, bukan kelas perangkat yang ditentukan pemasaran. Silakan tanyakan pertanyaan Android baru yang menjelaskan kemampuan apa yang Anda cari dan bagaimana mendeteksi apakah perangkat memiliki kemampuan seperti itu, atau bagaimana menyaring diri Anda keluar dari Pasar untuk perangkat yang tidak memiliki kemampuan seperti itu.
CommonsWare
7
@CommonsWare: beberapa kali Anda ingin menambahkan fitur tambahan untuk perangkat yang memiliki layar lebih besar.
Bobs
10
@breceivemail: Yang berarti Anda perlu memeriksa apakah perangkat memiliki layar yang lebih besar. "Layar lebih besar"! = "Tablet".
Saya ingin menghapus seluruh halaman ini! Telepon memang telepon, tablet tidak. Hampir semua saran adalah hack kotor yang tidak boleh digunakan siapa pun. Dunia akan menjadi tempat yang lebih baik jika tidak ada yang melihat halaman ini lagi!
Mark Gjøl
Jawaban:
122
Seperti yang telah disebutkan sebelumnya, Anda tidak ingin memeriksa apakah perangkat itu tablet atau ponsel tetapi Anda ingin tahu tentang fitur perangkat,
Sebagian besar waktu, perbedaan antara tablet dan telepon adalah ukuran layar yang mengapa Anda ingin menggunakan file tata letak yang berbeda. File-file ini disimpan dalam res/layout-<qualifiers>direktori. Anda dapat membuat file XML di directoy res/values-<same qualifiers>untuk setiap tata letak Anda dan memasukkan sumber daya int / bool / string ke dalamnya untuk membedakan antara tata letak yang Anda gunakan.
Contoh:
File res/values/screen.xml(dengan asumsi res/layout/berisi file layout Anda untuk handset)
+1, jawaban yang bagus karena memberikan lebih banyak wawasan mengapa Anda sebenarnya ingin memeriksa tablet / telepon. Kami mendekati momen di mana ponsel akan menjadi tablet kecil pula;)
andr
Bagaimana ini berlaku untuk ponsel besar, seperti Galaxy Note dan Nexus 6 baru? Dengan menggunakan teknik ini, akankah perangkat besar ini terdeteksi sebagai ponsel atau tablet?
PerracoLabs
1
Sayangnya, apporach ini tidak berfungsi untuk perangkat Samsung Mega 6.3 dan mengembalikannya sebagai tablet (sw600dp) - ada ide lain untuk menangkap ini?
bkurzius
apakah tablet membuat panggilan telepon?
Mike
61
Untuk mendeteksi apakah perangkat itu tablet atau tidak, gunakan kode berikut:
Pada keduanya - Kindle Fire dan Motorola Droid Bionic - SCREENLAYOUT_SIZE_MASK == 15. Jadi mengapa solusi Anda bekerja?
IgorGanapolsky
Saya percaya, ini hasilnya benar di Kindle Fire. Saya tidak punya bionik pada saya hari ini ... tetapi saya akan memeriksa beberapa hari ketika teman saya kembali ke kota. Namun ..... Saya sudah menguji jawaban Helton Isac dan itu berfungsi dengan baik. Silakan periksa juga.
petey
4
Ada Configuration.SCREENLAYOUT_SIZE_XLARGE, jadi Anda tidak harus menggunakan konstanta, dan Anda bisa menggunakannya >= LARGE.
Triang3l
2
Galaxy Note tampaknya melaporkan SCREENLAYOUT_SIZE_LARGE sehingga akan salah diklasifikasikan sebagai tablet
miguelSantirso
1
Jika font perangkat kecil dan ukuran tampilan kecil dalam pengaturan, case ini dikembalikan true.
arul
38
Posting ini banyak membantu saya,
Sayangnya saya tidak memiliki reputasi yang diperlukan untuk mengevaluasi semua jawaban yang membantu saya.
Saya perlu mengidentifikasi apakah perangkat saya adalah tablet atau telepon, dengan itu saya akan dapat menerapkan logika layar. Dan dalam analisis saya, tablet harus lebih dari 7 inci (Xlarge) mulai dari MDPI.
Berikut kode di bawah ini, yang dibuat berdasarkan posting ini.
/**
* Checks if the device is a tablet or a phone
*
* @param activityContext
* The Activity Context.
* @return Returns true if the device is a Tablet
*/publicstaticboolean isTabletDevice(Context activityContext){// Verifies if the Generalized Size of the device is XLARGE to be// considered a Tabletboolean xlarge =((activityContext.getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK)==Configuration.SCREENLAYOUT_SIZE_XLARGE);// If XLarge, checks if the Generalized Density is at least MDPI// (160dpi)if(xlarge){DisplayMetrics metrics =newDisplayMetrics();Activity activity =(Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);// MDPI=160, DEFAULT=160, DENSITY_HIGH=240, DENSITY_MEDIUM=160,// DENSITY_TV=213, DENSITY_XHIGH=320if(metrics.densityDpi ==DisplayMetrics.DENSITY_DEFAULT
|| metrics.densityDpi ==DisplayMetrics.DENSITY_HIGH
|| metrics.densityDpi ==DisplayMetrics.DENSITY_MEDIUM
|| metrics.densityDpi ==DisplayMetrics.DENSITY_TV
|| metrics.densityDpi ==DisplayMetrics.DENSITY_XHIGH){// Yes, this is a tablet!returntrue;}}// No, this is not a tablet!returnfalse;}
Solusi terbaik yang saya temukan, terima kasih Helton Isac! Mungkin Anda dapat menambahkan (untuk solusi yang lebih baik) cek untuk inci layar? bagaimanapun, 10 untuk solusi ini
Aracem
7
Saya sangat tidak setuju. Ini adalah metode untuk menemukan ukuran layar tertentu. Sekali lagi, seperti yang saya jawab, TIDAK ADA perbedaan antara tablet dan telepon. Ini bukan jawaban untuk pertanyaan itu. Tidak mungkin untuk membedakan karena tidak ada 1 perbedaan. Jika Anda perlu kode untuk fitur tertentu (seperti yang tampaknya Anda lakukan untuk ukuran layar tertentu), maka lakukan, tetapi jangan menyebutnya tablet vs ponsel. Starter topik tampaknya menempatkan garis @ fungsionalitas tilt tertentu. Baca komentar @commonware tentang pertanyaan itu.
Nanne
1
Saya setuju dengan Nanne, tetapi seperti yang saya katakan, dalam Aplikasi saya, saya perlu menunjukkan dua panel jika layarnya cukup besar untuk melakukannya. Dan saya tidak dapat menggunakan tata letak dalam hal ini, karena logika layar berada di sisi Java.
Helton Isac
3
Helton, terima kasih untuk ini. Kupikir aku akan mengatakan ini kembali: Kindle Fire: false, Moto Xoom (v1): true, Galaxy Note: false, Galaxy Tab 10.1 terbatas: true
Ini tidak berfungsi ... beberapa telepon melaporkan nilai kerapatan yang salah dan perhitungan dalam inci gagal - lihat di sana: stackoverflow.com/questions/2193457/…
STeN
Ya, saya suka tablet 7 '(ukuran saku) dan jawaban ini adalah yang terbaik menurut saya. Tetapi kembali (screenDiagonal> = 9.0); harus dikembalikan (screenDiagonal> = 6.5). Namun tergantung pada penggunaan seperti di komentar di komentar untuk pertanyaan.
Jan Bergström
11
tidak ada perbedaan. Anda harus mendefinisikan apa yang menurut Anda bedanya, dan memeriksanya. Apakah galaksi tab telepon? atau tablet? dan mengapa?
Anda harus menentukan fitur spesifik apa yang Anda cari, dan kode untuk itu.
Sepertinya Anda mencari 'miring'. Saya pikir ini sama dengan accelerometer (apakah itu sebuah kata?). Anda hanya dapat memeriksa apakah perangkat mendukungnya, menggunakan:
Saya punya masalah dengan fungsi kemiringan dan tablet baru saya (Transformer)
Benny
Semacam jawaban konyol imo - tentu saja ada perbedaan. Galaxy = telepon. Mengapa? Karena itu adalah "smartphone" menurut produsen untuk satu. Jika Anda mengisyaratkan bahwa dia perlu memeriksa ukuran, atau kemampuan untuk menelepon, atau ... apa saja - katakan saja.
Dave
3
Saya tidak setuju, ini mungkin tidak berfungsi untuk semua ponsel, sementara beberapa tablet memang memiliki sensor ini. Itu sebabnya jawaban awal saya tentang tidak ada perbedaan. Bagaimanapun, saya telah menambahkan beberapa kode yang harus Anda coba.
Nanne
2
Masalahnya adalah, bahwa karena tablet "membangun" dalam mode lansekap, sumbu x dan y dari accelerometer diputar ketika Anda mengharapkan aplikasi Anda berjalan dalam mode potret. Ini dapat mengacaukan segalanya :) Jadi, sangat penting bagi Anda memeriksa cuaca apakah Anda menggunakan tablet atau tidak.
pumpkee
1
Tapi kemudian sebaliknya => jika itu adalah satu-satunya hal yang membuat perangkat tablet, Anda harus mencari tahu bagaimana sumbu x / y bekerja, bukan sebaliknya. Saya ragu dengan cara apakah ini berlaku untuk semua tablet dan / atau telepon?
Nanne
10
Asumsi saya adalah bahwa ketika Anda mendefinisikan 'Ponsel / Ponsel' Anda ingin tahu apakah Anda dapat melakukan panggilan telepon pada perangkat yang tidak dapat dilakukan pada sesuatu yang akan didefinisikan sebagai 'Tablet'. Cara memverifikasi ini ada di bawah. Jika Anda ingin mengetahui sesuatu berdasarkan sensor, ukuran layar, dll, maka ini benar-benar pertanyaan yang berbeda.
Selain itu, saat menggunakan resolusi layar, atau manajemen sumber daya besar vs xlarge, mungkin telah menjadi pendekatan yang valid di perangkat 'Mobile' baru yang lalu sekarang datang dengan layar besar dan resolusi tinggi sehingga mereka mengaburkan garis ini sementara jika Anda benar-benar ingin untuk mengetahui panggilan telepon vs tidak ada kemampuan panggilan telepon di bawah ini adalah 'terbaik'.
Beberapa tablet dapat ponsel dan memiliki tipe GSM atau CDMA ... Jadi solusi Anda juga tidak sempurna.
arnouf
6
Berdasarkan Robert Dale Johnson III dan Helton Isac saya datang dengan kode ini Semoga ini bermanfaat
publicstaticboolean isTablet(Context context){TelephonyManager manager =(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);if(manager.getPhoneType()==TelephonyManager.PHONE_TYPE_NONE){//Tabletreturntrue;}else{//Mobilereturnfalse;}}publicstaticboolean isTabletDevice(Context activityContext){// Verifies if the Generalized Size of the device is XLARGE to be// considered a Tabletboolean xlarge =((activityContext.getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK)==Configuration.SCREENLAYOUT_SIZE_XLARGE);// If XLarge, checks if the Generalized Density is at least MDPI (160dpi)if(xlarge){DisplayMetrics metrics =newDisplayMetrics();Activity activity =(Activity) activityContext;
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);// MDPI=160, DEFAULT=160, DENSITY_HIGH=240, DENSITY_MEDIUM=160,// DENSITY_TV=213, DENSITY_XHIGH=320if(metrics.densityDpi ==DisplayMetrics.DENSITY_DEFAULT
|| metrics.densityDpi ==DisplayMetrics.DENSITY_HIGH
|| metrics.densityDpi ==DisplayMetrics.DENSITY_MEDIUM
|| metrics.densityDpi ==DisplayMetrics.DENSITY_XHIGH){// Yes, this is a tablet!returntrue;}}// No, this is not a tablet!returnfalse;}
Bagi mereka yang ingin merujuk pada kode Google untuk memutuskan perangkat mana yang akan menggunakan UI Tablet dapat merujuk pada di bawah ini:
// SystemUI (status bar) layout policyint shortSizeDp = shortSize
*DisplayMetrics.DENSITY_DEFAULT
/DisplayMetrics.DENSITY_DEVICE;if(shortSizeDp <600){// 0-599dp: "phone" UI with a separate status & navigation bar
mHasSystemNavBar =false;
mNavigationBarCanMove =true;}elseif(shortSizeDp <720){// 600-719dp: "phone" UI with modifications for larger screens
mHasSystemNavBar =false;
mNavigationBarCanMove =false;}else{// 720dp: "tablet" UI with a single combined status & navigation bar
mHasSystemNavBar =true;
mNavigationBarCanMove =false;}}
Solusi ini misalnya tidak bekerja pada Emulator dengan API 18 dan Nexus 7 1200 x 1920 xhdpi!
Ingo
1
Anda harus menguji pada perangkat nyata :)
hqt
Saya telah menguji Emulator dan hasilnya "isTablet (Konteks konteks) salah. Coba sendiri pada Emulator.
Ingo
1
Terima kasih untuk @hqt ini, saya baru saja menyalin kode ini ke C # yang diperlukan untuk Xamarin Studio:public static bool isTablet (Context context) { return (context.Resources.Configuration.ScreenLayout & Android.Content.Res.ScreenLayout.SizeMask) >= Android.Content.Res.ScreenLayout.SizeLarge; }
Phil Ryan
2
Tidak diperlukan kode
Jawaban lainnya mencantumkan banyak cara untuk menentukan secara terprogram apakah perangkat itu ponsel atau tablet. Namun, jika Anda membaca dokumentasinya , itu bukan cara yang disarankan untuk mendukung berbagai ukuran layar.
Sebaliknya, nyatakan sumber daya yang berbeda untuk tablet atau ponsel. Anda melakukan ini menambahkan folder sumber daya tambahan saya untuk layout, values, dll
Untuk Android 3.2 (API level 13) aktif, tambahkan sw600dpfolder. Ini berarti satu s mallest w idth setidaknya 600dp, yang kira-kira membagi ponsel / tablet. Namun, Anda juga dapat menambahkan ukuran lain juga. Lihat jawaban ini untuk contoh tentang cara menambahkan file sumber daya tata letak tambahan.
Jika Anda juga mendukung perangkat Android 3.2 sebelumnya, maka Anda perlu menambahkan largeatau xlargefolder untuk mendukung tablet. (Ponsel pada umumnya smalldan normal.)
Berikut adalah gambar dari apa yang mungkin disukai sumber daya Anda setelah menambahkan file xml tambahan untuk ukuran layar yang berbeda.
Saat menggunakan metode ini, sistem menentukan segalanya untuk Anda. Anda tidak perlu khawatir tentang perangkat mana yang digunakan pada saat dijalankan. Anda hanya menyediakan sumber daya yang sesuai dan membiarkan Android melakukan semua pekerjaan.
Catatan
Anda dapat menggunakan alias untuk menghindari duplikasi file sumber daya yang identik.
Solusi ini misalnya tidak bekerja pada Emulator dengan API 18 dan Nexus 7 1200 x 1920 xhdpi!
Ingo
Ini tidak lagi berfungsi pada beberapa perangkat. Misalnya ia mengembalikan false untuk perangkat Samsung Mega
bkurzius
Ya .. Ini tidak lagi berfungsi ... Saya sebenarnya biasa menambahkan boolean di semua file string untuk setiap nilai folder, values_large dll. <Bool name = "isTablet"> false </bool> <bool name = "isLargeTablet"> false </bool> dan kemudian periksa apakah R.bool.isTablet benar untuk menemukan apakah perangkat tersebut tablet
Vyshnavi
1
Jika deteksi ukuran layar tidak mengembalikan nilai yang benar pada perangkat yang lebih baru, cobalah:
/*
Returns '1' if device is a tablet
or '0' if device is not a tablet.
Returns '-1' if an error occured.
May require READ_EXTERNAL_STORAGE
permission.
*/publicstaticint isTablet(){try{InputStream ism =Runtime.getRuntime().exec("getprop ro.build.characteristics").getInputStream();byte[] bts =newbyte[1024];
ism.read(bts);
ism.close();boolean isTablet =newString(bts).toLowerCase().contains("tablet");return isTablet ?1:0;}catch(Throwable t){t.printStackTrace();return-1;}}
Diuji pada Android 4.2.2 (maaf untuk bahasa Inggris saya.)
Saya tahu ini bukan jawaban langsung untuk pertanyaan Anda, tetapi jawaban lain di sini memberikan ide bagus tentang cara mengidentifikasi ukuran layar. Anda menulis dalam pertanyaan Anda bahwa Anda punya masalah dengan memiringkan dan ini baru saja terjadi pada saya juga.
Jika Anda menjalankan giroskop (atau sensor rotasi) pada smartphone, sumbu x dan y dapat ditentukan secara berbeda dari pada tablet, sesuai dengan orientasi default perangkat tersebut (mis. Samsung GS2 adalah potret default, Samsung GT-7310 adalah lansekap default, Google Nexus 7 baru adalah potret default, meskipun itu tablet!).
Sekarang jika Anda ingin menggunakan Giroskop Anda mungkin berakhir dengan solusi yang berfungsi untuk smartphone, tetapi kebingungan sumbu pada beberapa tablet atau sebaliknya.
Jika Anda menggunakan salah satu solusi dari atas untuk hanya pergi untuk ukuran layar dan kemudian berlaku
untuk membalik poros jika memiliki ukuran layar besar atau xlarge ini mungkin bekerja di 90% dari kasus tetapi misalnya pada Nexus 7 itu akan menyebabkan masalah (karena memiliki orientasi potret default dan ukuran layar besar).
Cara paling sederhana untuk memperbaikinya disediakan dalam RotationVectorSample yang dikirimkan dengan demo API dengan mengatur sceenOrientation ke nosensordalam manifes Anda:
metode di bawah ini menghitung panjang diagonal layar perangkat untuk memutuskan perangkat adalah ponsel atau tablet. satu-satunya perhatian untuk metode ini adalah berapa nilai ambang untuk memutuskan apakah perangkat tablet atau tidak. pada contoh di bawah ini saya atur 7 inch ke atas.
Semakin sulit untuk menarik garis antara ponsel dan tablet. Misalnya (per Agustus 2015) Samsung Mega 6.3 menarik sumber daya dari folder sw600dp - sejauh yang menyangkut Android itu adalah tablet.
Jawaban dari @Vyshnavi berfungsi di semua perangkat yang telah kami uji tetapi tidak untuk Mega 6.3.
@Helton Isac menjawab di atas mengembalikan Mega 6.3 sebagai telepon - tetapi karena perangkat masih mengambil sumber daya dari sw600dp dapat menyebabkan masalah lain - misalnya jika Anda menggunakan viewpager untuk ponsel dan bukan untuk tablet Anda akan berakhir dengan kesalahan NPE .
Pada akhirnya sepertinya ada terlalu banyak kondisi untuk diperiksa dan kami mungkin hanya harus menerima bahwa beberapa ponsel sebenarnya adalah tablet :-P
Penjelasan untuk -1? , ini adalah metode yang direkomendasikan oleh google.
Jorgesys
0
mengapa menggunakan ini?
Usethis method which returns truewhen the device is a tablet
publicboolean isTablet(Context context){return(context.getResources().getConfiguration().screenLayout
&Configuration.SCREENLAYOUT_SIZE_MASK)>=Configuration.SCREENLAYOUT_SIZE_LARGE;}
Saya melihat banyak cara di atas. Kelas konfigurasi telah mendapatkan jawaban yang benar di bawah ini:
/**
* Check if the Configuration's current {@link #screenLayout} is at
* least the given size.
*
* @param size The desired size, either {@link #SCREENLAYOUT_SIZE_SMALL},
* {@link #SCREENLAYOUT_SIZE_NORMAL}, {@link #SCREENLAYOUT_SIZE_LARGE}, or
* {@link #SCREENLAYOUT_SIZE_XLARGE}.
* @return Returns true if the current screen layout size is at least
* the given size.
*/publicboolean isLayoutSizeAtLeast(int size){int cur = screenLayout&SCREENLAYOUT_SIZE_MASK;if(cur == SCREENLAYOUT_SIZE_UNDEFINED)returnfalse;return cur >= size;}
Saya perlu mendeteksi smartphone / tablet hanya dalam file tata letak, karena saya menggunakan kode navigasi.
Apa yang saya lakukan pertama adalah membuat direktori layout-sw600dp tetapi tidak berfungsi dengan baik karena akan diaktifkan pada Nokia 8 saya dalam mode lansekap, tetapi ketinggian layar akan terlalu kecil.
Jadi, saya mengganti nama direktori menjadi layout-sw600dp-h400dp dan kemudian saya mendapatkan efek yang diinginkan. Parameter h-xxxdp harus bergantung pada seberapa banyak konten yang ingin Anda lepas pada tata letak Anda dan karenanya harus bergantung pada aplikasi.
privateboolean isTabletDevice(){if(android.os.Build.VERSION.SDK_INT >=11){// honeycomb// test screen size, use reflection because isLayoutSizeAtLeast is// only available since 11Configuration con = getResources().getConfiguration();try{Method mIsLayoutSizeAtLeast = con.getClass().getMethod("isLayoutSizeAtLeast",int.class);boolean r =(Boolean) mIsLayoutSizeAtLeast.invoke(con,0x00000004);// Configuration.SCREENLAYOUT_SIZE_XLARGEreturn r;}catch(Exception x){
x.printStackTrace();returnfalse;}}returnfalse;}
Ini tidak benar karena Samsung galaxy s3 menghasilkan 720 x 1280.
Nikhil
-1
Misalnya ada satu perbedaan penting (setidaknya untuk program saya) antara ponsel dan tablet. Ini adalah orientasi standar perangkat. Ponsel memiliki orientasi potret, tablet - landscape. Dan masing-masing metode untuk menentukan perangkat:
Tidak semua tablet memiliki orientasi lanskap default. Dan jika orientasi "default" penting bagi program Anda, itu mungkin salah dengan cara lain. Lihat posting Blog Pengembang Android ini sebagai contoh.
Dan Hulme
Tolong, bisakah Anda memberikan contoh spesifik tablet, yang dalam orientasi default lebarnya kurang dari tinggi? Dan tentu saja Anda tahu lebih baik apa yang seharusnya menjadi aplikasi saya: D.
Perak
Nexus 7 akan menjadi salah satu contoh. Tetapi Anda tidak harus mengambil kata saya untuk itu: baca artikel yang saya tautkan, yang menjelaskan semuanya.
Dan Hulme
Saya pikir harus mengubah nama metode saya. Bahkan, yang lebih penting (setidaknya untuk aplikasi saya;)) orientasi perangkat default, dan metode saya cukup untuk tugas ini. Juga mengidentifikasi masalah @Nanne dengan benar, lihat di atas.
Perak
-1
Saya merekomendasikan perpustakaan Android 'kafein' Itu mengandung get Phone atau tablet, dan 10inch ~!
Bagi saya perbedaan antara ponsel dan tablet bukan ukuran perangkat dan / atau kerapatan piksel, yang akan berubah dengan teknologi dan rasanya, melainkan rasio layar. Jika saya menampilkan layar teks saya perlu tahu jika, katakanlah, 15 baris panjang diperlukan (telepon) vs 20 baris lebih pendek (tablet). Untuk permainan saya, saya menggunakan yang berikut ini untuk perkiraan rata-rata persegi panjang yang akan ditangani oleh perangkat lunak saya:
Jawaban:
Seperti yang telah disebutkan sebelumnya, Anda tidak ingin memeriksa apakah perangkat itu tablet atau ponsel tetapi Anda ingin tahu tentang fitur perangkat,
Sebagian besar waktu, perbedaan antara tablet dan telepon adalah ukuran layar yang mengapa Anda ingin menggunakan file tata letak yang berbeda. File-file ini disimpan dalam
res/layout-<qualifiers>
direktori. Anda dapat membuat file XML di directoyres/values-<same qualifiers>
untuk setiap tata letak Anda dan memasukkan sumber daya int / bool / string ke dalamnya untuk membedakan antara tata letak yang Anda gunakan.Contoh:
File
res/values/screen.xml
(dengan asumsires/layout/
berisi file layout Anda untuk handset)File
res/values-sw600dp/screen.xml
(dengan asumsires/layout-sw600dp/
berisi file layout Anda untuk tablet kecil seperti Nexus 7)File
res/values-sw720dp/screen.xml
(dengan asumsires/layout-sw720dp/
berisi file tata letak Anda untuk tablet besar seperti Nexus 10):Sekarang tipe layar dapat diakses melalui
R.string.screen_type
konstanta.sumber
Untuk mendeteksi apakah perangkat itu tablet atau tidak, gunakan kode berikut:
Ukuran Layar LARGE dan XLARGE ditentukan oleh pabrikan berdasarkan jarak dari mata yang akan digunakan (dengan demikian gagasan tablet).
Info lebih lanjut: http://groups.google.com/group/android-developers/browse_thread/thread/d6323d81f226f93f
sumber
Configuration.SCREENLAYOUT_SIZE_XLARGE
, jadi Anda tidak harus menggunakan konstanta, dan Anda bisa menggunakannya>= LARGE
.Posting ini banyak membantu saya,
Sayangnya saya tidak memiliki reputasi yang diperlukan untuk mengevaluasi semua jawaban yang membantu saya.
Saya perlu mengidentifikasi apakah perangkat saya adalah tablet atau telepon, dengan itu saya akan dapat menerapkan logika layar. Dan dalam analisis saya, tablet harus lebih dari 7 inci (Xlarge) mulai dari MDPI.
Berikut kode di bawah ini, yang dibuat berdasarkan posting ini.
sumber
Mengapa tidak menghitung ukuran layar diagonal dan menggunakannya untuk membuat keputusan apakah perangkat itu ponsel atau tablet?
Tentu saja orang dapat berdebat apakah ambang harus 9 inci atau kurang.
sumber
tidak ada perbedaan. Anda harus mendefinisikan apa yang menurut Anda bedanya, dan memeriksanya. Apakah galaksi tab telepon? atau tablet? dan mengapa?
Anda harus menentukan fitur spesifik apa yang Anda cari, dan kode untuk itu.
Sepertinya Anda mencari 'miring'. Saya pikir ini sama dengan accelerometer (apakah itu sebuah kata?). Anda hanya dapat memeriksa apakah perangkat mendukungnya, menggunakan:
(dari http://stuffthathappens.com/blog/2009/03/15/android-accelerometer/ . Saya belum mengujinya)
sumber
Asumsi saya adalah bahwa ketika Anda mendefinisikan 'Ponsel / Ponsel' Anda ingin tahu apakah Anda dapat melakukan panggilan telepon pada perangkat yang tidak dapat dilakukan pada sesuatu yang akan didefinisikan sebagai 'Tablet'. Cara memverifikasi ini ada di bawah. Jika Anda ingin mengetahui sesuatu berdasarkan sensor, ukuran layar, dll, maka ini benar-benar pertanyaan yang berbeda.
Selain itu, saat menggunakan resolusi layar, atau manajemen sumber daya besar vs xlarge, mungkin telah menjadi pendekatan yang valid di perangkat 'Mobile' baru yang lalu sekarang datang dengan layar besar dan resolusi tinggi sehingga mereka mengaburkan garis ini sementara jika Anda benar-benar ingin untuk mengetahui panggilan telepon vs tidak ada kemampuan panggilan telepon di bawah ini adalah 'terbaik'.
sumber
Berdasarkan Robert Dale Johnson III dan Helton Isac saya datang dengan kode ini Semoga ini bermanfaat
Jadi dalam kode Anda buat filter seperti
sumber
Dalam kode sumber aplikasi Google IOSched 2017 , metode berikut digunakan:
sumber
Bagi mereka yang ingin merujuk pada kode Google untuk memutuskan perangkat mana yang akan menggunakan UI Tablet dapat merujuk pada di bawah ini:
sumber
shortSize
?Metode ini direkomendasikan oleh Google. Saya melihat kode ini di Aplikasi Android Resmi Google
iosched
sumber
public static bool isTablet (Context context) { return (context.Resources.Configuration.ScreenLayout & Android.Content.Res.ScreenLayout.SizeMask) >= Android.Content.Res.ScreenLayout.SizeLarge; }
Tidak diperlukan kode
Jawaban lainnya mencantumkan banyak cara untuk menentukan secara terprogram apakah perangkat itu ponsel atau tablet. Namun, jika Anda membaca dokumentasinya , itu bukan cara yang disarankan untuk mendukung berbagai ukuran layar.
Sebaliknya, nyatakan sumber daya yang berbeda untuk tablet atau ponsel. Anda melakukan ini menambahkan folder sumber daya tambahan saya untuk
layout
,values
, dllUntuk Android 3.2 (API level 13) aktif, tambahkan
sw600dp
folder. Ini berarti satu s mallest w idth setidaknya 600dp, yang kira-kira membagi ponsel / tablet. Namun, Anda juga dapat menambahkan ukuran lain juga. Lihat jawaban ini untuk contoh tentang cara menambahkan file sumber daya tata letak tambahan.Jika Anda juga mendukung perangkat Android 3.2 sebelumnya, maka Anda perlu menambahkan
large
atauxlarge
folder untuk mendukung tablet. (Ponsel pada umumnyasmall
dannormal
.)Berikut adalah gambar dari apa yang mungkin disukai sumber daya Anda setelah menambahkan file xml tambahan untuk ukuran layar yang berbeda.
Saat menggunakan metode ini, sistem menentukan segalanya untuk Anda. Anda tidak perlu khawatir tentang perangkat mana yang digunakan pada saat dijalankan. Anda hanya menyediakan sumber daya yang sesuai dan membiarkan Android melakukan semua pekerjaan.
Catatan
Dokumen Android layak dibaca
sumber
Jika Anda hanya menargetkan level API> = 13 maka cobalah
Bersulang :-)
sumber
Memikirkan direktori yang diterima "baru" (nilai-sw600dp misalnya) saya membuat metode ini berdasarkan lebar DP layar:
Dan pada daftar ini Anda dapat menemukan beberapa DP perangkat populer dan ukuran tablet:
Wdp / Hdp
Nexus GALAXY:
360/567 XOOM: 1280/752
GALAXY CATATAN: 400/615
NEXUS 7: 961/528
GALAXY TAB (> 7 && <10): 1280/752
GALAXY S3: 360/615
Wdp = Lebar dp
Hdp = Tinggi dp
sumber
Nah, solusi terbaik yang bekerja untuk saya cukup sederhana:
Digunakan seperti ini:
Saya benar-benar tidak ingin melihat ukuran piksel tetapi hanya mengandalkan ukuran layar.
Berfungsi sebaik Nexus 7 (LARGE) terdeteksi sebagai tablet, tetapi bukan Galaxy S3 (NORMAL).
sumber
Gunakan metode ini yang mengembalikan true ketika perangkat adalah tablet
sumber
Jika deteksi ukuran layar tidak mengembalikan nilai yang benar pada perangkat yang lebih baru, cobalah:
Diuji pada Android 4.2.2 (maaf untuk bahasa Inggris saya.)
sumber
Saya tahu ini bukan jawaban langsung untuk pertanyaan Anda, tetapi jawaban lain di sini memberikan ide bagus tentang cara mengidentifikasi ukuran layar. Anda menulis dalam pertanyaan Anda bahwa Anda punya masalah dengan memiringkan dan ini baru saja terjadi pada saya juga.
Jika Anda menjalankan giroskop (atau sensor rotasi) pada smartphone, sumbu x dan y dapat ditentukan secara berbeda dari pada tablet, sesuai dengan orientasi default perangkat tersebut (mis. Samsung GS2 adalah potret default, Samsung GT-7310 adalah lansekap default, Google Nexus 7 baru adalah potret default, meskipun itu tablet!).
Sekarang jika Anda ingin menggunakan Giroskop Anda mungkin berakhir dengan solusi yang berfungsi untuk smartphone, tetapi kebingungan sumbu pada beberapa tablet atau sebaliknya.
Jika Anda menggunakan salah satu solusi dari atas untuk hanya pergi untuk ukuran layar dan kemudian berlaku
untuk membalik poros jika memiliki ukuran layar besar atau xlarge ini mungkin bekerja di 90% dari kasus tetapi misalnya pada Nexus 7 itu akan menyebabkan masalah (karena memiliki orientasi potret default dan ukuran layar besar).
Cara paling sederhana untuk memperbaikinya disediakan dalam RotationVectorSample yang dikirimkan dengan demo API dengan mengatur sceenOrientation ke
nosensor
dalam manifes Anda:sumber
com.sec.feature.multiwindow.tablet di manajer paket hanya khusus untuk tablet dan com.sec.feature.multiwindow.phone khusus untuk ponsel.
sumber
metode di bawah ini menghitung panjang diagonal layar perangkat untuk memutuskan perangkat adalah ponsel atau tablet. satu-satunya perhatian untuk metode ini adalah berapa nilai ambang untuk memutuskan apakah perangkat tablet atau tidak. pada contoh di bawah ini saya atur 7 inch ke atas.
sumber
sumber
Semakin sulit untuk menarik garis antara ponsel dan tablet. Misalnya (per Agustus 2015) Samsung Mega 6.3 menarik sumber daya dari folder sw600dp - sejauh yang menyangkut Android itu adalah tablet.
Jawaban dari @Vyshnavi berfungsi di semua perangkat yang telah kami uji tetapi tidak untuk Mega 6.3.
@Helton Isac menjawab di atas mengembalikan Mega 6.3 sebagai telepon - tetapi karena perangkat masih mengambil sumber daya dari sw600dp dapat menyebabkan masalah lain - misalnya jika Anda menggunakan viewpager untuk ponsel dan bukan untuk tablet Anda akan berakhir dengan kesalahan NPE .
Pada akhirnya sepertinya ada terlalu banyak kondisi untuk diperiksa dan kami mungkin hanya harus menerima bahwa beberapa ponsel sebenarnya adalah tablet :-P
sumber
Ini adalah metode yang saya gunakan:
Menggunakan:
Konfigurasi. SCREENLAYOUT_SIZE_MASK
Konfigurasi. SCREENLAYOUT_SIZE_LARGE
Ini adalah metode yang direkomendasikan!
sumber
mengapa menggunakan ini?
Saya melihat banyak cara di atas. Kelas konfigurasi telah mendapatkan jawaban yang benar di bawah ini:
panggil saja:
tidak apa-apa?
sumber
Saya perlu mendeteksi smartphone / tablet hanya dalam file tata letak, karena saya menggunakan kode navigasi.
Apa yang saya lakukan pertama adalah membuat direktori layout-sw600dp tetapi tidak berfungsi dengan baik karena akan diaktifkan pada Nokia 8 saya dalam mode lansekap, tetapi ketinggian layar akan terlalu kecil.
Jadi, saya mengganti nama direktori menjadi layout-sw600dp-h400dp dan kemudian saya mendapatkan efek yang diinginkan. Parameter h-xxxdp harus bergantung pada seberapa banyak konten yang ingin Anda lepas pada tata letak Anda dan karenanya harus bergantung pada aplikasi.
sumber
Silakan periksa kode di bawah ini.
sumber
Saya pikir tablet memiliki lebar dan tinggi minimum 600 px,
jadi perlu tahu kepadatan layar dan tinggi / lebar dalam dp,
untuk mengambil nilainya:
sumber
Misalnya ada satu perbedaan penting (setidaknya untuk program saya) antara ponsel dan tablet. Ini adalah orientasi standar perangkat. Ponsel memiliki orientasi potret, tablet - landscape. Dan masing-masing metode untuk menentukan perangkat:
Diedit: Setelah diskusi dengan Dan Hulme mengubah nama metode.
sumber
Saya merekomendasikan perpustakaan Android 'kafein' Itu mengandung get Phone atau tablet, dan 10inch ~!
sangat mudah digunakan.
perpustakaan ada di sini.
https://github.com/ShakeJ/Android-Caffeine-library
dan gunakan
sumber
Bagi saya perbedaan antara ponsel dan tablet bukan ukuran perangkat dan / atau kerapatan piksel, yang akan berubah dengan teknologi dan rasanya, melainkan rasio layar. Jika saya menampilkan layar teks saya perlu tahu jika, katakanlah, 15 baris panjang diperlukan (telepon) vs 20 baris lebih pendek (tablet). Untuk permainan saya, saya menggunakan yang berikut ini untuk perkiraan rata-rata persegi panjang yang akan ditangani oleh perangkat lunak saya:
sumber
Saya pikir ini adalah cara termudah untuk jujur. Ini akan memeriksa ukuran layar yang digunakan:
Semoga berhasil!
sumber