ฉันจะใช้วิธีการดึงสารประกอบแทน LinearLayout ที่มี ImageView และ TextView ได้อย่างไร


198

เรียกใช้เครื่องมือผ้าสำลีใหม่เทียบกับรหัสของฉัน มันมาพร้อมกับคำแนะนำที่ดีมากมาย แต่อันนี้ฉันไม่เข้าใจ

แท็กนี้และลูก ๆ ของมันสามารถถูกแทนที่ด้วยแท็กเดียว

ปัญหา: ตรวจสอบว่าสามารถเปลี่ยนโหนดปัจจุบันโดย TextView โดยใช้ drawable ผสมได้หรือไม่

LinearLayout ซึ่งมี ImageView และ TextView สามารถจัดการได้อย่างมีประสิทธิภาพมากขึ้นในฐานะที่เป็น drawable ผสม

และนี่คือเค้าโครงของฉัน

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_centerInParent="true">

<ImageView 
    android:id="@+id/upImage"
    android:layout_width="20dp"
    android:layout_height="20dp"
    android:layout_gravity="center_vertical"
    android:scaleType="centerInside"
    android:src="@drawable/up_count_big">
</ImageView>

<TextView
    android:id="@+id/LikeCount"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="2dp"
    android:layout_marginBottom="1dp"
    android:textColor="@color/gray"
    android:textSize="16sp"
    android:layout_gravity="center_vertical">
</TextView>
</LinearLayout>

ใครสามารถให้ตัวอย่างที่เป็นรูปธรรมเกี่ยวกับวิธีการสร้างสารประกอบได้ในกรณีนี้


4
fwiw เป็นหนึ่งในการตรวจสอบที่ฉันปิดการใช้งานตามปกติเนื่องจากการบวกเท็จ ด้วยวิธีนี้ไม่สามารถเปลี่ยนTextView/ ImageViewคอมโบทั้งหมดได้
Richard Le Mesurier

@RichardLeMesurier คุณสามารถใช้มุมมองที่กำหนดเองหากคุณต้องการกำหนดขนาดของภาพ สิ่งนี้จะทำให้มุมมองของคุณเบาลง ดูคำตอบของฉัน: stackoverflow.com/a/31916731/2308720
Oleksandr

@Alex ฉันเห็นด้วยในหลายกรณี แต่จากประสบการณ์ของฉันฉันมักจะไม่คุ้มค่ากับปัญหาในการสร้างมุมมองที่กำหนดเองเพื่อหลีกเลี่ยงสิ่งที่ฉันพิจารณาว่าเป็นการตรวจสอบผ้าสำลีแบบบั๊ก
Richard Le Mesurier

คำตอบ:


259

TextView มาพร้อมกับ 4 drawable ผสมหนึ่งสำหรับแต่ละซ้ายบนขวาและล่าง

ในกรณีของคุณคุณไม่จำเป็นต้องใช้LinearLayoutและImageViewที่ทุกคน เพียงแค่เพิ่มที่คุณandroid:drawableLeft="@drawable/up_count_big"TextView

ดูTextView # setCompoundDrawablesWithIntrinsicBoundsสำหรับข้อมูลเพิ่มเติม


35
ไม่จำเป็นเนื่องจากลิงก์ของคุณจะแสดงตัวอย่างพร้อมรูปภาพแบบไดนามิก ImageViewในกรณีที่ว่ามันอาจจะยังคงง่ายขึ้นหรือดีกว่าที่จะใช้ คำเตือนบอกว่า 'สามารถถูกแทนที่ด้วย' ไม่ใช่ 'ควรถูกแทนที่ด้วย'
David O'Meara

9
แต่ฉันจะสร้างช่องว่างระหว่างรูปภาพและข้อความได้อย่างไร
Hitesh Dhamshaniya

7
@Hitesh Dhamshaniya โดยใช้คุณสมบัติ DrawablePadding ใน XML หรือรหัส
Snicolas

2
ในกรณีของฉันฉันย้ายไปที่ LinearLayout พร้อม ImageView / TextView ภายในเพราะ android: drawableLeft ไม่ได้มีการควบคุมที่เพียงพอ - ดังนั้นสิ่งที่คุณบอกฉันโดยทั่วไปคือคำเตือน / ข้อเสนอแนะนี้เป็นเรื่องโกหก
BrainSlugs83

5
มันไม่ใช่เรื่องโกหกสำหรับบางกรณี TextView เดียวอาจมีประสิทธิภาพอย่างแท้จริง แต่โดยทั่วไป - ใช่แล้ว ImageView พร้อม TextView ให้การควบคุมที่สมบูรณ์ยิ่งขึ้น
ılǝ

20

ถ้าด้วยเหตุผลบางอย่างที่คุณต้องเพิ่มผ่านรหัสคุณสามารถใช้สิ่งนี้:

mTextView.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);

โดยที่ซ้าย, บน, ล่างขวาคือ Drawables


ต้องใช้ API 17 ด้านบน
Puni

ฉันไม่คิดอย่างนั้นเอกสารคู่มือระบุตั้งแต่ API 1
Javier P

ดูลิงค์นี้ [เอกสารประกอบ] ( developer.android.com/reference/android/widget/… , android.graphics.drawable, วาดได้, android.graphics.drawable, วาดได้, android.graphics.drawable
วาดภาพประกอบ

ใช่ทราบญาติในชื่อวิธี;) ฉันไม่ได้หมายถึงหนึ่งในคำตอบนี้
ฮาเวียร์ P

3

หากต้องการเพิ่มสิ่งนี้ - การกำหนดความกว้าง & ความสูงของ drawable เป็นไปตามโพสต์นี้:

(รหัสของเขาใช้งานได้)


1

คุณสามารถใช้การนำมาใช้ผสมกันได้ แต่ถ้าคุณต้องการกำหนดขนาดของ drawable ใช้ไลบรารีนี้:

https://github.com/a-tolstykh/textview-rich-drawable

นี่คือตัวอย่างเล็ก ๆ ของการใช้งาน:

<com.tolstykh.textviewrichdrawable.TextViewRichDrawable
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Some text"
        app:compoundDrawableHeight="24dp"
        app:compoundDrawableWidth="24dp" />
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.