Android ตั้งค่าความสูงและความกว้างของมุมมองแบบกำหนดเองโดยใช้โปรแกรม


128

Graphviewผมได้สร้างมุมมองที่กำหนดเองที่มีชื่อว่า นี่คือโครงสร้างสำหรับคลาส GraphView

public class GraphView extends View {

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

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

ฉันได้เพิ่มมุมมองในตารางโดยใช้addview()ไฟล์. มันทำงานได้ดี ตอนนี้ฉันต้องการกำหนดความสูงและความกว้างสำหรับไฟล์GraphView. ต้องทำอย่างไร?

คำตอบ:


141

วิธีง่ายๆคือกำหนดขนาดตามโปรแกรมดังนี้:

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

นี่เป็นเรื่องปกติหากคุณทราบขนาดที่แน่นอนของมุมมอง แต่ถ้าคุณต้องการวิธีการที่ยืดหยุ่นมากขึ้นคุณสามารถแทนที่onMeasure()วิธีการในการวัดมุมมองอย่างแม่นยำมากขึ้นทั้งนี้ขึ้นอยู่กับพื้นที่ที่มีอยู่และข้อ จำกัด รูปแบบ ( wrap_content, match_parentหรือขนาดคงที่)

คุณสามารถดูตัวอย่างวิธีการลบล้างได้onMeasure()โดยดูที่เอกสาร AndroidและLabelViewตัวอย่างในไดเรกทอรี SDK ของคุณ


16
จะเป็นประโยชน์หากทราบว่าคุณกำลังนำเข้า LayoutParams ใดที่นั่น
user3690202

1
LayoutParamsควรจะมาจากรูปแบบที่graphViewถูกวางไว้ ตัวอย่างเช่นถ้าในไฟล์รูปแบบ XML โดยgraphViewจะอยู่ภายในRelativeLayoutแล้วคุณควรใช้new RelativeLayout.LayoutParams(width, height)
วิก

208

คุณสามารถตั้งค่าความสูงและความกว้างได้ดังนี้:

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

76
คุณควรตรวจสอบให้แน่ใจว่าคลาส LayoutParam ที่คุณใช้มาจากคลาส Layout หลักที่ถูกต้อง ตัวอย่างเช่นหาก GraphView ของคุณอยู่ใน LinearLayout คุณต้องใช้คลาส LinearLayout.LayoutParams
yincrash

41
นอกจากนี้ยังมีการทำงานและช่วยให้คุณใช้ LayoutParams ถูกต้องระดับ: myGraphView.getLayoutParams().height = 100;ก็ทำ
sulai

21
หากทำตามนั้นอย่าthis.getLayoutParams().height = 100ลืมทำตามthis.setLayoutParams(this.getLayoutParams())มิฉะนั้นจะไม่ทำอะไรเลย (มีประโยชน์)
Achal Dave

4
ฉันคิดว่ามันแปลกที่คำตอบนี้ได้รับคะแนนมากขึ้น แม้ว่าจะง่ายกว่า แต่ก็มีโมดูลาร์น้อยกว่ามาก หากคุณต้องการใช้มุมมองของคุณในที่อื่นคุณจะต้องฮาร์ดโค้ดค่าความกว้าง / ความสูงที่นั่นด้วย ระวังการใช้สิ่งนี้
gardarh

1
ขอบคุณ @yincrash ที่ชี้ให้เห็น ดูเหมือนจะแปลกที่ฉันต้องใช้คลาสมุมมองผู้ปกครอง (RelativeLayout ในกรณีของฉัน) แทนคลาสหลักของมุมมองที่กำหนดเองของฉัน (SurfaceView ในกรณีของฉัน)
ericn

75

คุณสามารถกำหนดความสูงและความกว้างของมุมมองในเค้าโครงที่สัมพันธ์กันเช่นนี้

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

2
คุณไม่จำเป็นต้องตั้งค่า layoutparam อีกครั้ง มันจะสะท้อนโดยอัตโนมัติ นี่คือข้อดีของวิธีเชิงวัตถุ
Dipendra

8
@Dipendra ต้องโทรไปหาsetLayoutParams()เพราะมันเรียกใช้วิธีการอื่นเช่นresolveLayoutParams()และrequestLayout()
วิลเลียม

ให้ข้อยกเว้นใน onCreate getLayoutParams () เป็นค่า null ดังนั้นพารามิเตอร์ความสูงทำให้เกิดข้อยกเว้น
Sibasish

คุณควรอ้างอิงมุมมองที่คุณต้องตั้งค่าความสูง ตรวจสอบว่าคุณกำลังชี้ไปที่มุมมองเดียวกันหรือไม่
Rakshi

1
การเริ่มต้นlayoutParamsที่มุมมองจะเป็น NPE โปรดอธิบายว่าคุณเรียกใช้สิ่งนี้ในจุดใด
John Sardinha

6

บน Kotlin คุณสามารถตั้งค่าความกว้างและความสูงของมุมมองใด ๆ ได้โดยตรงโดยใช้คุณสมบัติเสมือน:

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

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

spin12เป็นปินเนอร์ของคุณและ200 , 120ถูกwidthและสำหรับคุณheightspinner


3

นี้เป็นรุ่นตาม Kotlin LinearLayoutสมมติว่ามุมมองของพ่อแม่เป็นตัวอย่างของ

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

ซึ่งอนุญาตให้ตั้งค่าความกว้างและความสูง ( 100และ200) ในบรรทัดเดียว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.