সেটউইথ (ইন্ট পিক্সেল) ডিপ বা পিক্স ব্যবহার করে?


95

সেটউইথ (ইন্ট পিক্সেল) ইউনিট হিসাবে ডিভাইস স্বাধীন পিক্সেল বা শারীরিক পিক্সেল ব্যবহার করে? উদাহরণস্বরূপ, সেটউইথ (100) ভিউয়ের প্রস্থকে 100 ডিপ বা 100 পিক্সে সেট করে?

ধন্যবাদ

উত্তর:


222

এটি পিক্সেল ব্যবহার করে তবে আমি নিশ্চিত যে আপনি কীভাবে পরিবর্তে ডপগুলি ব্যবহার করবেন তা ভাবছেন। উত্তর আছে TypedValue.applyDimension()। কোডগুলিতে ডিপগুলি কীভাবে পিক্সে রূপান্তর করতে হয় তার একটি উদাহরণ এখানে:

// Converts 14 dip into its equivalent px
Resources r = getResources();
int px = Math.round(TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP, 14,r.getDisplayMetrics()));

64
আপনি এনবিডিপস * getRes श्रोत ()। GetDisplayMetics ()। ঘনত্ব
রোমান গাই

9
আসলে, টাইপডভ্যালু.প্লাইডাইমেনশন () যা ঠিক তাই করে। আমি এটি পোস্ট করার বিষয়টি বিবেচনা করেছি, তবে যে কোনও কিছু পরিবর্তনের ক্ষেত্রে আমি এপিআইয়ের মধ্য দিয়ে যেতে পছন্দ করি ... যদিও আমি অনুমান করি যে আপনি যদি ঠিক করেন তবে এই পদ্ধতিটি ব্যবহার করা নিরাপদ। :)
ড্যান লু

12
অ্যাপ্লিকেশনডাইমেনশন () সংস্করণটি আরও কোড চালায় এবং এটি পড়তে আমার আরও একটু অসুবিধা হয়। এফডব্লিউআইডাব্লু, আমি পোস্ট করা লাইনটি হ'ল আমরা ফ্রেমওয়ার্ক এবং স্ট্যান্ডার্ড অ্যাপ্লিকেশনগুলিতে জায়গা জুড়ে আসলে ব্যবহার করি।
রোমেন গাই

4
হাই, আমি উপরোক্ত দুটি উদাহরণ ব্যবহার করে দেখেছি এবং এটি পিক্সেলগুলি সঠিকভাবে গণনা করছে বলে মনে হয় না। পরিবর্তে, এটি আমার দৃষ্টিতে আমি নির্দিষ্ট করে নিখুঁত মানটি ফিরিয়ে দেয়: অ্যান্ড্রয়েড: লেআউট_উইথ = আমার ক্ষেত্রে "50 ডিপ"। এটি আমাকে এক্সএমএল ফাইলে সঠিক মান 50 প্রদান করবে। আমি তখন এটি অ্যাপ্লিকেশনটিতে যাচাই করেছিলাম এবং প্রত্যাশার মতো মানটি ভুল এবং প্রত্যাশিত ভিউটি খুব বড় করে
জোনাথন

Px থেকে পিটি রূপান্তর করার একমাত্র সমাধান আমি পেয়েছি, খুব সুন্দর।
এ-লাইভ

24

কোডে অবিচ্ছিন্ন সংখ্যক ডিআইপি প্রাপ্তির সঠিক উপায়টি হ'ল ডিপি মানগুলি যুক্ত একটি রিসোর্স এক্সএমএল ফাইল তৈরি করা যেমন:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="image_width">100dp</dimen>
    <dimen name="image_height">75dp</dimen>
</resources>

তারপরে আপনার কোডটিতে রিসোর্সটি উল্লেখ করুন:

float width = getResources().getDimension(R.dimen.image_width));
float height = getResources().getDimension(R.dimen.image_height));

আপনি যে ফ্লোটটি ফিরে এসেছেন তা সেই অনুযায়ী ডিভাইসের পিক্সেল ঘনত্বের জন্য মাপানো হবে এবং তাই আপনাকে পুরো অ্যাপ্লিকেশন জুড়ে কোনও রূপান্তর পদ্ধতির প্রতিরূপ তৈরি করার দরকার নেই।


আমার পরিস্থিতিতে, এই সমাধানটি সর্বোত্তমভাবে কাজ করে যেখানে আমার কাছে একটি কাস্টম ডায়লগ রয়েছে যাতে একটি তালিকাভিউ রয়েছে এবং তালিকাভিউতে শিরোনাম লেবেল এবং কলামগুলির প্রস্থ একই প্রস্থে সেট করতে চাইছে।
ওয়েন ফিপস

আপনার প্রথম বাক্যটি দারুণ মজার, আপনি মূলত বলছেন যে একটি এক্সএমএল ফাইল তৈরি করা "কোডের মধ্যে [কিছু] নির্দিষ্ট করার " উপযুক্ত উপায় । ওয়েল আমি মনে করি আপনি কেবল
কোডটিতে

@ জোফ্রে হ্যাঁ আপনি কী বলতে চাইছেন তা আমি দেখতে পেয়েছি তাই আমি শব্দটি সামান্য আপডেট করেছি
এসডিজেএমসি হাতি

7

পদ্ধতি সেটউইথ (১০০), প্রস্থ হিসাবে ১০০ পিক্সেট সেট করুন (ডিপিতে নয়)। সুতরাং আপনাকে বিভিন্ন অ্যান্ড্রয়েড ফোনে প্রস্থের বিভিন্নতার বিভিন্ন সমস্যার মুখোমুখি হতে পারে o সুতরাং পিক্সেলের পরিবর্তে ডিপিতে পরিমাপ ব্যবহার করুন sample নমুনা প্রস্থের ডিপিতে পরিমাপ পেতে নীচের কোডটি ব্যবহার করুন = 300px এবং উচ্চতা = 400px।

int width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 300, getResources().getDisplayMetrics());

int Height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 400, getResources().getDisplayMetrics());


0

অবশ্যই পিক্সেল, পদ্ধতিটি প্যারামিটার হিসাবে পিক্সেল চাইছে।


4
যদি এটি লেআউট এক্সএমএল ফাইলে থাকে তবে আমরা অ্যান্ড্রয়েড: লেআউট_উইথ = "100 ডিপ" বা অ্যান্ড্রয়েড: লেআউট_উইথ = "100px" নির্দিষ্ট করতে পারি। উত্স কোডে, আমরা 100 ডিপ হিসাবে কোনও বিন্যাসের প্রস্থ নির্দিষ্ট করতে পারি না?
ব্যবহারকারী 256239

সরাসরি নয়, আপনাকে ডিসপ্লেমেট্রিক্স.ডেনসিটি ব্যবহার করে নিজেকে রূপান্তর করতে হবে।
রোমেন গাই

0

আমার উপরের উত্তরের উপর ভিত্তি করে যা আমার পক্ষে সূক্ষ্ম কাজ করে, আমি কিছু সহায়ক পদ্ধতি উত্পন্ন করি, পুরো প্রকল্পে এগুলি ব্যবহার করার জন্য কেবল সেগুলি আপনার ব্যবহারগুলিতে যুক্ত করুন।

   // value in DP
   public static int getValueInDP(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInDP(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
    }

    // value in PX
    public static int getValueInPixel(Context context, int value){
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }

    public static float getValueInPixel(Context context, float value){
        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, value, context.getResources().getDisplayMetrics());
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.