2011-06-07 11 views
44

में कनवर्ट करें sp इकाइयों में TextView के वर्तमान TextSize की आवश्यकता है।पिक्सेल को sp

लेकिन getTextSize()pixels में आकार देता है। तो convert pixels to sp का कोई तरीका है?

+0

के बीच कनवर्ट करते हैं [यह जवाब] (http://stackoverflow.com/a/42108115/3681880) 'डीपी -> पीएक्स',' पीएक्स -> डीपी ',' एसपी से पीएक्स', और 'पीएक्स से एसपी' रूपांतरणों के लिए। – Suragch

उत्तर

25

देखें DisplayMetrics वर्ग, यह densityDpi और scaledDensity के लिए खाने हैं।

उदाहरण उपयोग:

float sp = px/getResources().getDisplayMetrics().scaledDensity; 
+1

बस स्पष्ट करने के लिए: 'DisplayMetrics' वर्ग में _fields_' densityDpi' और 'scaledDensity' है, विधियों नहीं। और स्केलिंग के लिए, कोई 'घनत्व डीपीआई' के बजाय 'घनत्व' फ़ील्ड का उपयोग करना चाहता है। –

+0

कृपया पूछे गए प्रश्न का उत्तर दें। किसी वर्ग के नाम का उपयोग करना जिसका उत्तर किसी उत्तर के लिए उपयोग किया जा सकता है वह स्वयं उत्तर नहीं है। – Megakoresh

131

उपयोग इस

public static float pixelsToSp(Context context, float px) { 
    float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity; 
    return px/scaledDensity; 
} 

आप चाहते हैं परीक्षण करता है, तो इस विधि का सही इस स्निपेट का उपयोग काम करता है, तो

एक्सएमएल

<TextView 
     android:id="@+id/txtHelloWorld" 
     android:text="@string/hello_world" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textSize="20sp"/> 

<TextView 
     android:id="@+id/txtHelloWorld2" 
     android:text="@string/hello_world" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     /> 

जावा

View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
TextView helloWorldTextView = (TextView) rootView.findViewById(R.id.txtHelloWorld); 
TextView helloWorldTextView2 = (TextView) rootView.findViewById(R.id.txtHelloWorld2); 
helloWorldTextView2.setTextSize(pixelsToSp(getActivity(), helloWorldTextView.getTextSize())); 

टेक्स्टव्यू का फ़ॉन्ट आकार दोनों समान होना चाहिए।

5

सार्वजनिक क्षेत्र को देखने के लिए अजीब है जो रन टाइम पर समायोजित है लेकिन यह काम करता है। मानक डीपीआई 160 है, जो भी आपका डिवाइस डीपीआई है, 240 कहें, घनत्व और स्केल किए गए घनत्व 240/160 = 1.5 दिखाएंगे इस प्रकार आप पिक्सेल और एसपी: पीएक्स = 1.5 * एसपी

संबंधित मुद्दे