16

私のアプリケーションでは、テキストビューに 8 ディップの上下マージンを設定したいと考えています。だから私がそれを好きなら -

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

スタイルの内容がどこにあるかは問題なく動作します-

<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.setTextAppearance(context, R.style.settings_plain_text);

スタイルで設定した上下のマージンは表示されません。助けてください。

4

4 に答える 4

1

setTextAppearence(..)プレフィックスを使用して xml 属性を設定するだけandroid:text_*ですが、他の属性を読み取り、基になるLayoutParams実装を認識してプログラムで設定する独自のメソッドを作成することもできます。

ContextThemeWrapperを使用して特定のテーマ値を取得したり、スタイル リソース ID を に渡したりできることに注意してください.obtainStyledAttributes(..)

例として:

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();
}
于 2016-01-07T13:51:18.173 に答える
0
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(textView.getLayoutParams());
    lp.setMargins(10, 20, 10, 20);
    textView.setLayoutParams(lp);

// xml では、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
于 2016-02-07T13:17:03.257 に答える
-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);

それが役に立てば幸い!

編集:

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);
于 2015-04-04T16:50:36.560 に答える