既存のビューにカスタムXML属性を追加しようとしています
それらをカスタムビューに追加することは大したことではありませんが、「基本的な」ビュー(TextView、LinearLayout、ImageViewなど)でこれらの属性にアクセスする方法がわかりません。
そして、フラグメントやライブラリプロジェクトが関係している場合、これはより困難になります
これまでのところ、これが私のコードです
税関属性の定義と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 argでonCreateを使用しないでください!)、2つのswカスタム属性を取得する唯一の方法は次のとおりです。
カスタムLayoutInflater.FactoryをonCreateViewのフラグメントLayoutInflaterに設定します
@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; }
カスタムLayoutInflater.Factoryでカスタム属性を取得しようとしています:
public class StarWarsLayoutFactory implements Factory { @Override public View onCreateView(String name, Context context, AttributeSet attrs) { *** What to do here ? *** return null; } }
誰かがこの種の質問をしましたか?
私がここで欠けているものは何ですか?
事前にThx!