2012-02-28 11 views
13

私のアプリケーションでは、テキストビューに8ディップの上下の余白を設定したいと思います。私はそれが好きですかあれば -スタイルで余白を設定し、そのスタイルをプログラムでTextViewに適用します

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

- 私は、プログラムのようなもののTextViewに同じスタイルを適用するとき

<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> 

しかし -

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

をスタイルの内容がどこにあるか、それが正常に動作します私が設定した上下の余白は表示されません。 助けてください。

+0

のGianluca P.によって応答可能な重複のより簡易版(http://stackoverflow.com/questions/3142067/android-set-style -in-code); 'setTextAppearance()'は、名前が示唆するようにテキストの見た目だけを変更し、余白は含みません。ビューのスタイルを設定することは、私がここで重複として述べた質問では、より複雑であり、リンクされています(基本的に同じ基本的な質問です)。 –

+0

[ランタイムでのAndroidのビューでのインフレスタイル]の複製が可能です(http://stackoverflow.com/questions/29437095/inflate-style-on-android-view-on-runtime#comment47067374_29437095) – corsair992

+0

@ corsair992実際にコメントする必要がありますこの質問はその質問の3年前に尋ねられたので、その質問は重複している可能性があります。 :) – Rajkiran

答えて

-1

このコードを使用すると、これを達成できます。

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); 

希望します。

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

質問を完全にお読みください。問題は明らかにスタイルのマージンが必要であることを示唆しています。すべてのtextViewに対して常に定義する必要はありません。 P.P.マージンを8個ではなく10個に変更すると、あなたの答えはどうなりますか? Shoudl私はすべてのラインを見つけて、どこにでもその変更を加えますか?:) – Rajkiran

+0

@Rajkiranあなたは値で静的なクラスを作ることによってそれを得ることができます。値を変更したい場合は、値クラス – Nacho

+0

に変更してください。この回答が必要です。残りのスタイルはどうですか? XMLではなく、JavaファイルでUIのすべての処理を行うことはできません(そうしたとしても、そうするべきではありません)。スタイルは最高のものになるでしょう。しかし、答えをありがとう。 – Rajkiran

0

setTextAppearence(..)は、XMLプレフィックスandroid:text_*を持つ属性が、あなたはまだあなたの他の属性を読み取り、プログラム的基礎となるLayoutParams実装を知って、それらを設定し、独自のメソッドを書くことができますセットアップ。一例として、

あなたが特定のテーマ値を取得するためContextThemeWrapperを使用するか、.obtainStyledAttributes(..にsyleリソースIDを渡すことができることに留意してください)

:XMLで

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); 

//私の親textViewのレイアウトは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

[コードでAndroidのセットスタイル]の

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(); 
    } 
} 
関連する問題