2015-11-07 21 views
32

public void setTextAppearance (bối cảnh Bối cảnh, int resid) gia tăng ở mức API 1
Phương pháp này đã được tán thành trong mức API 23. Sử dụng setTextAppearance (int) để thay thế.setTextAppearance bị phản đối ở mức API 23

Câu hỏi của tôi: Tại sao câu hỏi này không được dùng nữa? Tại sao nó không cần Context nữa? Và quan trọng nhất, cách sử dụng setTextAppearance(int resId) cho các phiên bản cũ hơn?

+0

Bạn có thể làm điều đó cho phiên bản cũ chỉ cần kiểm tra 'Build.VERSION.SDK_INT' sẽ là Pankaj

Trả lời

62

Bạn có thể sử dụng TextViewCompat từ thư viện hỗ trợ:

import android.support.v4.widget.TextViewCompat 

    // ... 

    TextViewCompat.setTextAppearance(view, resId) 

Bên trong nó được bối cảnh từ view (view.getContext()) trên API < 23.

Source for TextViewCompat

Source for TextView (API23)

48
  1. cách sử dụng setTextAppearance(int resId) cho các phiên bản cũ hơn?

    Sử dụng nó như thế này:

    if (Build.VERSION.SDK_INT < 23) { 
        super.setTextAppearance(context, resId); 
    } else { 
        super.setTextAppearance(resId); 
    } 
    

    Để biết thêm thông: https://stackoverflow.com/a/33393762/4747587

  2. Tại sao nó được phản? Tại sao nó không cần bối cảnh nữa?

    Lý do tại sao nó không được chấp nhận là không cần phải vượt qua một context. Nó sử dụng ngữ cảnh mặc định được cung cấp bởi View. Nhìn vào mã nguồn bên dưới. Điều đó sẽ giải thích nó.

    public void setTextAppearance(@StyleRes int resId) { 
        setTextAppearance(mContext, resId); 
    } 
    

    mContext ở đây được xác định trong lớp View. Vì vậy, bạn không cần phải vượt qua một Context để phương pháp này nữa. TextView sẽ sử dụng ngữ cảnh được cung cấp cho nó trong quá trình tạo. Điều đó có ý nghĩa hơn.

CẬP NHẬT

Chức năng này được thêm vào như là một phần của Thư viện hỗ trợ. Vì vậy, thay vì TextView, hãy sử dụng TextViewCompat [documentation]. Ngoài ra còn có các lớp khác được giới thiệu cùng với điều này, như ImageViewCompat.

+17

Điều này thật kinh khủng, tại sao họ không thêm setTextAppearance như một phần của lớp ContextCompat? Bây giờ chúng ta phải bọc tất cả các phương thức setTextAppearance của chúng ta hoặc chạy nguy cơ lỗi mã không dùng nữa trong mã máy khách của chúng ta. – worked

+9

@worked xem câu trả lời của tôi: http://stackoverflow.com/a/37028325/2613692 Họ đã thêm phương thức vào lớp TextViewCompat trước khi câu hỏi này được đăng. – RustamG

+0

Tuyệt vời! Cảm ơn @RustamG – worked

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