在我的应用程序中,我想将8 dip的上下边距设置为textview。所以,如果我这样做 -
<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时 -
textview.setTextAppearance(context, R.style.settings_plain_text);
它没有显示我设置的样式的上下边距。 请帮忙。
答案 0 :(得分:1)
setTextAppearence(..)
仅设置前缀为android:text_*
的xml属性,但您仍然可以编写自己的方法来读取其他属性,并以编程方式设置它们,了解基础LayoutParams
实现。
请注意,您可以使用ContextThemeWrapper
获取特定主题值或在.obtainStyledAttributes(..
中传递syle资源ID
举个例子:
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();
}
答案 1 :(得分:1)
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();
}
}
答案 2 :(得分: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
答案 3 :(得分:-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);