如何访问 android 资源属性
How to access android resource attributes
我想访问
getContext().obtainStyledAttributes(attrs,android.R.styleable.TextView)
但我在 styleable
中遇到错误。 android.R
中没有可用的 styleable
。
我将在我的复合视图中使用该值。
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
init(null);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs != null && !isInEditMode()) {
TypedValue typedValue = new TypedValue();
int[] textSizeAttr = new int[] { android.R.attr.textSize };
int indexOfAttrTextSize = 0;
TypedArray a = getContext().obtainStyledAttributes(typedValue.data, textSizeAttr);
int textSize = a.getDimensionPixelSize(indexOfAttrTextSize, -1);
a.recycle();
}
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="hgyanani.customcompoundview.MainActivity">
<hgyanani.customcompoundview.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="16sp" />
</RelativeLayout>
你可以这样试试:
private void init(AttributeSet attrs) {
if (attrs != null && !isInEditMode()) {
int[] attrsArray = new int[] {
android.R.attr.textSize, // 0
};
TypedArray a = getContext().obtainStyledAttributes(attrs, attrsArray);
int textSize = a.getDimensionPixelSize(0 /*index of attribute in attrsArray*/, View.NO_ID);
}
}
textSize 将 return pixel.
中的值
如果您想要 sp 中 textsize 的确切值,那么在自定义视图的构造函数中(接受 AttributeSet 的构造函数),您可以从 Android' 中检索属性s 命名空间:
String xmlProvidedSize = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "textSize");
xmlProvidedSize 的值类似于“16.0sp”,也许只需对字符串进行一些编辑,您就可以提取数字。
我想访问
getContext().obtainStyledAttributes(attrs,android.R.styleable.TextView)
但我在 styleable
中遇到错误。 android.R
中没有可用的 styleable
。
我将在我的复合视图中使用该值。
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context);
init(null);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init(attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(attrs);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init(attrs);
}
private void init(AttributeSet attrs) {
if (attrs != null && !isInEditMode()) {
TypedValue typedValue = new TypedValue();
int[] textSizeAttr = new int[] { android.R.attr.textSize };
int indexOfAttrTextSize = 0;
TypedArray a = getContext().obtainStyledAttributes(typedValue.data, textSizeAttr);
int textSize = a.getDimensionPixelSize(indexOfAttrTextSize, -1);
a.recycle();
}
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="hgyanani.customcompoundview.MainActivity">
<hgyanani.customcompoundview.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textSize="16sp" />
</RelativeLayout>
你可以这样试试:
private void init(AttributeSet attrs) {
if (attrs != null && !isInEditMode()) {
int[] attrsArray = new int[] {
android.R.attr.textSize, // 0
};
TypedArray a = getContext().obtainStyledAttributes(attrs, attrsArray);
int textSize = a.getDimensionPixelSize(0 /*index of attribute in attrsArray*/, View.NO_ID);
}
}
textSize 将 return pixel.
中的值
如果您想要 sp 中 textsize 的确切值,那么在自定义视图的构造函数中(接受 AttributeSet 的构造函数),您可以从 Android' 中检索属性s 命名空间:
String xmlProvidedSize = attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "textSize");
xmlProvidedSize 的值类似于“16.0sp”,也许只需对字符串进行一些编辑,您就可以提取数字。