我正在尝试在现有的视图中添加自定义XML属性。
将它们添加到自定义视图中并不困难,但我不知道如何在“基本”视图(如TextView、LinearLayout、ImageView等)中访问这些属性。
当涉及到Fragment和/或Library项目时,这更加困难。
到目前为止,这是我的代码:
自定义属性定义和XML(attrs.xml和布局):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="StarWars">
<attr name="jedi" format="string" />
<attr name="rank" format="string" />
</declare-styleable>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:sw="http://schemas.android.com/apk/res-auto"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="28dp"
android:gravity="center_horizontal"
sw:jedi="Obiwan" />
<TextView
android:id="@+id/rank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="28dp"
android:gravity="center_horizontal"
sw:rank="Master" />
由于我将其放在片段上膨胀(因此没有带有 attrs 参数的 onCreate!),尝试获取 2 个自定义 sw 属性的唯一方法是:
Set a custom LayoutInflater.Factory to the Fragment LayoutInflater in onCreateView
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); LayoutInflater layoutInflater = inflater.cloneInContext(inflater.getContext()); layoutInflater.setFactory(new StarWarsLayoutFactory()); View fragmentView = layoutInflater.inflate(R.layout.jedi, container, false); ((TextView) fragmentView.findViewById(android.R.id.jedi)).setText("Yep"); return fragmentView; }
Trying to get the custom attributes on the custom LayoutInflater.Factory :
public class StarWarsLayoutFactory implements Factory { @Override public View onCreateView(String name, Context context, AttributeSet attrs) { *** What to do here ? *** return null; } }
有人有过这样的疑问吗?
我在这里缺少什么?
提前感谢!