Saya ingin memuat nilai apa adanya. Saya memiliki dua dimension.xml
file, satu di /res/values/dimension.xml
dan yang lain di /res/values-sw360dp/dimension.xml
.
Dari kode sumber saya ingin melakukan sesuatu seperti
getResources().getDimension(R.dimen.tutorial_cross_marginTop);
Ini berfungsi tetapi nilai yang saya dapatkan dikalikan faktor kepadatan layar (1,5 untuk hdpi, 2,0 untuk xhdpi, dll).
Saya juga coba lakukan
getResources().getString(R.dimen.tutorial_cross_marginTop);
Ini akan bekerja pada prinsipnya tetapi saya mendapatkan string yang berakhiran "dip" ...
android
android-resources
dpi
dimension
Héctor Júdez Sapena
sumber
sumber
getDimensionPixelSize(int id)
yang secara tepat menyatakan bahwa ia kembali dalam Pixel, jadigetDimension(int id)
harus kembali dalam dp (unit independen ketergantungan), yang siap digunakan, misalnya dengan ViewsetPadding
Jawaban:
Di dimens.xml saya
Dalam kode Jika saya melakukannya
ini akan mengembalikan 72 yang sebagai status dokumen dikalikan dengan kepadatan telepon saat ini (48dp x 1,5 dalam kasus saya)
persis seperti yang dinyatakan dokumen:
jadi jika Anda ingin nilai dp tepat seperti dalam xml cukup bagilah dengan kepadatan DisplayMetrics
dp akan menjadi 48 sekarang
sumber
dp
akan memberikan nilai piksel skala relatif terhadap skala objek sumber daya yang digunakan untuk mengambilnya. Setelah Anda masuk ke berbagai cara untuk mendapatkan sumber daya, ini akan lebih relevan. Untuk kesederhanaan, Anda dapat menganggapnya sebagai relatif terhadap skala layar. Ada jugasp
, atau piksel relatif terhadap ukuran teks sistem, danpx
, atau piksel secara langsung. Masing-masing berbeda dan memiliki tujuan yang berbeda.sumber
The
Resource
kelas juga memiliki metode getDimensionPixelSize () yang saya pikir akan sesuai dengan kebutuhan Anda.sumber
getDimensionPixelSize()
jika Anda dapat merujuk dokumen yang dengan jelas menyatakan PengembalianResource dimension value multiplied by the appropriate metric and truncated to integer pixels.
Bagi mereka yang hanya perlu menyimpan beberapa
int
nilai dalam sumber daya, Anda dapat melakukan hal berikut.integers.xml
Kode
sumber
Anda dapat menggunakan getDimensionPixelOffset () alih-alih getDimension, jadi Anda tidak perlu melakukan cast ke int.
sumber
Anda dapat menulis integer dalam file xml juga ..
apakah Anda melihat [ini] http://developer.android.com/guide/topics/resources/more-resources.html#Integer ? digunakan sebagai .
sumber
Saya pikir itu baik untuk mendapatkan nilai sesuai resolusi tetapi jika Anda tidak ingin melakukan ini berikan ini di px .......
Pixel-independent pixel (dp)
Unit piksel virtual yang harus Anda gunakan saat mendefinisikan tata letak UI, untuk mengekspresikan dimensi atau posisi tata letak dengan cara yang tidak bergantung pada kepadatan. Pixel independen-kepadatan setara dengan satu pixel fisik pada layar 160 dpi, yang merupakan kepadatan awal yang diasumsikan oleh sistem untuk layar kepadatan "sedang". Saat runtime, sistem secara transparan menangani penskalaan unit dp apa pun, jika perlu,
based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: px = dp * (dpi / 160). For example, on a 240 dpi screen, 1 dp equals 1.5 physical pixels.
Anda harus selalu menggunakan unit dp saat menentukan UI aplikasi Anda, untuk memastikan tampilan UI Anda yang benar di layar dengan kepadatan yang berbeda.Saya pikir itu baik untuk mengubah nilai sesuai resolusi tetapi jika Anda tidak ingin melakukan ini berikan ini di px .......
lihat tautan ini
sesuai ini
dp
Pixel-Density-independent - Unit abstrak yang didasarkan pada kepadatan fisik layar. Unit-unit ini relatif terhadap layar 160 dpi (dots per inch), di mana 1dp kira-kira sama dengan 1px.
When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down.
Rasio dp-ke-pixel akan berubah dengan kerapatan layar, tetapi tidak harus dalam proporsi langsung. Menggunakan unit dp (bukan unit px) adalah solusi sederhana untuk membuat ukuran tampilan di tata letak Anda diubah ukurannya dengan benar untuk kepadatan layar yang berbeda. Dengan kata lain, ini memberikan konsistensi untuk ukuran dunia nyata elemen UI Anda di berbagai perangkat.px
Piksel - Sesuai dengan piksel aktual di layar. Unit pengukuran ini tidak direkomendasikan karena representasi aktual dapat bervariasi antar perangkat; setiap perangkat mungkin memiliki jumlah piksel yang berbeda per inci dan mungkin memiliki lebih banyak atau lebih sedikit total piksel yang tersedia di layar.
sumber
Gunakan Ekstensi Kotlin
Anda dapat menambahkan ekstensi untuk menyederhanakan proses ini. Ini memungkinkan Anda untuk hanya menelepon
context.dp(R.dimen. tutorial_cross_marginTop)
untuk mendapatkan nilai FloatJika Anda ingin menanganinya tanpa konteks, Anda dapat menggunakan
Resources.getSystem()
:Misalnya, pada perangkat xhdpi, gunakan
24.dp
untuk mendapatkan 12.0 atau12.px
untuk mendapatkan 24sumber