অ্যানড্রয়েড কাস্টম ভিউটির উচ্চতা এবং প্রস্থকে প্রোগ্রামগতভাবে সেট করে


128

নামে একটি কাস্টম ভিউ তৈরি করেছি Graphview। এখানে গ্রাফ ভিউ ক্লাসের কাঠামো রয়েছে।

public class GraphView extends View {

    public GraphView(Context context, float[] values, String title, String[] horlabels, String[] verlabels, boolean type) {
        super(context);
                ........
   }

   ..................
   .................
}

আমি একটি টেবিল ব্যবহার করে ভিউ যুক্ত করেছি addview()। এটা ঠিক কাজ করছে। এখন আমি এর জন্য উচ্চতা এবং প্রস্থ নির্ধারণ করতে চাই GraphView। কিভাবে যে কি?

উত্তর:


140

সহজ উপায়টি হ'ল প্রোগ্রামটি আকারে এর মতো আকার নির্ধারণ করা:

graphView.setLayoutParams(new LayoutParams(width, height));

আপনি যদি দেখার সঠিক আকারটি জানেন তবে এটি ঠিক আছে is যাইহোক, যদি আপনি একটি আরো নমনীয় পদ্ধতির চান, আপনি ওভাররাইড করতে পারে onMeasure()পদ্ধতি আরো সঠিকভাবে স্থান উপলব্ধ ও লেআউট সীমাবদ্ধতার (তার উপর নির্ভর করে দৃশ্য পরিমাপ wrap_content, match_parentঅথবা একটি নির্দিষ্ট সাইজ)।

আপনার এসডিকে ডিরেক্টরিতে অ্যান্ড্রয়েড ডক্স এবং নমুনা onMeasure()দেখে কীভাবে ওভাররাইড করা যায় তার একটি উদাহরণ পেতে পারেন ।LabelView


16
আপনি সেখানে কোন লেআউটপ্যারামগুলি আমদানি করছেন তা জানতে সহায়ক হবে।
ব্যবহারকারীর 3690202

1
LayoutParamsবিন্যাস কোথা থেকে হওয়া উচিত graphViewস্থাপন করা হয়। উদাহরণস্বরূপ, যদি এক্সএমএল লেআউটে ফাইলটি graphViewভিতরে রাখা হয় RelativeLayout, তবে আপনার ব্যবহার করা উচিতnew RelativeLayout.LayoutParams(width, height)
ভিক

208

আপনি এর মতো উচ্চতা এবং প্রস্থ নির্ধারণ করতে পারেন:

myGraphView.setLayoutParams(new LayoutParams(width, height));

76
আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে আপনি যে লেআউটপ্যারাম ক্লাসটি ব্যবহার করছেন তা সঠিক প্যারেন্ট লেআউট ক্লাসের। উদাহরণস্বরূপ, যদি আপনার গ্রাফ ভিউ কোনও লিনিয়ারলআউটে থাকে তবে আপনার লিনিয়ারলআউট.লায়আউটপ্যারাম ক্লাসটি ব্যবহার করা দরকার।
yincrash

41
এটিও কাজ করে এবং নিশ্চিত করে যে আপনি সঠিক লেআউটপ্যারাম ক্লাস ব্যবহার করেছেন: কেবলমাত্র করুন myGraphView.getLayoutParams().height = 100;
স্লাই

21
আপনি যদি তা করেন তবে this.getLayoutParams().height = 100এটিকে অনুসরণ করে তা নিশ্চিত করে নিন this.setLayoutParams(this.getLayoutParams()), অন্যথায় এটি কোনও উপকারী হবে না (দরকারী)।
আচল দাভে

4
আমার মনে হয় এই মতামতটি আরও বেশি পয়েন্ট পাচ্ছে od যদিও এটি সহজ এটি অনেক কম মডুলার; আপনি যদি অন্য কোনও জায়গায় নিজের দৃষ্টিভঙ্গিটি ব্যবহার করতে চান তবে আপনার সেই প্রস্থ / উচ্চতার মানগুলিকেও হার্ডকোড করতে হবে। এটি ব্যবহার সম্পর্কে সতর্কতা অবলম্বন করুন।
গর্দহ

1
এটি নির্দেশ করার জন্য @ ইউক্র্যাশ ধন্যবাদ এটি অদ্ভুত বলে মনে হচ্ছে যে আমার কাস্টম ভিউ (আমার ক্ষেত্রে সারফেসভিউ) এর প্যারেন্ট ক্লাসের পরিবর্তে প্যারেন্ট ভিউ'র ক্লাসটি (আমার ক্ষেত্রে
রিলেটিভলআউট

75

আপনি এর মতো আপেক্ষিক বিন্যাসে একটি দৃশ্যের উচ্চতা এবং প্রস্থ সেট করতে পারেন

ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 130;
view.setLayoutParams(params);

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

8
@ দ্বিপেন্দ্রকে কল করার setLayoutParams()প্রয়োজন আছে কারণ এটি অন্যান্য পদ্ধতি যেমন resolveLayoutParams()এবংrequestLayout()
উইলিয়াম

onCreate getLayoutParams () হিসাবে ব্যতিক্রম দেওয়া নাল মান o সুতরাং প্যারামস.উত্তর ব্যতিক্রম
সিবাশীষ

আপনাকে সেই দৃশ্যটি উল্লেখ করতে হবে যার জন্য আপনাকে উচ্চতা নির্ধারণ করতে হবে। আপনি একই দৃষ্টিভঙ্গির দিকে ইঙ্গিত করছেন কিনা তা পরীক্ষা করে দেখুন
রকশি

1
পথ layoutParamsএকটি দৃশ্য এর দীক্ষা এ NPE হবে এই আপনি কি বিন্দু চালানো এ ব্যাখ্যা প্লিজ?
জন সারদিনহা

6

কোটলিনে আপনি সরাসরি তাদের ভার্চুয়াল বৈশিষ্ট্যগুলি ব্যবহার করে যে কোনও দৃশ্যের প্রস্থ এবং উচ্চতা নির্ধারণ করতে পারেন:

someView.layoutParams.width = 100
someView.layoutParams.height = 200

4
spin12.setLayoutParams(new LinearLayout.LayoutParams(200, 120));

spin12আপনার স্পিনার এবং 200 , 120 হয় widthএবং heightআপনার জন্য spinner


3

এটি একটি কোটলিন ভিত্তিক সংস্করণ, ধরে নিলে পিতামাতার দৃষ্টিভঙ্গি এর উদাহরণ LinearLayout

someView.layoutParams = LinearLayout.LayoutParams(100, 200)

এটি একক লাইনে প্রস্থ এবং উচ্চতা ( 100এবং 200) সেট করতে দেয় ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.