एंड्रॉइड में प्रोग्रामेटिकली स्क्रीन घनत्व प्राप्त करना
यह उदाहरण दर्शाता है कि DisplayMetrics का उपयोग करके डिवाइस के स्क्रीन घनत्व (DPI) को कैसे प्राप्त किया जाए।
चरण 1: नया प्रोजेक्ट बनाएं
एंड्रॉइड स्टूडियो में File → New Project चुनें।
चरण 2: लेआउट (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials Point"
android:textAlignment="center"
android:textColor="@android:color/holo_green_dark"
android:textSize="32sp"
android:textStyle="bold" />
<TextView
android:id="@+id/textViewDensity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="स्क्रीन घनत्व यहां दिखेगा"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textAlignment="center" />
<Button
android:id="@+id/btnShowDensity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="स्क्रीन घनत्व खोजें" />
</LinearLayout>
चरण 3: MainActivity.kt
import android.os.Bundle
import android.util.DisplayMetrics
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var button: Button
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
button = findViewById(R.id.btnShowDensity)
textView = findViewById(R.id.textViewDensity)
button.setOnClickListener { showScreenDensity() }
// ऑटो-शो ऑन स्टार्ट
showScreenDensity()
}
private fun showScreenDensity() {
val metrics = DisplayMetrics()
windowManager.defaultDisplay.getRealMetrics(metrics)
// घनत्व मान (1.0 = mdpi बेसलाइन)
val density = resources.displayMetrics.density
val densityDpi = resources.displayMetrics.densityDpi
// स्क्रीन आयाम
val widthPx = metrics.widthPixels
val heightPx = metrics.heightPixels
val widthDp = (widthPx / density).toInt()
val heightDp = (heightPx / density).toInt()
// घनत्व बकेट निर्धारित करें
val densityBucket = when (densityDpi) {
DisplayMetrics.DENSITY_LOW -> "LDPI (120 dpi)"
DisplayMetrics.DENSITY_MEDIUM -> "MDPI (160 dpi) - बेसलाइन"
DisplayMetrics.DENSITY_HIGH -> "HDPI (240 dpi)"
DisplayMetrics.DENSITY_XHIGH -> "XHDPI (320 dpi)"
DisplayMetrics.DENSITY_XXHIGH -> "XXHDPI (480 dpi)"
DisplayMetrics.DENSITY_XXXHIGH -> "XXXHDPI (640 dpi)"
else -> "कस्टम ($densityDpi dpi)"
}
val result = """
घनत्व: $density
घनत्व DPI: $densityDpi
बकेट: $densityBucket
चौड़ाई: ${widthPx}px (${widthDp}dp)
ऊंचाई: ${heightPx}px (${heightDp}dp)
स्केल्ड घनत्व: ${resources.displayMetrics.scaledDensity}
xdpi: ${metrics.xdpi}
ydpi: ${metrics.ydpi}
""".trimIndent()
textView.text = result
}
}
चरण 4: AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.screendensity">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
मुख्य मीट्रिक्स समझाया गया:
| मीट्रिक | विवरण | उपयोग |
|---|---|---|
density | तार्किक घनत्व गुणक (1.0 = 160 dpi) | dp से px रूपांतरण: px = dp * density |
densityDpi | स्क्रीन घनत्व DPI में | संसाधन बकेट चयन (drawable-hdpi, आदि) |
scaledDensity | फॉन्ट स्केलिंग फैक्टर | उपयोगकर्ता फॉन्ट आकार प्राथमिकता |
xdpi, ydpi | सटीक भौतिक DPI | सटीक भौतिक माप |
उपयोगी एक्सटेंशन फ़ंक्शन:
// dp को px में बदलें fun Int.dpToPx(): Int = (this * resources.displayMetrics.density).roundToInt() // px को dp में बदलें fun Int.pxToDp(): Int = (this / resources.displayMetrics.density).roundToInt() // sp को px में बदलें (फॉन्ट के लिए) fun Int.spToPx(): Int = (this * resources.displayMetrics.scaledDensity).roundToInt() // उपयोग: val marginPx = 16.dpToPx() val textSizePx = 14.spToPx()
आधुनिक विकल्प (WindowMetrics API - API 30+):
@RequiresApi(Build.VERSION_CODES.R)
fun getWindowMetrics() {
val windowMetrics = windowManager.currentWindowMetrics
val bounds = windowMetrics.bounds
val insets = windowManager.currentWindowMetrics.getWindowInsets(
WindowInsets.Type.systemBars()
)
// मल्टी-विंडो, कटआउट, इनसेट्स के लिए सटीक सीमाएं
}