2011-12-11 69 views
25

Tôi gặp sự cố với TextView. Tôi không muốn có bất kỳ margin/padding trên nó.Làm cách nào để loại bỏ lề trên của TextView?

<TextView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/ptp_hour" 
      android:textColor="@color/black" 
      android:textSize="100dp" 
      android:height="100dp" 
      android:layout_marginTop="0dp" 
      android:paddingTop="0dp" 
      android:includeFontPadding="false" 
      android:maxLines="1" 
      android:text="10"/> 

TextView của tôi trông như thế này và mặc dù textSizeheight được thiết lập để giá trị như nhau, có một không gian trên phông chữ. Nó làm tôi bực mình vì tôi muốn đặt một góc nhìn khác tương đối phía trên của phông chữ. Khoảng cách này có bao gồm phông chữ không?

TextView in RelativeLayout

Và một câu hỏi khác: Nếu tôi phát hiện ra rằng 20dp lề từ trên và từ dưới 7dp hoạt động hoàn hảo trên thiết bị của mình, tôi có thể tin cậy rằng nó sẽ cư xử theo một cách tương tự như trên các màn hình khác? (các lề này dành cho các nút)

+0

Bạn có thể gửi một hình ảnh của những gì bạn đang nhìn thấy? –

+0

có xin vui lòng gửi một hình ảnh –

+0

Có vẻ như phông chữ sẽ có khoảng cách trên cùng. Hãy thử giữ chiều cao là 100dp nhưng tăng textSize (102dp hoặc 105dp vv). – Squonk

Trả lời

43

sử dụng android:includeFontPadding="false" đã giúp tôi rất nhiều trong một tình huống tương tự.

+0

Cảm ơn! Điều này cố định phông chữ của tôi không phù hợp với đầu của TextView của tôi đúng cách. – TSL

+1

Cảm ơn, chỉ là những gì tôi đang tìm kiếm. Điều này, bằng cách này nên được mặc định. – HGPB

+10

hoạt động một chút, nhưng không thể giải quyết vấn đề của tôi một cách hoàn hảo. –

2

Điều bạn cần làm là đặt chế độ xem khác tương ứng với đầu phông chữ và đặt tiêu đề là android:layout_marginBottom ở dạng nhúng sao cho phù hợp với đầu phông chữ. Nếu phông chữ có một lề, tôi không nghĩ rằng có một cách tốt hơn để làm điều đó.

1

Có không gian này được bao gồm theo mặc định. Bạn không thể xóa không gian đó theo khu vực tìm kiếm của tôi. Vì vậy, bạn cần phải thực hiện một số logic để có cái nhìn như vậy.

Xem bên dưới hình ảnh:

enter image description here

của nó không phải là một ý tưởng tốt, nhưng bạn có thể làm như dưới đây mã:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="wrap_content" android:layout_width="wrap_content" 
    android:background="#ffffff"> 
    <TextView android:layout_width="wrap_content"   
     android:layout_height="wrap_content"   
     android:id="@+id/ptp_hour"   
     android:textColor="@android:color/black"   
     android:textSize="100sp" 
     android:lineSpacingMultiplier="0.8" 
     android:scrollY="-100dp" 
     android:scrollX="100dp" 
     android:text="10"/> 
    <TextView 
     android:text="10" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:textColor="#00FFFFFF" 
     android:shadowColor="#000000" 
     android:shadowDy="-50" 
     android:shadowRadius="1" 
     android:textSize="100dp"/> 

</LinearLayout> 

Ở đây, lần đầu tiên "10" là tài sản của bạn và thứ hai như tôi đã đặt cho bạn.

Tận hưởng. :))

+0

xem câu trả lời được cập nhật. –

+0

Bạn có thể đạt được điều tương tự với việc đặt android: lineSpacingExtra thành giá trị âm. Nhưng cả hai đều có vấn đề là TextView sẽ cắt các ký tự ra khỏi giới hạn như g, q, p. –

+0

Vui nhộn, tôi nghĩ vậy. Nhưng không hữu ích nếu tôi muốn loại bỏ không gian thêm phía dưới quá. – user3390963

9

Tôi gặp vấn đề tương tự khi đặt android:includeFontPadding=false không có tác dụng. Giải pháp tốt nhất mà tôi có thể tìm thấy trong thời gian hợp lý là để ghi đè phương pháp onDraw của TextView và điều chỉnh khung hình cho sự khác biệt giữa đầu và đi lên các giá trị của font chữ:

FontMetricsInt fontMetricsInt; 
@Override 
protected void onDraw(Canvas canvas) { 
    if (adjustTopForAscent){ 
     if (fontMetricsInt == null){ 
      fontMetricsInt = new FontMetricsInt(); 
      getPaint().getFontMetricsInt(fontMetricsInt); 
     } 
     canvas.translate(0, fontMetricsInt.top - fontMetricsInt.ascent); 
    } 
    super.onDraw(canvas); 
} 
+0

Điều này gần như hoạt động, trong một TextView với một phông chữ nhỏ nó sắp xếp hoàn hảo. Trên phông chữ 74sp, không nhiều lắm. Nhưng 1 cho giải pháp tốt này. –

Các vấn đề liên quan