Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में कोटलिन का उपयोग करके प्रोग्रामेटिकली स्क्रीन DPI कैसे प्राप्त करें?

एंड्रॉइड में प्रोग्रामेटिकली स्क्रीन घनत्व प्राप्त करना

यह उदाहरण दर्शाता है कि 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()
    )
    // मल्टी-विंडो, कटआउट, इनसेट्स के लिए सटीक सीमाएं
}
  1. Android में बटन का उपयोग करके स्क्रीन ओरिएंटेशन प्रोग्रामेटिक रूप से कैसे बदलें Android में बटन का उपयोग करके स्क्रीन ओरिएंटेशन प्रोग्रामेटिक रूप से कैसे बदलें

    परिचय`setRequestedOrientation()` का उपयोग करके एक्टिविटी की ओरिएंटेशन को रनटाइम पर बदला जा सकता है। यह लेख दो बटनों के साथ पोर्ट्रेट और लैंडस्केप मोड के बीच स्विच करने का उदाहरण दिखाता है।कार्यान्वयनचरण 1: लेआउट (activity_main.xml)<Button android:id=@+id/buttonSetPotrait android:text=Click here c

  1. एंड्रॉइड डिवाइस का IP एड्रेस प्रोग्रामेटिकली कैसे प्राप्त करें? एंड्रॉइड डिवाइस का IP एड्रेस प्रोग्रामेटिकली कैसे प्राप्त करें?

    एंड्रॉइड में डिवाइस IP एड्रेस प्राप्त करना यह ट्यूटोरियल वाई-फाई और मोबाइल डेटा दोनों के लिए लोकल और पब्लिक IP एड्रेस प्राप्त करने के तरीकों को कवर करता है। आवश्यक अनुमतियाँ <uses-permission android:name=android.permission.ACCESS_WIFI_STATE /> <uses-permission android:name=android.permissi

  1. Android में प्रोग्रामेटिकली स्क्रीन DPI/डेंसिटी कैसे प्राप्त करें? Android में प्रोग्रामेटिकली स्क्रीन DPI/डेंसिटी कैसे प्राप्त करें?

    Android में DisplayMetrics से स्क्रीन डेंसिटी (DPI) प्राप्त करना बटन क्लिक पर डिवाइस की स्क्रीन डेंसिटी (ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi) पता करने का तरीका। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project। चरण 2: लेआउट में TextView और Button res/layout/activity_main.xml: