Kecuali jika Anda menggunakan AbsoluteLayout (Biasanya ide yang sangat buruk, saat Anda mendesain tata letak menggunakan koordinat x / y, yang hanya akan sesuai dengan perangkat yang telah dirancangnya) ini seharusnya tidak terjadi - aplikasi Android secara otomatis menyesuaikan dengan ukuran layar perangkat. . Namun dari apa yang Anda jelaskan (Layout tidak menyesuaikan dengan Table Table), sepertinya AbsoluteLayout mungkin menjadi masalah di sini.
Pastikan bahwa dalam file XML layout Anda, Anda TIDAK menggunakan tata letak absolut (ini termasuk menetapkan koordinat / lebar / ketinggian eksplisit pada segala jenis tampilan). Alih-alih mempertimbangkan menggunakan:
- LinearLayout - Menumpuk banyak tampilan secara horizontal atau vertikal
- FrameLayout - Biasanya berisi satu Anak
- RelativeLayout - Sejajarkan anak-anak relatif satu sama lain
- TableLayout - Layout berbasis tabel
- ScrollView - Dapat berisi satu item anak (seperti LinearLayout) dan memungkinkan Anda menggulir kontennya
... apa pun yang paling sesuai dengan tujuan Anda.
Jika Anda baru mengenal Android , maka Google menawarkan tutorial yang bagus yang memperkenalkan berbagai Tipe Tata Letak yang disebutkan di atas. Lebih banyak tutorial dapat ditemukan di sini .
Selain itu, Tingkat API Anda akan relevan (untuk mengetahui apakah Anda menggunakan Android 2.x atau 4.x - Saya tidak berasumsi 3.x karena tidak tersedia untuk Smartphone) untuk mencari tahu penyebab masalah Anda.
Apakah Anda memaksa Aplikasi Anda ke mode Potret dengan mengatur:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set screen orientation for this dialog to portrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
... di Aktivitas Anda yang menampilkan tampilan permainan?
Harap berikan lebih banyak info tentang bagaimana Anda menata tampilan Anda (apakah Anda menggunakan XML untuk tata letak yang kemudian Anda kembangkan di Aktivitas Anda, atau apakah Anda menggunakan tata letak kode dalam Aktivitas Anda dll ....)? Selanjutnya: Apakah Anda mencoba menjalankan aplikasi di Smartphone - dan Emulator berukuran Tablet? Jika ya, apakah masalah ini tetap ada?
UPDATE: BAGAIMANA CARA MEMULAI BITMAPS
OP bertanya bagaimana ia bisa menskalakan bitmap yang ia gunakan dalam gimnya. Satu opsi (dari semua yang saya tahu tentang pengaturan OP): SurfaceHolder.Callback yang Anda ganti untuk menampilkan permainan Anda dan di mana Anda membuat semua Bitmap dll ... memiliki metode yang disebut:
surfaceChanged(SurfaceHolder holder, int format, int width, int height)
Metode itu memberi Anda lebar / tinggi permukaan Anda, jadi Anda sekarang bisa menggunakan:
Bitmap.createScaledBitmap (Bitmap src, int dstWidth, int dstHeight, boolean filter)
dari kelas Bitmap . Untuk mengubah ukuran gambar Anda sebanding dengan ukuran permukaan tempat Anda menggambar.
Yang perlu Anda lakukan adalah ini: Jika Anda mengetahui dimensi bitmap Anda terkait dengan screensize yang diberikan, misalnya ukuran layar ponsel cerdas Anda. Kemudian Anda dapat menghitung dimensi target dari bitmap yang diskalakan. Inilah matematika (dibungkus dalam contoh):
Katakanlah Anda memiliki Bitmap A dengan dimensi 25x50 (widthxheight) yang ditampilkan pada layar dengan dimensi 100x200 (widthxheight). Untuk ukuran layar (100x200) bitmap memiliki dimensi yang benar - sekarang jika Anda ingin menampilkan bitmap pada layar yang lebih besar, Anda perlu:
- Hitung faktor skala untuk ukuran bitmap
- Pertahankan rasio aspek bitmap (sehingga tidak terdistorsi)
Katakanlah layar yang lebih besar adalah 200x300 (widthxheight) maka faktor skala untuk lebarnya adalah:
200(target screen width)/100(default screen width) = 2
Jadi 2 adalah faktor skala kami untuk nilai lebar dan tinggi bitmap, karena kami perlu mempertahankan aspek rasio bitmap, kami cukup mengalikan faktor skala dengan lebar dan tinggi bitmap:
bitmapWidth * 2 = scaledBitmapWidth
bitmapHeight * 2 = scaledBitmapHeight
Jadi menggunakan contoh bitmap A kami dari atas dan formula yang disebutkan, dimensi baru dari bitmap adalah: 50x100 (widthxheight) karena:
2*25(width) = 50 height
2*50(height) = 100 height
Jadi sekarang kita tahu ukuran baru dari bitmap kita, kita cukup menggunakan panggilan API yang saya sebutkan di atas dan mengisi bagian yang kosong:
Bitmap.createScaledBitmap (myBitmap, 50, 100, false)
myBitmap dalam contoh di atas adalah bitmap A asli yang memiliki dimensi 25x50 dan diskalakan ke 50x100 menggunakan cuplikan kode di atas.
Namun - ini tidak akan menyelesaikan masalah awal Anda dari aplikasi yang hanya mengambil sudut kanan atas perangkat berukuran tablet. Untuk menjawab pertanyaan itu, kami membutuhkan jawaban untuk pertanyaan yang kami tanyakan tentang pengaturan Anda. Saya akan dengan cepat menjumlahkannya di sini:
- Apakah Anda menggunakan mesin gim seperti AndEngine atau Unity ?
- Apakah Anda menulis tata letak Anda di xml? Jika ya, bagaimana tata letak root Anda untuk merender konten game Anda?
- Anda menyebutkan bahwa Anda menerapkan SurfaceHolder.Callback? Lebar / tinggi yang disediakan dalam pemanggilan metode surfaceChanged memberi Anda ukuran permukaan - apakah ukurannya sama ketika aplikasi Anda berjalan di smartphone atau tablet?
- Apakah Anda memiliki akses ke SurfaceView (atau apa pun yang ditautkan ke SurfaceHolder.Callback yang Anda laksanakan), sehingga kami dapat menentukan apakah itu yang secara kaku mengatur ukuran aplikasi ke ukuran ponsel cerdas.
- Apakah masalah pengubahan ukuran yang sama terjadi pada emulator dengan resolusi layar yang berbeda?
Kecurigaan umum: Tidak setiap smartphone memiliki ukuran layar yang sama, bahkan ada berbagai ukuran layar, yang membuat saya bertanya-tanya: Apakah Anda pernah menguji aplikasi Anda pada smartphone dengan ukuran layar yang berbeda dari layar Anda? Karena - fakta bahwa itu sesuai dengan layar Anda, tetapi bukan tablet, membuat saya bertanya-tanya siapa yang menentukan dimensi tersebut dan kapan. Karena saya ragu aplikasi dapat menyesuaikan dengan semua ukuran layar ponsel cerdas, tetapi tidak dengan ukuran tablet - tidak masuk akal (karena mereka memiliki inti Android yang sama yang menjalankannya, beberapa perbedaan antara sx, 3. x dan 4.x samping) KECUALI Anda menggunakan kerangka kerja yang tidak mendukung (untuk alasan apa pun - mungkin Anda harus membeli tambahan dukungan tablet atau apa pun) ukuran layar berukuran tablet. Itu sebabnya sangat penting untuk mengetahui, apakah aplikasi hanya mengubah ukuran dengan benar di ponsel Anda, atau di smartphone lain juga. Satu-satunya cara saya mengetahui bagaimana suatu aplikasi dapat dibatasi pada ukuran layar dari satu ponsel tertentu adalah dengan menggunakan AbsoluteLayout dan umumnya dimensi absolut untuk widget dll ...
UPDATE: Penskalaan x / y Koordinat
Untuk menyesuaikan lokasi bitmap Anda dengan ukuran layar, sesuatu seperti yang berikut ini seharusnya berfungsi:
- Dimensi layar: 100/200 (lebar / tinggi)
- Lokasi Bitmap: x = 50 / y = 100
Sekarang, jika Anda meningkatkan ukuran layar, Anda harus menskalakan nilai x / y itu di sepanjang:
- Dimensi layar: 200/400 (lebar / tinggi)
Faktor skala akan menjadi 2, karena lebar dan tinggi sama-sama bertambah dua. Oleh karena itu dimensi akan ...
- Lokasi bitmap: x = 100 / y = 200
Percobaan lain - kali ini dengan faktor skala berbeda untuk lebar / tinggi
- Dimensi layar: 100/150 (lebar / tinggi)
- Lokasi bitmap: x = 50 / y = 50
Jika layar target baru 150/250 maka perhitungannya adalah:
- Faktor skala untuk lebar = targetWidth / originalWidth = 1.5
- Faktor skala untuk tinggi = targetHeight / originalHeight = 1.666 ... (Periode)
Sekarang kita perlu skala koordinat x / y, x diskalakan menggunakan skala lebar dan tinggi diskalakan menggunakan skala tinggi, inilah hasilnya:
- x = originalX * 1.5 = 75
- y = asliY * 1.666 .. (Periode) = 83.333 ... (Periode)
Jadi dimensi layar baru dan koordinat x / y yang diskalakan adalah:
- width = 150
- tinggi = 250
- x = 75
- y = 83.333 ... (Periode)
Singkatnya, algoritme untuk penskalaan bitmap adalah:
X = (targetScreenWidth / defaultScreenWidth) * defaultXCoordinate
Y = (targetScreenHeight / defaultScreenHeight) * defaultYCoordinate