2012-02-28 7 views
13

Trong ứng dụng của tôi, tôi muốn đặt lề trên cùng và dưới cùng của 8 dip thành dạng xem văn bản. Vì vậy, nếu tôi làm điều đó như thế -Đặt lề theo phong cách và áp dụng kiểu đó cho TextView theo chương trình

<TextView 
android:id="@+id/tv_text1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
style="@style/settings_plain_text"/> 

nó hoạt động tốt nơi các nội dung phong cách là -

<style name="settings_plain_text"> 
    <item name="android:layout_marginTop"> 8dip </item> 
    <item name="android:layout_marginBottom"> 8dip </item> 
    <item name="android:textSize"> 18sp </item> 
</style> 

Nhưng khi tôi áp dụng các phong cách tương tự để TextView rằng lập trình như -

textview.setTextAppearance(context, R.style.settings_plain_text); 

nó không hiển thị lề trên và dưới mà tôi đã đặt theo kiểu. Xin vui lòng giúp đỡ.

+0

thể trùng lặp của [phong cách thiết lập android trong code] (http://stackoverflow.com/questions/3142067/android-set-style -trong mã); 'setTextAppearance()' chỉ thay đổi giao diện văn bản như tên cho thấy, không bao gồm lề. Đặt phong cách của Chế độ xem phức tạp hơn và được liên kết trong câu hỏi tôi đã đề cập ở đây dưới dạng bản sao (vì về cơ bản là cùng một câu hỏi cơ bản). –

+0

bản sao có thể có của [Kiểu thổi phồng trên Android Xem trên Thời gian chạy] (http://stackoverflow.com/questions/29437095/inflate-style-on-android-view-on-runtime#comment47067374_29437095) – corsair992

+0

@ corsair992 Bạn thực sự nên nhận xét câu hỏi đó có thể trùng lặp vì câu hỏi này được hỏi 3 năm trước câu hỏi đó. :) – Rajkiran

Trả lời

-1

Bạn có thể đạt được nó bằng cách sử dụng mã này.

TextView tv = (TextView)findViewById(R.id.tv_text1); 
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams(); 
params.setMargins(0, 8, 0, 8); //substitute parameters for left, top, right, bottom 
tv.setLayoutParams(params); 

Hy vọng điều đó sẽ hữu ích!

EDIT:

public final class Values { 
    public static final int MARGIN_TOP = 8; 
    public static final int MARGIN_BOTTOM = 8; 
} 

TextView tv = (TextView)findViewById(R.id.tv_text1); 
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams(); 
params.setMargins(0, Values.MARGIN_TOP, 0, Values.MARGIN_BOTTOM); //substitute parameters for left, top, right, bottom 
tv.setLayoutParams(params); 
+0

Vui lòng đọc câu hỏi hoàn toàn. Câu hỏi rõ ràng cho thấy rằng nó cần margin trong phong cách .. vì vậy mà tôi không phải xác định nó cho mỗi textView tất cả các thời gian. P.S. Điều gì sẽ xảy ra với câu trả lời của bạn nếu lợi nhuận được cho là thay đổi thành 10px thay vì 8? Shoudl tôi tìm thấy tất cả các dòng và thực hiện thay đổi đó ở khắp mọi nơi?:) – Rajkiran

+0

@ Rajkiran bạn có thể lấy nó bằng cách tạo một lớp tĩnh với các giá trị. Nếu bạn muốn thay đổi giá trị, chỉ cần thay đổi giá trị trong giá trị lớp – Nacho

+0

Mong đợi câu trả lời này. Điều gì về phần còn lại của phong cách? Bạn không thể (ngay cả khi bạn làm, bạn không nên) làm tất cả các công cụ giao diện người dùng trong các tệp java thay vì XML. Styles sẽ phù hợp nhất. Cảm ơn vì câu trả lời. – Rajkiran

0

setTextAppearence(..) chỉ thiết lập các thuộc tính xml với tiền tố android:text_* nhưng bạn vẫn có thể viết cho em phương pháp riêng mà đọc thuộc tính khác và đặt chúng theo chương trình biết cơ bản LayoutParams thực hiện.

Hãy nhớ rằng bạn có thể sử dụng một ContextThemeWrapper để đạt được giá trị chủ đề cụ thể hoặc vượt qua một id nguồn syle trong .obtainStyledAttributes(..)

Như một ví dụ:

int[] attrs= new int[] { 
    android.R.attr.layout_marginTop,  // 0 
    android.R.attr.layout_marginLeft, // 1 
    android.R.attr.layout_marginRight, // 2 (used in example) 
    android.R.attr.layout_marginBottom}; // 3 
final TypedArray arr = context.obtainStyledAttributes(attrs); 
try { 
    // ... 
    layoutParams.rightMargin = arr.getDimensionPixelSize(2); 
    // ... 
} finally { 
    arr.recycle(); 
} 
0
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(textView.getLayoutParams()); 
    lp.setMargins(10, 20, 10, 20); 
    textView.setLayoutParams(lp); 

// trong xml mẹ của tôi bố cục cho textView là RelativeLayout.

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorPrimary"> 
    <TextView 
    android:id="@+id/test" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@color/bg_gradient_end" 
    android:text="zdfhzfdh"/> 
</RelativeLayout 
0

phiên bản đơn giản hóa của More đã trả lời bởi Gianluca P.

public void applyTextStyle(TextView v, int styleResId) 
{ 
    int[] attrs= new int[] { 
      android.R.attr.layout_marginTop,  // 0 
      android.R.attr.layout_marginLeft, // 1 
      android.R.attr.layout_marginBottom, // 2 
      android.R.attr.layout_marginRight}; // 3 (used in example) 
    final TypedArray arr = this.obtainStyledAttributes(styleResId,attrs); 
    try { 
     ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); 
     lp.topMargin = arr.getDimensionPixelSize(0,lp.topMargin); 
     lp.leftMargin = arr.getDimensionPixelSize(1,lp.leftMargin); 
     lp.bottomMargin = arr.getDimensionPixelSize(2,lp.bottomMargin); 
     lp.rightMargin = arr.getDimensionPixelSize(3,lp.rightMargin); 

     v.requestLayout(); 
    } finally { 
     arr.recycle(); 
    } 
}